From f2b214b0dff95d6bb79cbb5b6ff5ba9d90f655c9 Mon Sep 17 00:00:00 2001 From: oharboe Date: Wed, 2 Jan 2008 21:52:27 +0000 Subject: Initial import from www.ecosforge.net --- zpu/.project | 11 + zpu/COPYING | 12 + zpu/ChangeLog | 11 + zpu/STATUS | 11 + zpu/docs/presentations/zpu.odp | Bin 0 -> 60715 bytes zpu/docs/presentations/zpudemo.odp | Bin 0 -> 222644 bytes zpu/docs/zpupresentation.odp | Bin 0 -> 78518 bytes zpu/docs/zpupresentation.ppt | Bin 0 -> 150016 bytes zpu/docs/zpupresentation_old.odt | Bin 0 -> 126772 bytes zpu/docs/zpuprotoarch.odt | Bin 0 -> 23961 bytes zpu/hdl/example/helloworld.vhd | 12506 +++++++++++++++++++ zpu/hdl/example/io.vhd | 97 + zpu/hdl/example/log.txt | 15 + zpu/hdl/example/sim_fpga_top.vhd | 179 + zpu/hdl/example/simzpu.do | 29 + zpu/hdl/example/zpu_config.vhd | 20 + zpu/hdl/index.html | 47 + zpu/hdl/wishbone/wishbone_pkg.vhd | 52 + zpu/hdl/wishbone/zpu_system.vhd | 71 + zpu/hdl/wishbone/zpu_wb_bridge.vhd | 49 + zpu/hdl/zpu3/src/.cvsignore | 1 + zpu/hdl/zpu3/src/build.xml | 114 + zpu/hdl/zpu3/src/clocks.vhd | 246 + zpu/hdl/zpu3/src/ddr_bridge.vhd | 203 + zpu/hdl/zpu3/src/dmips_ram.vhd | 3824 ++++++ zpu/hdl/zpu3/src/dualport_ram.vhd | 4996 ++++++++ zpu/hdl/zpu3/src/dualport_ram_synplicity.vhd | 5012 ++++++++ zpu/hdl/zpu3/src/helloworld_ram.vhd | 3345 +++++ zpu/hdl/zpu3/src/ic300.bitgen | 27 + zpu/hdl/zpu3/src/ic300.lso | 1 + zpu/hdl/zpu3/src/ic300.ucf | 146 + zpu/hdl/zpu3/src/ic300.vhd | 144 + zpu/hdl/zpu3/src/ic300_config.vhd | 20 + zpu/hdl/zpu3/src/ic300pkg.vhd | 88 + zpu/hdl/zpu3/src/io.vhd | 95 + zpu/hdl/zpu3/src/log.txt | 156 + zpu/hdl/zpu3/src/niltrace.vhd | 26 + zpu/hdl/zpu3/src/sim_fpga_top.vhd | 127 + zpu/hdl/zpu3/src/status.txt | 67 + zpu/hdl/zpu3/src/testlut.vhd | 106 + zpu/hdl/zpu3/src/timer.vhd | 157 + zpu/hdl/zpu3/src/trace.vhd | 80 + zpu/hdl/zpu3/src/txt_util.vhd | 586 + zpu/hdl/zpu3/src/xilinx_dualport.vhd | 1482 +++ zpu/hdl/zpu3/src/xmake.filelist | 5 + zpu/hdl/zpu3/src/xmake.xst | 53 + zpu/hdl/zpu3/src/zpu_config.vhd | 25 + zpu/hdl/zpu3/src/zpu_pipelined.vhd | 852 ++ zpu/hdl/zpu3/src/zpu_top.vhd | 421 + zpu/hdl/zpu3/src/zpu_top_medium.vhd | 768 ++ zpu/hdl/zpu3/src/zpuio.vhd | 180 + zpu/hdl/zpu3/src/zpupkg.vhd | 130 + zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7pkg.vhd | 31 + zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7wb.vhd | 213 + .../dummyfpgalib/ddrsdram/simscripts/ddr_tb.do | 17 + .../dummyfpgalib/ddrsdram/simscripts/ddr_top.do | 111 + zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_pkg.vhd | 90 + zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_tb.vhd | 301 + zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_top.vhd | 660 + .../zpu4/dummyfpgalib/ddrsdram/src/mt46v16m16.vhd | 1320 ++ zpu/hdl/zpu4/src/.cvsignore | 5 + zpu/hdl/zpu4/src/bram.vhd | 3807 ++++++ zpu/hdl/zpu4/src/bram_dmips.vhd | 3717 ++++++ zpu/hdl/zpu4/src/build.xml | 114 + zpu/hdl/zpu4/src/clocks.vhd | 246 + zpu/hdl/zpu4/src/dmipssmalltrace.do | 26 + zpu/hdl/zpu4/src/dmipstrace.do | 25 + zpu/hdl/zpu4/src/dmipstraceintstack.do | 25 + zpu/hdl/zpu4/src/dram_dmips.vhd | 3702 ++++++ zpu/hdl/zpu4/src/dram_hello.vhd | 3214 +++++ zpu/hdl/zpu4/src/fastdmips.do | 19 + zpu/hdl/zpu4/src/fastdmipsintstack.do | 19 + zpu/hdl/zpu4/src/fastdmipssmall.do | 21 + zpu/hdl/zpu4/src/fastsimzpu.do | 19 + zpu/hdl/zpu4/src/ic300.bitgen | 27 + zpu/hdl/zpu4/src/ic300.lso | 1 + zpu/hdl/zpu4/src/ic300.ucf | 146 + zpu/hdl/zpu4/src/ic300.vhd | 144 + zpu/hdl/zpu4/src/ic300_config.vhd | 26 + zpu/hdl/zpu4/src/ic300pkg.vhd | 88 + zpu/hdl/zpu4/src/io.vhd | 92 + zpu/hdl/zpu4/src/log.txt | 380 + zpu/hdl/zpu4/src/niltrace.vhd | 26 + zpu/hdl/zpu4/src/sim_fpga_top.vhd | 190 + zpu/hdl/zpu4/src/simzpu.do | 23 + zpu/hdl/zpu4/src/simzpu_intstack.do | 23 + zpu/hdl/zpu4/src/status.txt | 109 + zpu/hdl/zpu4/src/testlut.vhd | 114 + zpu/hdl/zpu4/src/timer.vhd | 61 + zpu/hdl/zpu4/src/trace.vhd | 84 + zpu/hdl/zpu4/src/txt_util.vhd | 587 + zpu/hdl/zpu4/src/xmake.filelist | 12 + zpu/hdl/zpu4/src/xmake.filelist.bramsmall | 5 + zpu/hdl/zpu4/src/xmake.xst | 53 + zpu/hdl/zpu4/src/zpu_config.vhd | 16 + zpu/hdl/zpu4/src/zpu_config_fastsim.vhd | 15 + zpu/hdl/zpu4/src/zpu_config_trace.vhd | 15 + zpu/hdl/zpu4/src/zpu_core.vhd | 900 ++ zpu/hdl/zpu4/src/zpu_core_small.vhd | 433 + zpu/hdl/zpu4/src/zpuio.vhd | 256 + zpu/hdl/zpu4/src/zpuio_bram.vhd | 229 + zpu/hdl/zpu4/src/zpupkg.vhd | 168 + zpu/hdl/zpu4/test/dmips/build.sh | 3 + zpu/hdl/zpu4/test/dmips/dmips.bin | Bin 0 -> 14612 bytes zpu/hdl/zpu4/test/dmips/dmips.elf | Bin 0 -> 89778 bytes zpu/hdl/zpu4/test/dmips/dmips.ram | 3507 ++++++ zpu/hdl/zpu4/test/hello/build.sh | 3 + zpu/hdl/zpu4/test/hello/hello.bin | Bin 0 -> 12664 bytes zpu/hdl/zpu4/test/hello/hello.c | 51 + zpu/hdl/zpu4/test/hello/hello.elf | Bin 0 -> 150455 bytes zpu/hdl/zpu4/test/hello/hello.ram | 3165 +++++ zpu/index.html | 20 + zpu/roadshow/roadshow/build/makefirmware.sh | 13 + zpu/roadshow/roadshow/codesize/.cvsignore | 1 + zpu/roadshow/roadshow/codesize/crt0_phi.S | 178 + zpu/roadshow/roadshow/codesize/hello.c | 9 + zpu/roadshow/roadshow/codesize/index.html | 58 + zpu/roadshow/roadshow/codesize/small.c | 9 + zpu/roadshow/roadshow/codesize/small.elf | Bin 0 -> 1577 bytes zpu/roadshow/roadshow/codesize/smallstd.c | 9 + zpu/roadshow/roadshow/dhrystone/.cvsignore | 2 + zpu/roadshow/roadshow/dhrystone/RATIONALE | 361 + zpu/roadshow/roadshow/dhrystone/README_C | 78 + zpu/roadshow/roadshow/dhrystone/VARIATIONS | 157 + zpu/roadshow/roadshow/dhrystone/build.sh | 7 + zpu/roadshow/roadshow/dhrystone/dhry-c | 1779 +++ zpu/roadshow/roadshow/dhrystone/dhry.h | 423 + zpu/roadshow/roadshow/dhrystone/dhry_1.c | 533 + zpu/roadshow/roadshow/dhrystone/dhry_2.c | 192 + zpu/roadshow/roadshow/dhrystone/dhry_c.dif | 141 + zpu/roadshow/roadshow/dhrystone/dhrystone.bin | Bin 0 -> 13028 bytes zpu/roadshow/roadshow/dhrystone/dhrystone.zpu | Bin 0 -> 13069 bytes zpu/roadshow/roadshow/dhrystone/submit.frm | 17 + .../roadshow/ecos/codesize/zpuarmcodesize.htm | 1049 ++ zpu/roadshow/roadshow/ecos/index.html | 145 + zpu/roadshow/roadshow/ecos/repository.tar.bz2 | Bin 0 -> 28572 bytes zpu/roadshow/roadshow/games/.cvsignore | 5 + zpu/roadshow/roadshow/games/build.sh | 7 + zpu/roadshow/roadshow/games/eliza.bin | Bin 0 -> 46920 bytes zpu/roadshow/roadshow/games/eliza.elf | Bin 0 -> 342451 bytes zpu/roadshow/roadshow/games/eliza.zpu | Bin 0 -> 46961 bytes zpu/roadshow/roadshow/games/eliza/eliza.c | 269 + zpu/roadshow/roadshow/games/eliza/parse.c | 719 ++ zpu/roadshow/roadshow/games/eliza/parse.h | 33 + zpu/roadshow/roadshow/games/eliza/response.c | 365 + zpu/roadshow/roadshow/games/eliza/response.h | 41 + zpu/roadshow/roadshow/games/sumeria.bin | Bin 0 -> 42324 bytes zpu/roadshow/roadshow/games/sumeria.c | 444 + zpu/roadshow/roadshow/games/sumeria.zpu | Bin 0 -> 42365 bytes zpu/roadshow/roadshow/helloworld/build.sh | 6 + zpu/roadshow/roadshow/helloworld/test.bin | Bin 0 -> 49836 bytes zpu/roadshow/roadshow/helloworld/test.c | 11 + zpu/roadshow/roadshow/helloworld/test.elf | Bin 0 -> 279826 bytes zpu/roadshow/roadshow/helloworld/test.zpu | Bin 0 -> 262353 bytes zpu/roadshow/roadshow/hwtest/build.sh | 6 + zpu/roadshow/roadshow/hwtest/test.S | 19 + zpu/roadshow/roadshow/hwtest/test.bin | Bin 0 -> 48 bytes zpu/roadshow/roadshow/hwtest/test.elf | Bin 0 -> 1343 bytes zpu/roadshow/roadshow/hwtest/test.zpu | Bin 0 -> 212562 bytes zpu/roadshow/roadshow/images/bootloader.phi | Bin 0 -> 167015 bytes zpu/roadshow/roadshow/images/dhrystone.zpu | Bin 0 -> 13069 bytes zpu/roadshow/roadshow/images/eliza.zpu | Bin 0 -> 46961 bytes zpu/roadshow/roadshow/images/ic300.bit | Bin 0 -> 212463 bytes zpu/roadshow/roadshow/images/net_test.zpu | Bin 0 -> 206210 bytes zpu/roadshow/roadshow/images/sumeria.zpu | Bin 0 -> 42365 bytes zpu/roadshow/roadshow/iss/index.html | 14 + zpu/roadshow/roadshow/iss/simulator.jar | Bin 0 -> 54378 bytes zpu/roadshow/roadshow/net_test/.cvsignore | 8 + zpu/roadshow/roadshow/net_test/http_pages.c | 206 + zpu/roadshow/roadshow/net_test/init.cpp | 52 + zpu/roadshow/roadshow/net_test/makefile | 41 + zpu/roadshow/roadshow/net_test/net_test.ecm | 237 + zpu/roadshow/roadshow/net_test/ping_test.c | 585 + zpu/roadshow/roadshow/pics/GCC_logo.png | Bin 0 -> 23450 bytes zpu/roadshow/roadshow/pics/codesize1.PNG | Bin 0 -> 9329 bytes zpu/roadshow/roadshow/pics/codesize2.PNG | Bin 0 -> 16967 bytes zpu/roadshow/roadshow/pics/ecos.gif | Bin 0 -> 1660 bytes zpu/roadshow/roadshow/pics/elizadebug1.PNG | Bin 0 -> 72126 bytes zpu/roadshow/roadshow/pics/elizadebug2.PNG | Bin 0 -> 67822 bytes zpu/snapshot.sh | 7 + .../current/cdl/opencores_ethermac_drivers.cdl | 149 + zpu/sw/ecos/repository/ecos.db | 128 + zpu/sw/helloworld/gccgdb.PNG | Bin 0 -> 34473 bytes zpu/sw/helloworld/gmon.out | Bin 0 -> 120053 bytes zpu/sw/helloworld/hello.bin | Bin 0 -> 49768 bytes zpu/sw/helloworld/hello.bram | 12441 ++++++++++++++++++ zpu/sw/helloworld/hello.c | 6 + zpu/sw/helloworld/hello.elf | Bin 0 -> 279938 bytes zpu/sw/helloworld/zpusim.PNG | Bin 0 -> 17817 bytes zpu/sw/index.html | 44 + zpu/sw/simulator/.classpath | 6 + zpu/sw/simulator/.project | 17 + .../simulator/.settings/org.eclipse.jdt.core.prefs | 66 + zpu/sw/simulator/ChangeLog | 2 + zpu/sw/simulator/build.xml | 7 + zpu/sw/simulator/com/zylin/zpu/simulator/Abel.java | 109 + .../com/zylin/zpu/simulator/FileTracer.java | 285 + zpu/sw/simulator/com/zylin/zpu/simulator/Host.java | 46 + .../simulator/com/zylin/zpu/simulator/Machine.java | 17 + zpu/sw/simulator/com/zylin/zpu/simulator/Phi.java | 126 + .../com/zylin/zpu/simulator/PhiFeeble.java | 34 + zpu/sw/simulator/com/zylin/zpu/simulator/Sim.java | 62 + .../simulator/com/zylin/zpu/simulator/SimApp.java | 112 + .../com/zylin/zpu/simulator/SimFactory.java | 8 + .../com/zylin/zpu/simulator/Simulator.java | 2063 +++ .../simulator/com/zylin/zpu/simulator/State.java | 9 + .../simulator/com/zylin/zpu/simulator/Tracer.java | 21 + zpu/sw/simulator/com/zylin/zpu/simulator/ZPU.java | 14 + .../com/zylin/zpu/simulator/applet/ZPUApplet.java | 281 + .../simulator/exceptions/BadPacketException.java | 22 + .../zpu/simulator/exceptions/CPUException.java | 23 + .../exceptions/DebuggerBreakpointException.java | 10 + .../simulator/exceptions/EndSessionException.java | 22 + .../simulator/exceptions/GDBServerException.java | 25 + .../exceptions/HardwareWatchPointException.java | 12 + .../exceptions/IllegalInstructionException.java | 23 + .../simulator/exceptions/InterruptException.java | 23 + .../exceptions/MemoryAccessException.java | 23 + .../zpu/simulator/exceptions/NoAckException.java | 22 + .../zpu/simulator/exceptions/TraceException.java | 22 + .../exceptions/UnknownPacketException.java | 10 + .../exceptions/UnsupportedSyscallException.java | 12 + .../com/zylin/zpu/simulator/gdb/GDBServer.java | 609 + .../com/zylin/zpu/simulator/gdb/Packet.java | 455 + .../com/zylin/zpu/simulator/tools/MakeDRAM.java | 39 + .../com/zylin/zpu/simulator/tools/MakeRam.java | 39 + .../com/zylin/zpu/stats/CountSequences.java | 94 + zpu/sw/simulator/com/zylin/zpu/stats/DumpIt.java | 17 + .../simulator/com/zylin/zpu/stats/Instruction.java | 62 + .../simulator/com/zylin/zpu/stats/StatKeeper.java | 52 + zpu/sw/simulator/gmon.out | Bin 0 -> 120053 bytes zpu/sw/simulator/zpusim.jar | Bin 0 -> 68039 bytes 232 files changed, 91172 insertions(+) create mode 100644 zpu/.project create mode 100644 zpu/COPYING create mode 100644 zpu/ChangeLog create mode 100644 zpu/STATUS create mode 100644 zpu/docs/presentations/zpu.odp create mode 100644 zpu/docs/presentations/zpudemo.odp create mode 100644 zpu/docs/zpupresentation.odp create mode 100644 zpu/docs/zpupresentation.ppt create mode 100644 zpu/docs/zpupresentation_old.odt create mode 100644 zpu/docs/zpuprotoarch.odt create mode 100644 zpu/hdl/example/helloworld.vhd create mode 100644 zpu/hdl/example/io.vhd create mode 100644 zpu/hdl/example/log.txt create mode 100644 zpu/hdl/example/sim_fpga_top.vhd create mode 100644 zpu/hdl/example/simzpu.do create mode 100644 zpu/hdl/example/zpu_config.vhd create mode 100644 zpu/hdl/index.html create mode 100644 zpu/hdl/wishbone/wishbone_pkg.vhd create mode 100644 zpu/hdl/wishbone/zpu_system.vhd create mode 100644 zpu/hdl/wishbone/zpu_wb_bridge.vhd create mode 100644 zpu/hdl/zpu3/src/.cvsignore create mode 100644 zpu/hdl/zpu3/src/build.xml create mode 100644 zpu/hdl/zpu3/src/clocks.vhd create mode 100644 zpu/hdl/zpu3/src/ddr_bridge.vhd create mode 100644 zpu/hdl/zpu3/src/dmips_ram.vhd create mode 100644 zpu/hdl/zpu3/src/dualport_ram.vhd create mode 100644 zpu/hdl/zpu3/src/dualport_ram_synplicity.vhd create mode 100644 zpu/hdl/zpu3/src/helloworld_ram.vhd create mode 100644 zpu/hdl/zpu3/src/ic300.bitgen create mode 100644 zpu/hdl/zpu3/src/ic300.lso create mode 100644 zpu/hdl/zpu3/src/ic300.ucf create mode 100644 zpu/hdl/zpu3/src/ic300.vhd create mode 100644 zpu/hdl/zpu3/src/ic300_config.vhd create mode 100644 zpu/hdl/zpu3/src/ic300pkg.vhd create mode 100644 zpu/hdl/zpu3/src/io.vhd create mode 100644 zpu/hdl/zpu3/src/log.txt create mode 100644 zpu/hdl/zpu3/src/niltrace.vhd create mode 100644 zpu/hdl/zpu3/src/sim_fpga_top.vhd create mode 100644 zpu/hdl/zpu3/src/status.txt create mode 100644 zpu/hdl/zpu3/src/testlut.vhd create mode 100644 zpu/hdl/zpu3/src/timer.vhd create mode 100644 zpu/hdl/zpu3/src/trace.vhd create mode 100644 zpu/hdl/zpu3/src/txt_util.vhd create mode 100644 zpu/hdl/zpu3/src/xilinx_dualport.vhd create mode 100644 zpu/hdl/zpu3/src/xmake.filelist create mode 100644 zpu/hdl/zpu3/src/xmake.xst create mode 100644 zpu/hdl/zpu3/src/zpu_config.vhd create mode 100644 zpu/hdl/zpu3/src/zpu_pipelined.vhd create mode 100644 zpu/hdl/zpu3/src/zpu_top.vhd create mode 100644 zpu/hdl/zpu3/src/zpu_top_medium.vhd create mode 100644 zpu/hdl/zpu3/src/zpuio.vhd create mode 100644 zpu/hdl/zpu3/src/zpupkg.vhd create mode 100644 zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7pkg.vhd create mode 100644 zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7wb.vhd create mode 100644 zpu/hdl/zpu4/dummyfpgalib/ddrsdram/simscripts/ddr_tb.do create mode 100644 zpu/hdl/zpu4/dummyfpgalib/ddrsdram/simscripts/ddr_top.do create mode 100644 zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_pkg.vhd create mode 100644 zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_tb.vhd create mode 100644 zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_top.vhd create mode 100644 zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/mt46v16m16.vhd create mode 100644 zpu/hdl/zpu4/src/.cvsignore create mode 100644 zpu/hdl/zpu4/src/bram.vhd create mode 100644 zpu/hdl/zpu4/src/bram_dmips.vhd create mode 100644 zpu/hdl/zpu4/src/build.xml create mode 100644 zpu/hdl/zpu4/src/clocks.vhd create mode 100644 zpu/hdl/zpu4/src/dmipssmalltrace.do create mode 100644 zpu/hdl/zpu4/src/dmipstrace.do create mode 100644 zpu/hdl/zpu4/src/dmipstraceintstack.do create mode 100644 zpu/hdl/zpu4/src/dram_dmips.vhd create mode 100644 zpu/hdl/zpu4/src/dram_hello.vhd create mode 100644 zpu/hdl/zpu4/src/fastdmips.do create mode 100644 zpu/hdl/zpu4/src/fastdmipsintstack.do create mode 100644 zpu/hdl/zpu4/src/fastdmipssmall.do create mode 100644 zpu/hdl/zpu4/src/fastsimzpu.do create mode 100644 zpu/hdl/zpu4/src/ic300.bitgen create mode 100644 zpu/hdl/zpu4/src/ic300.lso create mode 100644 zpu/hdl/zpu4/src/ic300.ucf create mode 100644 zpu/hdl/zpu4/src/ic300.vhd create mode 100644 zpu/hdl/zpu4/src/ic300_config.vhd create mode 100644 zpu/hdl/zpu4/src/ic300pkg.vhd create mode 100644 zpu/hdl/zpu4/src/io.vhd create mode 100644 zpu/hdl/zpu4/src/log.txt create mode 100644 zpu/hdl/zpu4/src/niltrace.vhd create mode 100644 zpu/hdl/zpu4/src/sim_fpga_top.vhd create mode 100644 zpu/hdl/zpu4/src/simzpu.do create mode 100644 zpu/hdl/zpu4/src/simzpu_intstack.do create mode 100644 zpu/hdl/zpu4/src/status.txt create mode 100644 zpu/hdl/zpu4/src/testlut.vhd create mode 100644 zpu/hdl/zpu4/src/timer.vhd create mode 100644 zpu/hdl/zpu4/src/trace.vhd create mode 100644 zpu/hdl/zpu4/src/txt_util.vhd create mode 100644 zpu/hdl/zpu4/src/xmake.filelist create mode 100644 zpu/hdl/zpu4/src/xmake.filelist.bramsmall create mode 100644 zpu/hdl/zpu4/src/xmake.xst create mode 100644 zpu/hdl/zpu4/src/zpu_config.vhd create mode 100644 zpu/hdl/zpu4/src/zpu_config_fastsim.vhd create mode 100644 zpu/hdl/zpu4/src/zpu_config_trace.vhd create mode 100644 zpu/hdl/zpu4/src/zpu_core.vhd create mode 100644 zpu/hdl/zpu4/src/zpu_core_small.vhd create mode 100644 zpu/hdl/zpu4/src/zpuio.vhd create mode 100644 zpu/hdl/zpu4/src/zpuio_bram.vhd create mode 100644 zpu/hdl/zpu4/src/zpupkg.vhd create mode 100644 zpu/hdl/zpu4/test/dmips/build.sh create mode 100644 zpu/hdl/zpu4/test/dmips/dmips.bin create mode 100644 zpu/hdl/zpu4/test/dmips/dmips.elf create mode 100644 zpu/hdl/zpu4/test/dmips/dmips.ram create mode 100644 zpu/hdl/zpu4/test/hello/build.sh create mode 100644 zpu/hdl/zpu4/test/hello/hello.bin create mode 100644 zpu/hdl/zpu4/test/hello/hello.c create mode 100644 zpu/hdl/zpu4/test/hello/hello.elf create mode 100644 zpu/hdl/zpu4/test/hello/hello.ram create mode 100644 zpu/index.html create mode 100644 zpu/roadshow/roadshow/build/makefirmware.sh create mode 100644 zpu/roadshow/roadshow/codesize/.cvsignore create mode 100644 zpu/roadshow/roadshow/codesize/crt0_phi.S create mode 100644 zpu/roadshow/roadshow/codesize/hello.c create mode 100644 zpu/roadshow/roadshow/codesize/index.html create mode 100644 zpu/roadshow/roadshow/codesize/small.c create mode 100644 zpu/roadshow/roadshow/codesize/small.elf create mode 100644 zpu/roadshow/roadshow/codesize/smallstd.c create mode 100644 zpu/roadshow/roadshow/dhrystone/.cvsignore create mode 100644 zpu/roadshow/roadshow/dhrystone/RATIONALE create mode 100644 zpu/roadshow/roadshow/dhrystone/README_C create mode 100644 zpu/roadshow/roadshow/dhrystone/VARIATIONS create mode 100644 zpu/roadshow/roadshow/dhrystone/build.sh create mode 100644 zpu/roadshow/roadshow/dhrystone/dhry-c create mode 100644 zpu/roadshow/roadshow/dhrystone/dhry.h create mode 100644 zpu/roadshow/roadshow/dhrystone/dhry_1.c create mode 100644 zpu/roadshow/roadshow/dhrystone/dhry_2.c create mode 100644 zpu/roadshow/roadshow/dhrystone/dhry_c.dif create mode 100644 zpu/roadshow/roadshow/dhrystone/dhrystone.bin create mode 100644 zpu/roadshow/roadshow/dhrystone/dhrystone.zpu create mode 100644 zpu/roadshow/roadshow/dhrystone/submit.frm create mode 100644 zpu/roadshow/roadshow/ecos/codesize/zpuarmcodesize.htm create mode 100644 zpu/roadshow/roadshow/ecos/index.html create mode 100644 zpu/roadshow/roadshow/ecos/repository.tar.bz2 create mode 100644 zpu/roadshow/roadshow/games/.cvsignore create mode 100644 zpu/roadshow/roadshow/games/build.sh create mode 100644 zpu/roadshow/roadshow/games/eliza.bin create mode 100644 zpu/roadshow/roadshow/games/eliza.elf create mode 100644 zpu/roadshow/roadshow/games/eliza.zpu create mode 100644 zpu/roadshow/roadshow/games/eliza/eliza.c create mode 100644 zpu/roadshow/roadshow/games/eliza/parse.c create mode 100644 zpu/roadshow/roadshow/games/eliza/parse.h create mode 100644 zpu/roadshow/roadshow/games/eliza/response.c create mode 100644 zpu/roadshow/roadshow/games/eliza/response.h create mode 100644 zpu/roadshow/roadshow/games/sumeria.bin create mode 100644 zpu/roadshow/roadshow/games/sumeria.c create mode 100644 zpu/roadshow/roadshow/games/sumeria.zpu create mode 100644 zpu/roadshow/roadshow/helloworld/build.sh create mode 100644 zpu/roadshow/roadshow/helloworld/test.bin create mode 100644 zpu/roadshow/roadshow/helloworld/test.c create mode 100644 zpu/roadshow/roadshow/helloworld/test.elf create mode 100644 zpu/roadshow/roadshow/helloworld/test.zpu create mode 100644 zpu/roadshow/roadshow/hwtest/build.sh create mode 100644 zpu/roadshow/roadshow/hwtest/test.S create mode 100644 zpu/roadshow/roadshow/hwtest/test.bin create mode 100644 zpu/roadshow/roadshow/hwtest/test.elf create mode 100644 zpu/roadshow/roadshow/hwtest/test.zpu create mode 100644 zpu/roadshow/roadshow/images/bootloader.phi create mode 100644 zpu/roadshow/roadshow/images/dhrystone.zpu create mode 100644 zpu/roadshow/roadshow/images/eliza.zpu create mode 100644 zpu/roadshow/roadshow/images/ic300.bit create mode 100644 zpu/roadshow/roadshow/images/net_test.zpu create mode 100644 zpu/roadshow/roadshow/images/sumeria.zpu create mode 100644 zpu/roadshow/roadshow/iss/index.html create mode 100644 zpu/roadshow/roadshow/iss/simulator.jar create mode 100644 zpu/roadshow/roadshow/net_test/.cvsignore create mode 100644 zpu/roadshow/roadshow/net_test/http_pages.c create mode 100644 zpu/roadshow/roadshow/net_test/init.cpp create mode 100644 zpu/roadshow/roadshow/net_test/makefile create mode 100644 zpu/roadshow/roadshow/net_test/net_test.ecm create mode 100644 zpu/roadshow/roadshow/net_test/ping_test.c create mode 100644 zpu/roadshow/roadshow/pics/GCC_logo.png create mode 100644 zpu/roadshow/roadshow/pics/codesize1.PNG create mode 100644 zpu/roadshow/roadshow/pics/codesize2.PNG create mode 100644 zpu/roadshow/roadshow/pics/ecos.gif create mode 100644 zpu/roadshow/roadshow/pics/elizadebug1.PNG create mode 100644 zpu/roadshow/roadshow/pics/elizadebug2.PNG create mode 100644 zpu/snapshot.sh create mode 100644 zpu/sw/ecos/repository/dev/eth/opencores/ethermac/current/cdl/opencores_ethermac_drivers.cdl create mode 100644 zpu/sw/ecos/repository/ecos.db create mode 100644 zpu/sw/helloworld/gccgdb.PNG create mode 100644 zpu/sw/helloworld/gmon.out create mode 100644 zpu/sw/helloworld/hello.bin create mode 100644 zpu/sw/helloworld/hello.bram create mode 100644 zpu/sw/helloworld/hello.c create mode 100644 zpu/sw/helloworld/hello.elf create mode 100644 zpu/sw/helloworld/zpusim.PNG create mode 100644 zpu/sw/index.html create mode 100644 zpu/sw/simulator/.classpath create mode 100644 zpu/sw/simulator/.project create mode 100644 zpu/sw/simulator/.settings/org.eclipse.jdt.core.prefs create mode 100644 zpu/sw/simulator/ChangeLog create mode 100644 zpu/sw/simulator/build.xml create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/Abel.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/FileTracer.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/Host.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/Machine.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/Phi.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/PhiFeeble.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/Sim.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/SimApp.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/SimFactory.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/Simulator.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/State.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/Tracer.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/ZPU.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/applet/ZPUApplet.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/BadPacketException.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/CPUException.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/DebuggerBreakpointException.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/EndSessionException.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/GDBServerException.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/HardwareWatchPointException.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/IllegalInstructionException.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/InterruptException.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/MemoryAccessException.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/NoAckException.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/TraceException.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/UnknownPacketException.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/exceptions/UnsupportedSyscallException.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/gdb/GDBServer.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/gdb/Packet.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/tools/MakeDRAM.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/simulator/tools/MakeRam.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/stats/CountSequences.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/stats/DumpIt.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/stats/Instruction.java create mode 100644 zpu/sw/simulator/com/zylin/zpu/stats/StatKeeper.java create mode 100644 zpu/sw/simulator/gmon.out create mode 100644 zpu/sw/simulator/zpusim.jar (limited to 'zpu') diff --git a/zpu/.project b/zpu/.project new file mode 100644 index 0000000..55b1cb8 --- /dev/null +++ b/zpu/.project @@ -0,0 +1,11 @@ + + + zpu + + + + + + + + diff --git a/zpu/COPYING b/zpu/COPYING new file mode 100644 index 0000000..96b27d3 --- /dev/null +++ b/zpu/COPYING @@ -0,0 +1,12 @@ +About ZPU licensing: + +Licensing is not entirely fleshed out yet(there are many parts to a +soft CPU), but the license for the HDL will be BSD/eCos-like to be +friendly towards commercially oriented projects, however the +architecture, documentation and tools will be GPL. This means that all +updates to the architecture must be shared, but actual +implementations(which are small and can be very project speific) can +be friendly towards commercial considerations. + + +Patches to update files w/correct licensing info will be most appreciated! diff --git a/zpu/ChangeLog b/zpu/ChangeLog new file mode 100644 index 0000000..827ede8 --- /dev/null +++ b/zpu/ChangeLog @@ -0,0 +1,11 @@ +2007-09-11 Øyvind Harboe + * Cleaning up zpu/hdl/example. simzpu.do file now uses zpu4/src files instead + of duplicating them. Hello world simzpu.do now works out of the box. +2007-09-10 Øyvind Harboe + * Cleaning up .html files a bit. + * retired zpututorial.odt. +2007-08-04 Øyvind Harboe + * small ZPU hello world example now simulates with valid log.txt/trace.txt file. + * Until files are properly organized, ChangeLog will not be kept up to date. +2007-08-03 Øyvind Harboe + * Starting to commit files diff --git a/zpu/STATUS b/zpu/STATUS new file mode 100644 index 0000000..e28f191 --- /dev/null +++ b/zpu/STATUS @@ -0,0 +1,11 @@ +The current state of the ZPU: + +- Patches welcome! +- Zylin is rummaging up the various files that might be of interest + to the open source ZPU project. +- The ZPU, GCC toolchain and HDL works. Zylin eCosBoard 1.1 ships w/a + ZPU(see http://www.zylin.com), if you need a development board before + implementing on your own system. +- The docs leave a lot to be desired at this point. +- Licensing needs to be ironed out. After which lots of files will have + to be updated, strictly speaking. Patches welcome! diff --git a/zpu/docs/presentations/zpu.odp b/zpu/docs/presentations/zpu.odp new file mode 100644 index 0000000..e2a6554 Binary files /dev/null and b/zpu/docs/presentations/zpu.odp differ diff --git a/zpu/docs/presentations/zpudemo.odp b/zpu/docs/presentations/zpudemo.odp new file mode 100644 index 0000000..d0085a8 Binary files /dev/null and b/zpu/docs/presentations/zpudemo.odp differ diff --git a/zpu/docs/zpupresentation.odp b/zpu/docs/zpupresentation.odp new file mode 100644 index 0000000..28d9a7b Binary files /dev/null and b/zpu/docs/zpupresentation.odp differ diff --git a/zpu/docs/zpupresentation.ppt b/zpu/docs/zpupresentation.ppt new file mode 100644 index 0000000..100c4a4 Binary files /dev/null and b/zpu/docs/zpupresentation.ppt differ diff --git a/zpu/docs/zpupresentation_old.odt b/zpu/docs/zpupresentation_old.odt new file mode 100644 index 0000000..53e1f98 Binary files /dev/null and b/zpu/docs/zpupresentation_old.odt differ diff --git a/zpu/docs/zpuprotoarch.odt b/zpu/docs/zpuprotoarch.odt new file mode 100644 index 0000000..67a4171 Binary files /dev/null and b/zpu/docs/zpuprotoarch.odt differ diff --git a/zpu/hdl/example/helloworld.vhd b/zpu/hdl/example/helloworld.vhd new file mode 100644 index 0000000..9c99259 --- /dev/null +++ b/zpu/hdl/example/helloworld.vhd @@ -0,0 +1,12506 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + + +library work; +use work.zpu_config.all; +use work.zpupkg.all; + +entity dualport_ram is +port (clk : in std_logic; + memAWriteEnable : in std_logic; + memAAddr : in std_logic_vector(maxAddrBitBRAM downto minAddrBit); + memAWrite : in std_logic_vector(wordSize-1 downto 0); + memARead : out std_logic_vector(wordSize-1 downto 0); + memBWriteEnable : in std_logic; + memBAddr : in std_logic_vector(maxAddrBitBRAM downto minAddrBit); + memBWrite : in std_logic_vector(wordSize-1 downto 0); + memBRead : out std_logic_vector(wordSize-1 downto 0)); +end dualport_ram; + +architecture dualport_ram_arch of dualport_ram is + + +type ram_type is array(0 to ((2**(maxAddrBitBRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); + +shared variable ram : ram_type := +( +0 => x"0b0b0b0b", +1 => x"82700b0b", +2 => x"82f4e00c", +3 => x"3a0b0b81", +4 => x"e48c0400", +5 => x"00000000", +6 => x"00000000", +7 => x"00000000", +8 => x"80088408", +9 => x"88080b0b", +10 => x"81e4fd2d", +11 => x"880c840c", +12 => x"800c0400", +13 => x"00000000", +14 => x"00000000", +15 => x"00000000", +16 => x"71fd0608", +17 => x"72830609", +18 => x"81058205", +19 => x"832b2a83", +20 => x"ffff0652", +21 => x"04000000", +22 => x"00000000", +23 => x"00000000", +24 => x"71fd0608", +25 => x"83ffff73", +26 => x"83060981", +27 => x"05820583", +28 => x"2b2b0906", +29 => x"7383ffff", +30 => x"0b0b0b0b", +31 => x"83a70400", +32 => x"72098105", +33 => x"72057373", +34 => x"09060906", +35 => x"73097306", +36 => x"070a8106", +37 => x"53510400", +38 => x"00000000", +39 => x"00000000", +40 => x"72722473", +41 => x"732e0753", +42 => x"51040000", +43 => x"00000000", +44 => x"00000000", +45 => x"00000000", +46 => x"00000000", +47 => x"00000000", +48 => x"71737109", +49 => x"71068106", +50 => x"30720a10", +51 => x"0a720a10", +52 => x"0a31050a", +53 => x"81065151", +54 => x"53510400", +55 => x"00000000", +56 => x"72722673", +57 => x"732e0753", +58 => x"51040000", +59 => x"00000000", +60 => x"00000000", +61 => x"00000000", +62 => x"00000000", +63 => x"00000000", +64 => x"00000000", +65 => x"00000000", +66 => x"00000000", +67 => x"00000000", +68 => x"00000000", +69 => x"00000000", +70 => x"00000000", +71 => x"00000000", +72 => x"0b0b0b88", +73 => x"c9040000", +74 => x"00000000", +75 => x"00000000", +76 => x"00000000", +77 => x"00000000", +78 => x"00000000", +79 => x"00000000", +80 => x"720a722b", +81 => x"0a535104", +82 => x"00000000", +83 => x"00000000", +84 => x"00000000", +85 => x"00000000", +86 => x"00000000", +87 => x"00000000", +88 => x"72729f06", +89 => x"0981050b", +90 => x"0b0b88ac", +91 => x"05040000", +92 => x"00000000", +93 => x"00000000", +94 => x"00000000", +95 => x"00000000", +96 => x"72722aff", +97 => x"739f062a", +98 => x"0974090a", +99 => x"8106ff05", +100 => x"06075351", +101 => x"04000000", +102 => x"00000000", +103 => x"00000000", +104 => x"71715351", +105 => x"020d0406", +106 => x"73830609", +107 => x"81058205", +108 => x"832b0b2b", +109 => x"0772fc06", +110 => x"0c515104", +111 => x"00000000", +112 => x"72098105", +113 => x"72050970", +114 => x"81050906", +115 => x"0a810653", +116 => x"51040000", +117 => x"00000000", +118 => x"00000000", +119 => x"00000000", +120 => x"72098105", +121 => x"72050970", +122 => x"81050906", +123 => x"0a098106", +124 => x"53510400", +125 => x"00000000", +126 => x"00000000", +127 => x"00000000", +128 => x"71098105", +129 => x"52040000", +130 => x"00000000", +131 => x"00000000", +132 => x"00000000", +133 => x"00000000", +134 => x"00000000", +135 => x"00000000", +136 => x"72720981", +137 => x"05055351", +138 => x"04000000", +139 => x"00000000", +140 => x"00000000", +141 => x"00000000", +142 => x"00000000", +143 => x"00000000", +144 => x"72097206", +145 => x"73730906", +146 => x"07535104", +147 => x"00000000", +148 => x"00000000", +149 => x"00000000", +150 => x"00000000", +151 => x"00000000", +152 => x"71fc0608", +153 => x"72830609", +154 => x"81058305", +155 => x"1010102a", +156 => x"81ff0652", +157 => x"04000000", +158 => x"00000000", +159 => x"00000000", +160 => x"71fc0608", +161 => x"0b0b82f4", +162 => x"cc738306", +163 => x"10100508", +164 => x"060b0b0b", +165 => x"88af0400", +166 => x"00000000", +167 => x"00000000", +168 => x"80088408", +169 => x"88087575", +170 => x"0b0b0b8e", +171 => x"c42d5050", +172 => x"80085688", +173 => x"0c840c80", +174 => x"0c510400", +175 => x"00000000", +176 => x"80088408", +177 => x"88087575", +178 => x"0b0b0b90", +179 => x"8d2d5050", +180 => x"80085688", +181 => x"0c840c80", +182 => x"0c510400", +183 => x"00000000", +184 => x"72097081", +185 => x"0509060a", +186 => x"8106ff05", +187 => x"70547106", +188 => x"73097274", +189 => x"05ff0506", +190 => x"07515151", +191 => x"04000000", +192 => x"72097081", +193 => x"0509060a", +194 => x"098106ff", +195 => x"05705471", +196 => x"06730972", +197 => x"7405ff05", +198 => x"06075151", +199 => x"51040000", +200 => x"05ff0504", +201 => x"00000000", +202 => x"00000000", +203 => x"00000000", +204 => x"00000000", +205 => x"00000000", +206 => x"00000000", +207 => x"00000000", +208 => x"810b0b0b", +209 => x"82f4dc0c", +210 => x"51040000", +211 => x"00000000", +212 => x"00000000", +213 => x"00000000", +214 => x"00000000", +215 => x"00000000", +216 => x"71810552", +217 => x"04000000", +218 => x"00000000", +219 => x"00000000", +220 => x"00000000", +221 => x"00000000", +222 => x"00000000", +223 => x"00000000", +224 => x"00000000", +225 => x"00000000", +226 => x"00000000", +227 => x"00000000", +228 => x"00000000", +229 => x"00000000", +230 => x"00000000", +231 => x"00000000", +232 => x"02840572", +233 => x"10100552", +234 => x"04000000", +235 => x"00000000", +236 => x"00000000", +237 => x"00000000", +238 => x"00000000", +239 => x"00000000", +240 => x"00000000", +241 => x"00000000", +242 => x"00000000", +243 => x"00000000", +244 => x"00000000", +245 => x"00000000", +246 => x"00000000", +247 => x"00000000", +248 => x"717105ff", +249 => x"05715351", +250 => x"020d0400", +251 => x"00000000", +252 => x"00000000", +253 => x"00000000", +254 => x"00000000", +255 => x"00000000", +256 => x"0b0b0b83", +257 => x"e93f0b0b", +258 => x"82e4cc3f", +259 => x"04101010", +260 => x"10101010", +261 => x"10101010", +262 => x"10101010", +263 => x"10101010", +264 => x"10101010", +265 => x"10101010", +266 => x"10101010", +267 => x"53510473", +268 => x"81ff0673", +269 => x"83060981", +270 => x"05830510", +271 => x"10102b07", +272 => x"72fc060c", +273 => x"5151043c", +274 => x"04727280", +275 => x"728106ff", +276 => x"05097206", +277 => x"05711052", +278 => x"720a100a", +279 => x"5372ed38", +280 => x"51515351", +281 => x"04fe3d0d", +282 => x"0b0b8384", +283 => x"e8085384", +284 => x"13087088", +285 => x"2a708106", +286 => x"51525270", +287 => x"802e0b0b", +288 => x"0b0bec38", +289 => x"7181ff06", +290 => x"800c843d", +291 => x"0d04ff3d", +292 => x"0d0b0b83", +293 => x"84e80852", +294 => x"71087088", +295 => x"2a813270", +296 => x"81065151", +297 => x"51700b0b", +298 => x"0b0bed38", +299 => x"73720c83", +300 => x"3d0d040b", +301 => x"0b82f4dc", +302 => x"08802e0b", +303 => x"0b0b0bae", +304 => x"380b0b82", +305 => x"f4e00882", +306 => x"2e0b0b0b", +307 => x"80c53883", +308 => x"80800b0b", +309 => x"0b8384e8", +310 => x"0c82a080", +311 => x"0b0b0b83", +312 => x"84ec0c82", +313 => x"90800b0b", +314 => x"0b8384f0", +315 => x"0c04f880", +316 => x"8080a40b", +317 => x"0b0b8384", +318 => x"e80cf880", +319 => x"8082800b", +320 => x"0b0b8384", +321 => x"ec0cf880", +322 => x"8084800b", +323 => x"0b0b8384", +324 => x"f00c0480", +325 => x"c0a8808c", +326 => x"0b0b0b83", +327 => x"84e80c80", +328 => x"c0a88094", +329 => x"0b0b0b83", +330 => x"84ec0c0b", +331 => x"0b82ed90", +332 => x"0b0b0b83", +333 => x"84f00c04", +334 => x"f23d0d60", +335 => x"0b0b8384", +336 => x"ec08565d", +337 => x"82750c80", +338 => x"59805a80", +339 => x"0b8f3d5d", +340 => x"5b7a1010", +341 => x"15700871", +342 => x"08719f2c", +343 => x"7e852b58", +344 => x"55557d53", +345 => x"59570b0b", +346 => x"0b81d13f", +347 => x"7d7f7a72", +348 => x"077c7207", +349 => x"71716081", +350 => x"05415f5d", +351 => x"5b595755", +352 => x"817b270b", +353 => x"0b0b0b8f", +354 => x"38767d0c", +355 => x"77841e0c", +356 => x"7c800c90", +357 => x"3d0d040b", +358 => x"0b8384ec", +359 => x"08550b0b", +360 => x"0bffae39", +361 => x"70700b0b", +362 => x"8384f433", +363 => x"51700b0b", +364 => x"0b0bb738", +365 => x"0b0b82f4", +366 => x"e8087008", +367 => x"52527080", +368 => x"2e0b0b0b", +369 => x"0b9c3884", +370 => x"120b0b82", +371 => x"f4e80c70", +372 => x"2d0b0b82", +373 => x"f4e80870", +374 => x"08525270", +375 => x"0b0b0b0b", +376 => x"e638810b", +377 => x"0b0b8384", +378 => x"f4345050", +379 => x"0404700b", +380 => x"0b8384e4", +381 => x"08802e0b", +382 => x"0b0b0b92", +383 => x"380b0b0b", +384 => x"0b800b80", +385 => x"2e098106", +386 => x"0b0b0b0b", +387 => x"83385004", +388 => x"0b0b8384", +389 => x"e4510b0b", +390 => x"0bf3e53f", +391 => x"5004048c", +392 => x"08028c0c", +393 => x"ff3d0d0b", +394 => x"0b82ed94", +395 => x"510b0b0b", +396 => x"88ab3f71", +397 => x"800c833d", +398 => x"0d8c0c04", +399 => x"8c08028c", +400 => x"0cf53d0d", +401 => x"8c089405", +402 => x"080b0b0b", +403 => x"0ba0388c", +404 => x"088c0508", +405 => x"8c089005", +406 => x"088c0888", +407 => x"05085856", +408 => x"5473760c", +409 => x"7484170c", +410 => x"0b0b0b81", +411 => x"ca39800b", +412 => x"8c08f005", +413 => x"0c800b8c", +414 => x"08f4050c", +415 => x"8c088c05", +416 => x"088c0890", +417 => x"05085654", +418 => x"738c08f0", +419 => x"050c748c", +420 => x"08f4050c", +421 => x"8c08f805", +422 => x"8c08f005", +423 => x"56568870", +424 => x"54755376", +425 => x"52540b0b", +426 => x"0b85e03f", +427 => x"a00b8c08", +428 => x"94050831", +429 => x"8c08ec05", +430 => x"0c8c08ec", +431 => x"05088024", +432 => x"0b0b0b0b", +433 => x"a138800b", +434 => x"8c08f405", +435 => x"0c8c08ec", +436 => x"0508308c", +437 => x"08fc0508", +438 => x"712b8c08", +439 => x"f0050c54", +440 => x"0b0b0b0b", +441 => x"b9398c08", +442 => x"fc05088c", +443 => x"08ec0508", +444 => x"2a8c08e8", +445 => x"050c8c08", +446 => x"fc05088c", +447 => x"08940508", +448 => x"2b8c08f4", +449 => x"050c8c08", +450 => x"f805088c", +451 => x"08940508", +452 => x"2b708c08", +453 => x"e8050807", +454 => x"8c08f005", +455 => x"0c548c08", +456 => x"f005088c", +457 => x"08f40508", +458 => x"8c088805", +459 => x"08585654", +460 => x"73760c74", +461 => x"84170c8c", +462 => x"08880508", +463 => x"800c8d3d", +464 => x"0d8c0c04", +465 => x"8c08028c", +466 => x"0cf93d0d", +467 => x"800b8c08", +468 => x"fc050c8c", +469 => x"08880508", +470 => x"80250b0b", +471 => x"0b0baf38", +472 => x"8c088805", +473 => x"08308c08", +474 => x"88050c80", +475 => x"0b8c08f4", +476 => x"050c8c08", +477 => x"fc05080b", +478 => x"0b0b0b88", +479 => x"38810b8c", +480 => x"08f4050c", +481 => x"8c08f405", +482 => x"088c08fc", +483 => x"050c8c08", +484 => x"8c050880", +485 => x"250b0b0b", +486 => x"0baf388c", +487 => x"088c0508", +488 => x"308c088c", +489 => x"050c800b", +490 => x"8c08f005", +491 => x"0c8c08fc", +492 => x"05080b0b", +493 => x"0b0b8838", +494 => x"810b8c08", +495 => x"f0050c8c", +496 => x"08f00508", +497 => x"8c08fc05", +498 => x"0c80538c", +499 => x"088c0508", +500 => x"528c0888", +501 => x"0508510b", +502 => x"0b0b81bb", +503 => x"3f800870", +504 => x"8c08f805", +505 => x"0c548c08", +506 => x"fc050880", +507 => x"2e0b0b0b", +508 => x"0b8c388c", +509 => x"08f80508", +510 => x"308c08f8", +511 => x"050c8c08", +512 => x"f8050870", +513 => x"800c5489", +514 => x"3d0d8c0c", +515 => x"048c0802", +516 => x"8c0cfb3d", +517 => x"0d800b8c", +518 => x"08fc050c", +519 => x"8c088805", +520 => x"0880250b", +521 => x"0b0b0b93", +522 => x"388c0888", +523 => x"0508308c", +524 => x"0888050c", +525 => x"810b8c08", +526 => x"fc050c8c", +527 => x"088c0508", +528 => x"80250b0b", +529 => x"0b0b8c38", +530 => x"8c088c05", +531 => x"08308c08", +532 => x"8c050c81", +533 => x"538c088c", +534 => x"0508528c", +535 => x"08880508", +536 => x"510b0b0b", +537 => x"0bb13f80", +538 => x"08708c08", +539 => x"f8050c54", +540 => x"8c08fc05", +541 => x"08802e0b", +542 => x"0b0b0b8c", +543 => x"388c08f8", +544 => x"0508308c", +545 => x"08f8050c", +546 => x"8c08f805", +547 => x"0870800c", +548 => x"54873d0d", +549 => x"8c0c048c", +550 => x"08028c0c", +551 => x"70707070", +552 => x"810b8c08", +553 => x"fc050c80", +554 => x"0b8c08f8", +555 => x"050c8c08", +556 => x"8c05088c", +557 => x"08880508", +558 => x"270b0b0b", +559 => x"0bb8388c", +560 => x"08fc0508", +561 => x"802e0b0b", +562 => x"0b0bab38", +563 => x"800b8c08", +564 => x"8c050824", +565 => x"0b0b0b0b", +566 => x"9d388c08", +567 => x"8c050810", +568 => x"8c088c05", +569 => x"0c8c08fc", +570 => x"0508108c", +571 => x"08fc050c", +572 => x"0b0b0bff", +573 => x"b9398c08", +574 => x"fc050880", +575 => x"2e0b0b0b", +576 => x"80d0388c", +577 => x"088c0508", +578 => x"8c088805", +579 => x"08260b0b", +580 => x"0b0ba138", +581 => x"8c088805", +582 => x"088c088c", +583 => x"0508318c", +584 => x"0888050c", +585 => x"8c08f805", +586 => x"088c08fc", +587 => x"0508078c", +588 => x"08f8050c", +589 => x"8c08fc05", +590 => x"08812a8c", +591 => x"08fc050c", +592 => x"8c088c05", +593 => x"08812a8c", +594 => x"088c050c", +595 => x"0b0b0bff", +596 => x"a5398c08", +597 => x"90050880", +598 => x"2e0b0b0b", +599 => x"0b93388c", +600 => x"08880508", +601 => x"708c08f4", +602 => x"050c510b", +603 => x"0b0b0b8d", +604 => x"398c08f8", +605 => x"0508708c", +606 => x"08f4050c", +607 => x"518c08f4", +608 => x"0508800c", +609 => x"50505050", +610 => x"8c0c04fc", +611 => x"3d0d7670", +612 => x"797b5555", +613 => x"55558f72", +614 => x"270b0b0b", +615 => x"0b903872", +616 => x"75078306", +617 => x"5170802e", +618 => x"0b0b0b0b", +619 => x"af38ff12", +620 => x"5271ff2e", +621 => x"0b0b0b0b", +622 => x"9c387270", +623 => x"81055433", +624 => x"74708105", +625 => x"5634ff12", +626 => x"5271ff2e", +627 => x"0981060b", +628 => x"0b0b0be6", +629 => x"3874800c", +630 => x"863d0d04", +631 => x"74517270", +632 => x"84055408", +633 => x"71708405", +634 => x"530c7270", +635 => x"84055408", +636 => x"71708405", +637 => x"530c7270", +638 => x"84055408", +639 => x"71708405", +640 => x"530c7270", +641 => x"84055408", +642 => x"71708405", +643 => x"530cf012", +644 => x"52718f26", +645 => x"0b0b0b0b", +646 => x"c5388372", +647 => x"270b0b0b", +648 => x"0b993872", +649 => x"70840554", +650 => x"08717084", +651 => x"05530cfc", +652 => x"12527183", +653 => x"260b0b0b", +654 => x"0be93870", +655 => x"540b0b0b", +656 => x"feec39fb", +657 => x"3d0d7789", +658 => x"3d880555", +659 => x"79548811", +660 => x"0853510b", +661 => x"0b0b80e3", +662 => x"3f873d0d", +663 => x"04fc3d0d", +664 => x"873d7070", +665 => x"84055208", +666 => x"56537452", +667 => x"0b0b82f4", +668 => x"ec088811", +669 => x"0852540b", +670 => x"0b0bb4a2", +671 => x"3f863d0d", +672 => x"04707070", +673 => x"70768811", +674 => x"08545472", +675 => x"0b0b0b0b", +676 => x"8d387284", +677 => x"150c7280", +678 => x"0c505050", +679 => x"50047352", +680 => x"75510b0b", +681 => x"80fcfe3f", +682 => x"800b8815", +683 => x"0c800b84", +684 => x"150c8008", +685 => x"800c5050", +686 => x"505004fc", +687 => x"c43d0d83", +688 => x"bf3d0883", +689 => x"c13d0883", +690 => x"c33d0883", +691 => x"c53d0848", +692 => x"5e484b0b", +693 => x"0b8186f6", +694 => x"3f800808", +695 => x"4c800b83", +696 => x"bb3d0c80", +697 => x"0b83bc3d", +698 => x"0c807071", +699 => x"698c0522", +700 => x"70832a81", +701 => x"32708106", +702 => x"515d5d4c", +703 => x"4f4d786d", +704 => x"2e098106", +705 => x"0b0b0b0b", +706 => x"90386690", +707 => x"05086d2e", +708 => x"0981060b", +709 => x"0b0b0b98", +710 => x"3866510b", +711 => x"0b0bbfc8", +712 => x"3fff5980", +713 => x"080b0b0b", +714 => x"82893866", +715 => x"8c05225a", +716 => x"799a0659", +717 => x"788a2e0b", +718 => x"0b0b80ce", +719 => x"387b83a6", +720 => x"3d707183", +721 => x"b93d0c5e", +722 => x"475d800b", +723 => x"83b83d0c", +724 => x"800b83b7", +725 => x"3d0c8049", +726 => x"7c5e807d", +727 => x"337081ff", +728 => x"065b5b5b", +729 => x"787b2e0b", +730 => x"0b0b0b83", +731 => x"38815b78", +732 => x"a52e0b0b", +733 => x"0b81c438", +734 => x"7a802e0b", +735 => x"0b0b81bb", +736 => x"38811d5d", +737 => x"0b0b0b0b", +738 => x"d139668e", +739 => x"05227090", +740 => x"2b5a5b80", +741 => x"79240b0b", +742 => x"0bffa238", +743 => x"79fd0659", +744 => x"7882ba3d", +745 => x"237a0284", +746 => x"0589e205", +747 => x"23669c05", +748 => x"0882be3d", +749 => x"0c66a405", +750 => x"0882c03d", +751 => x"0cb63d70", +752 => x"82b83d0c", +753 => x"82bb3d0c", +754 => x"88800b82", +755 => x"b93d0c88", +756 => x"800b82bc", +757 => x"3d0c800b", +758 => x"82bd3d0c", +759 => x"64537b52", +760 => x"82b63d70", +761 => x"52590b0b", +762 => x"0bb1b33f", +763 => x"80085a80", +764 => x"0b800824", +765 => x"0b0b0b0b", +766 => x"95387851", +767 => x"0b0b80ec", +768 => x"bf3f8008", +769 => x"802e0b0b", +770 => x"0b0b8338", +771 => x"ff5a82b9", +772 => x"3d227086", +773 => x"2a708106", +774 => x"515a5b78", +775 => x"802e0b0b", +776 => x"0b0b8e38", +777 => x"668c0522", +778 => x"80c00759", +779 => x"78678c05", +780 => x"23795978", +781 => x"800c83be", +782 => x"3d0d047c", +783 => x"7e315b7a", +784 => x"802e0b0b", +785 => x"0b0bb138", +786 => x"7d7c0c7a", +787 => x"841d0c83", +788 => x"b73d081b", +789 => x"83b83d0c", +790 => x"881c83b7", +791 => x"3d088111", +792 => x"83b93d0c", +793 => x"8111515a", +794 => x"5c788724", +795 => x"0b0b0b80", +796 => x"cb38681b", +797 => x"7d335b49", +798 => x"7981ff06", +799 => x"5978802e", +800 => x"0b0b0bae", +801 => x"df38811d", +802 => x"5d807071", +803 => x"4a4543ff", +804 => x"416283be", +805 => x"3d347c33", +806 => x"5a7981ff", +807 => x"06811e5e", +808 => x"407fe005", +809 => x"597880d8", +810 => x"260b0b0b", +811 => x"88a83878", +812 => x"10100b0b", +813 => x"82edc405", +814 => x"59780804", +815 => x"83be3ddc", +816 => x"05526651", +817 => x"0b0b0bfb", +818 => x"b83f8008", +819 => x"0b0b0b8b", +820 => x"b3386569", +821 => x"1c7e335c", +822 => x"4a5c0b0b", +823 => x"0bff9939", +824 => x"62900743", +825 => x"62842a70", +826 => x"81065159", +827 => x"780b0b0b", +828 => x"9e873862", +829 => x"862a7081", +830 => x"06515978", +831 => x"802e0b0b", +832 => x"0b9df638", +833 => x"64658405", +834 => x"8212225d", +835 => x"4659815f", +836 => x"800b83be", +837 => x"3d346044", +838 => x"8061240b", +839 => x"0b0b0b86", +840 => x"3862feff", +841 => x"0643657b", +842 => x"30707d07", +843 => x"9f2a6630", +844 => x"7068079f", +845 => x"2a720752", +846 => x"5c515b5e", +847 => x"79802e0b", +848 => x"0b0b98fd", +849 => x"387e812e", +850 => x"0b0b0b8c", +851 => x"8438817f", +852 => x"250b0b0b", +853 => x"a0eb387e", +854 => x"822e0b0b", +855 => x"0b8cc038", +856 => x"0b0b82f0", +857 => x"a85e7d51", +858 => x"0b0b81c0", +859 => x"ae3f8008", +860 => x"5f7e427e", +861 => x"64250b0b", +862 => x"0b0b8338", +863 => x"634283bd", +864 => x"3d337081", +865 => x"ff065a5b", +866 => x"78802e0b", +867 => x"0b0b9488", +868 => x"38618105", +869 => x"42628184", +870 => x"0641600b", +871 => x"0b0b8186", +872 => x"38676231", +873 => x"5a807a25", +874 => x"0b0b0b80", +875 => x"f938907a", +876 => x"250b0b0b", +877 => x"0bbd380b", +878 => x"0b82eda4", +879 => x"7c0c900b", +880 => x"841d0c83", +881 => x"b73d0890", +882 => x"0583b83d", +883 => x"0c881c83", +884 => x"b73d0881", +885 => x"1183b93d", +886 => x"0c811151", +887 => x"5a5c7887", +888 => x"240b0b0b", +889 => x"868e38f0", +890 => x"1a5a7990", +891 => x"240b0b0b", +892 => x"0bc5380b", +893 => x"0b82eda4", +894 => x"7c0c7984", +895 => x"1d0c83b7", +896 => x"3d081a83", +897 => x"b83d0c88", +898 => x"1c83b73d", +899 => x"08811183", +900 => x"b93d0c81", +901 => x"11515a5c", +902 => x"7887240b", +903 => x"0b0b96fe", +904 => x"3883bd3d", +905 => x"335b7a81", +906 => x"ff065978", +907 => x"802e0b0b", +908 => x"0b938138", +909 => x"83be3dfc", +910 => x"057c0c81", +911 => x"0b841d0c", +912 => x"83b73d08", +913 => x"810583b8", +914 => x"3d0c881c", +915 => x"83b73d08", +916 => x"811183b9", +917 => x"3d0c8111", +918 => x"515a5c78", +919 => x"87240b0b", +920 => x"0b879f38", +921 => x"6081802e", +922 => x"0b0b0b85", +923 => x"c938637f", +924 => x"315a807a", +925 => x"250b0b0b", +926 => x"818c3890", +927 => x"7a250b0b", +928 => x"0b0bbd38", +929 => x"0b0b82ed", +930 => x"b47c0c90", +931 => x"0b841d0c", +932 => x"83b73d08", +933 => x"900583b8", +934 => x"3d0c881c", +935 => x"83b73d08", +936 => x"811183b9", +937 => x"3d0c8111", +938 => x"515a5c78", +939 => x"87240b0b", +940 => x"0b84e238", +941 => x"f01a5a79", +942 => x"90240b0b", +943 => x"0b0bc538", +944 => x"0b0b82ed", +945 => x"b47c0c79", +946 => x"841d0c83", +947 => x"b73d081a", +948 => x"83b83d0c", +949 => x"881c83b7", +950 => x"3d088111", +951 => x"83b93d0c", +952 => x"8111515a", +953 => x"5c877925", +954 => x"0b0b0b0b", +955 => x"993883be", +956 => x"3ddc0552", +957 => x"66510b0b", +958 => x"0bf7863f", +959 => x"80080b0b", +960 => x"0b878138", +961 => x"655c6288", +962 => x"2a813270", +963 => x"81065159", +964 => x"78802e0b", +965 => x"0b0b91f3", +966 => x"387d7c0c", +967 => x"7e841d0c", +968 => x"83b73d08", +969 => x"1f83b83d", +970 => x"0c881c83", +971 => x"b73d0881", +972 => x"1183b93d", +973 => x"0c811151", +974 => x"5a5c7887", +975 => x"240b0b0b", +976 => x"868c3862", +977 => x"822a7081", +978 => x"06515978", +979 => x"802e0b0b", +980 => x"0b819438", +981 => x"6762315a", +982 => x"807a250b", +983 => x"0b0b8187", +984 => x"38907a25", +985 => x"0b0b0b0b", +986 => x"bd380b0b", +987 => x"82eda47c", +988 => x"0c900b84", +989 => x"1d0c83b7", +990 => x"3d089005", +991 => x"83b83d0c", +992 => x"881c83b7", +993 => x"3d088111", +994 => x"83b93d0c", +995 => x"8111515a", +996 => x"5c788724", +997 => x"0b0b0b85", +998 => x"9438f01a", +999 => x"5a799024", +1000 => x"0b0b0b0b", +1001 => x"c5380b0b", +1002 => x"82eda47c", +1003 => x"0c79841d", +1004 => x"0c83b73d", +1005 => x"081a83b8", +1006 => x"3d0c83b6", +1007 => x"3d088111", +1008 => x"83b83d0c", +1009 => x"81115159", +1010 => x"8779250b", +1011 => x"0b0b0b97", +1012 => x"3883be3d", +1013 => x"dc055266", +1014 => x"510b0b0b", +1015 => x"f5a33f80", +1016 => x"080b0b0b", +1017 => x"859e3861", +1018 => x"59616825", +1019 => x"0b0b0b0b", +1020 => x"83386759", +1021 => x"68194983", +1022 => x"b73d080b", +1023 => x"0b0b84ec", +1024 => x"38800b83", +1025 => x"b73d0c65", +1026 => x"5c69802e", +1027 => x"0b0b0bf6", +1028 => x"c7386951", +1029 => x"0b0b80ff", +1030 => x"953f807d", +1031 => x"5f4a0b0b", +1032 => x"0bf6b739", +1033 => x"62900743", +1034 => x"62842a70", +1035 => x"81065159", +1036 => x"780b0b0b", +1037 => x"97d43862", +1038 => x"862a7081", +1039 => x"06515978", +1040 => x"802e0b0b", +1041 => x"0b97c338", +1042 => x"64658405", +1043 => x"8212225d", +1044 => x"4659805f", +1045 => x"800b83be", +1046 => x"3d340b0b", +1047 => x"0bf9b739", +1048 => x"62900743", +1049 => x"62842a70", +1050 => x"81065159", +1051 => x"780b0b0b", +1052 => x"97a93862", +1053 => x"862a7081", +1054 => x"06515978", +1055 => x"802e0b0b", +1056 => x"0b979838", +1057 => x"64658405", +1058 => x"7108902b", +1059 => x"70902c51", +1060 => x"5d465980", +1061 => x"7b240b0b", +1062 => x"0b8bdf38", +1063 => x"815f0b0b", +1064 => x"0bf8f339", +1065 => x"64658405", +1066 => x"71084a46", +1067 => x"59678025", +1068 => x"0b0b0bf7", +1069 => x"e1386730", +1070 => x"48628407", +1071 => x"7d335b43", +1072 => x"0b0b0bf7", +1073 => x"d439811d", +1074 => x"5d629007", +1075 => x"7d335b43", +1076 => x"0b0b0bf7", +1077 => x"c4397f80", +1078 => x"2e0b0b0b", +1079 => x"a6863882", +1080 => x"ce3d5e7f", +1081 => x"7e34815f", +1082 => x"800b83be", +1083 => x"3d340b0b", +1084 => x"0bf8fe39", +1085 => x"83be3ddc", +1086 => x"05526651", +1087 => x"0b0b0bf3", +1088 => x"803f8008", +1089 => x"0b0b0b82", +1090 => x"fb3865f0", +1091 => x"1b5b5c0b", +1092 => x"0b0bf9d6", +1093 => x"3983be3d", +1094 => x"dc055266", +1095 => x"510b0b0b", +1096 => x"f2df3f80", +1097 => x"080b0b0b", +1098 => x"82da3865", +1099 => x"f01b5b5c", +1100 => x"0b0b0bfb", +1101 => x"82396762", +1102 => x"315a807a", +1103 => x"250b0b0b", +1104 => x"faac3890", +1105 => x"7a250b0b", +1106 => x"0b0bbd38", +1107 => x"0b0b82ed", +1108 => x"b47c0c90", +1109 => x"0b841d0c", +1110 => x"83b73d08", +1111 => x"900583b8", +1112 => x"3d0c881c", +1113 => x"83b73d08", +1114 => x"811183b9", +1115 => x"3d0c8111", +1116 => x"515a5c78", +1117 => x"87240b0b", +1118 => x"0b80e638", +1119 => x"f01a5a79", +1120 => x"90240b0b", +1121 => x"0b0bc538", +1122 => x"0b0b82ed", +1123 => x"b47c0c79", +1124 => x"841d0c83", +1125 => x"b73d081a", +1126 => x"83b83d0c", +1127 => x"881c83b7", +1128 => x"3d088111", +1129 => x"83b93d0c", +1130 => x"8111515a", +1131 => x"5c877925", +1132 => x"0b0b0bf9", +1133 => x"b93883be", +1134 => x"3ddc0552", +1135 => x"66510b0b", +1136 => x"0bf1be3f", +1137 => x"80080b0b", +1138 => x"0b81b938", +1139 => x"65646031", +1140 => x"5b5c7980", +1141 => x"240b0b0b", +1142 => x"f9a1380b", +1143 => x"0b0bfaa6", +1144 => x"3983be3d", +1145 => x"dc055266", +1146 => x"510b0b0b", +1147 => x"f1933f80", +1148 => x"080b0b0b", +1149 => x"818e3865", +1150 => x"f01b5b5c", +1151 => x"0b0b0bfe", +1152 => x"fe3983be", +1153 => x"3ddc0552", +1154 => x"66510b0b", +1155 => x"0bf0f23f", +1156 => x"80080b0b", +1157 => x"0b80ed38", +1158 => x"655c6081", +1159 => x"802e0981", +1160 => x"060b0b0b", +1161 => x"f8c8380b", +1162 => x"0b0bfe8a", +1163 => x"3983be3d", +1164 => x"dc055266", +1165 => x"510b0b0b", +1166 => x"f0c73f80", +1167 => x"080b0b0b", +1168 => x"80c23865", +1169 => x"f01b5b5c", +1170 => x"0b0b0bfa", +1171 => x"d03983be", +1172 => x"3ddc0552", +1173 => x"66510b0b", +1174 => x"0bf0a63f", +1175 => x"80080b0b", +1176 => x"0b0ba138", +1177 => x"655c0b0b", +1178 => x"0bf9d839", +1179 => x"83be3ddc", +1180 => x"05526651", +1181 => x"0b0b0bf0", +1182 => x"883f8008", +1183 => x"802e0b0b", +1184 => x"0bfafe38", +1185 => x"69802e0b", +1186 => x"0b0b0b89", +1187 => x"3869510b", +1188 => x"0b80fa9a", +1189 => x"3f668c05", +1190 => x"2270862a", +1191 => x"7081066b", +1192 => x"5d515a47", +1193 => x"78802e0b", +1194 => x"0b0bf385", +1195 => x"38ff590b", +1196 => x"0b0bf2ff", +1197 => x"397c3370", +1198 => x"81ff065a", +1199 => x"5a7880ec", +1200 => x"2e0b0b0b", +1201 => x"fc803862", +1202 => x"90077a81", +1203 => x"ff06811f", +1204 => x"5f41430b", +1205 => x"0b0bf3c9", +1206 => x"397c7081", +1207 => x"055e3340", +1208 => x"7faa2e0b", +1209 => x"0b0ba2f9", +1210 => x"388060d0", +1211 => x"0571435a", +1212 => x"5a788926", +1213 => x"0b0b0bf3", +1214 => x"a8387910", +1215 => x"10107a10", +1216 => x"056005d0", +1217 => x"057d7081", +1218 => x"055f33d0", +1219 => x"115b415a", +1220 => x"8979270b", +1221 => x"0b0b0be2", +1222 => x"38794179", +1223 => x"ff250b0b", +1224 => x"0bf2fe38", +1225 => x"ff410b0b", +1226 => x"0bf2f639", +1227 => x"64658405", +1228 => x"71085d46", +1229 => x"59820b0b", +1230 => x"0b82f0c4", +1231 => x"64720745", +1232 => x"4f5f80f8", +1233 => x"40800b83", +1234 => x"be3d340b", +1235 => x"0b0bf3c6", +1236 => x"39897b27", +1237 => x"0b0b0b0b", +1238 => x"ac38ff1e", +1239 => x"5e8a527a", +1240 => x"510b0b82", +1241 => x"9e803f80", +1242 => x"08b00559", +1243 => x"787e348a", +1244 => x"527a510b", +1245 => x"0b829dc4", +1246 => x"3f80085b", +1247 => x"7a89260b", +1248 => x"0b0b0bd6", +1249 => x"38ff1eb0", +1250 => x"1c5a5e78", +1251 => x"7e3483be", +1252 => x"3d707f31", +1253 => x"ff9c0540", +1254 => x"5b0b0b0b", +1255 => x"f3d339ff", +1256 => x"1e7b8f06", +1257 => x"6f055a5e", +1258 => x"78337e34", +1259 => x"7a842a5b", +1260 => x"7a802e0b", +1261 => x"0b0b0bd6", +1262 => x"38ff1e7b", +1263 => x"8f066f05", +1264 => x"5a5e7833", +1265 => x"7e347a84", +1266 => x"2a5b7a0b", +1267 => x"0b0b0bcf", +1268 => x"380b0b0b", +1269 => x"ffb83962", +1270 => x"80c0077d", +1271 => x"335b430b", +1272 => x"0b0bf1b5", +1273 => x"3960ff2e", +1274 => x"0b0b0b9f", +1275 => x"a0387f80", +1276 => x"e7327030", +1277 => x"70720780", +1278 => x"256280c7", +1279 => x"32703070", +1280 => x"72078025", +1281 => x"73075354", +1282 => x"5e515b59", +1283 => x"79802e0b", +1284 => x"0b0b0b8a", +1285 => x"38600b0b", +1286 => x"0b0b8338", +1287 => x"81416465", +1288 => x"88058412", +1289 => x"08720870", +1290 => x"83bf3d0c", +1291 => x"7183c03d", +1292 => x"0c545446", +1293 => x"590b0b81", +1294 => x"adad3f80", +1295 => x"08802e0b", +1296 => x"0b0b95db", +1297 => x"38805980", +1298 => x"79545483", +1299 => x"ba3d0883", +1300 => x"bc3d085b", +1301 => x"5179520b", +1302 => x"0b8290c9", +1303 => x"3f800b80", +1304 => x"08240b0b", +1305 => x"0b85f138", +1306 => x"0b0b82f0", +1307 => x"d85e835f", +1308 => x"0b0b0bf1", +1309 => x"fc3982ce", +1310 => x"3d5e7f80", +1311 => x"c32e0b0b", +1312 => x"0b0b9238", +1313 => x"62842a70", +1314 => x"81065159", +1315 => x"78802e0b", +1316 => x"0b0b83d3", +1317 => x"38885380", +1318 => x"52b43d70", +1319 => x"52590b0b", +1320 => x"8188f23f", +1321 => x"78546465", +1322 => x"84057108", +1323 => x"557f546c", +1324 => x"5346590b", +1325 => x"0b0ba0b1", +1326 => x"3f80085f", +1327 => x"8008ff2e", +1328 => x"0b0b0bfb", +1329 => x"bf38800b", +1330 => x"83be3d34", +1331 => x"0b0b0bf1", +1332 => x"a0390b0b", +1333 => x"82f0dc63", +1334 => x"842a7081", +1335 => x"06515a4e", +1336 => x"780b0b0b", +1337 => x"82ca3862", +1338 => x"862a7081", +1339 => x"06515978", +1340 => x"802e0b0b", +1341 => x"0b82b938", +1342 => x"64658405", +1343 => x"8212225d", +1344 => x"46598263", +1345 => x"81065a5f", +1346 => x"7a802e0b", +1347 => x"0b0bf080", +1348 => x"3878802e", +1349 => x"0b0b0bef", +1350 => x"f738627f", +1351 => x"0743800b", +1352 => x"83be3d34", +1353 => x"0b0b0bef", +1354 => x"ed39800b", +1355 => x"83be3d34", +1356 => x"64658405", +1357 => x"71084046", +1358 => x"597d802e", +1359 => x"0b0b0b9c", +1360 => x"d4387f80", +1361 => x"d32e0b0b", +1362 => x"0b82c038", +1363 => x"62842a70", +1364 => x"81065159", +1365 => x"780b0b0b", +1366 => x"82b13880", +1367 => x"61240b0b", +1368 => x"0bf08338", +1369 => x"60537852", +1370 => x"7d510b0b", +1371 => x"8183e73f", +1372 => x"605f8008", +1373 => x"802e0b0b", +1374 => x"0beff638", +1375 => x"80087e31", +1376 => x"5f607f25", +1377 => x"0b0b0bef", +1378 => x"e838605f", +1379 => x"0b0b0bef", +1380 => x"e0396284", +1381 => x"2a708106", +1382 => x"5159780b", +1383 => x"0b0b908d", +1384 => x"3862862a", +1385 => x"70810651", +1386 => x"5978802e", +1387 => x"0b0b0b8f", +1388 => x"fc386465", +1389 => x"84057108", +1390 => x"52465968", +1391 => x"79237c5e", +1392 => x"0b0b0beb", +1393 => x"9539ab0b", +1394 => x"83be3d34", +1395 => x"7c335a0b", +1396 => x"0b0bedc5", +1397 => x"39805a79", +1398 => x"1010107a", +1399 => x"10056005", +1400 => x"d0057d70", +1401 => x"81055f33", +1402 => x"d0115b41", +1403 => x"5a897927", +1404 => x"0b0b0b0b", +1405 => x"e2387948", +1406 => x"0b0b0bed", +1407 => x"a4396281", +1408 => x"80077d33", +1409 => x"5b430b0b", +1410 => x"0bed8e39", +1411 => x"6288077d", +1412 => x"335b430b", +1413 => x"0b0bed81", +1414 => x"390b0b82", +1415 => x"f0c46384", +1416 => x"2a708106", +1417 => x"515a4e78", +1418 => x"802e0b0b", +1419 => x"0bfdb838", +1420 => x"64658405", +1421 => x"71085d46", +1422 => x"590b0b0b", +1423 => x"fdc43962", +1424 => x"81077d33", +1425 => x"5b430b0b", +1426 => x"0becce39", +1427 => x"83bd3d33", +1428 => x"59780b0b", +1429 => x"0becbf38", +1430 => x"a00b83be", +1431 => x"3d347c33", +1432 => x"5a0b0b0b", +1433 => x"ecb33964", +1434 => x"65840546", +1435 => x"59831933", +1436 => x"7e34815f", +1437 => x"0b0b0bf4", +1438 => x"ef397a30", +1439 => x"5bad0b83", +1440 => x"be3d3481", +1441 => x"5f0b0b0b", +1442 => x"ed8c397d", +1443 => x"a23d0c80", +1444 => x"705c5f88", +1445 => x"537e52a6", +1446 => x"3d70525a", +1447 => x"0b0b8184", +1448 => x"f43f7e61", +1449 => x"240b0b0b", +1450 => x"81c2387a", +1451 => x"1010a23d", +1452 => x"08055978", +1453 => x"08802e0b", +1454 => x"0b0b0bbd", +1455 => x"38795478", +1456 => x"085383be", +1457 => x"3dfcc005", +1458 => x"526a510b", +1459 => x"0b0b9c99", +1460 => x"3f8008ff", +1461 => x"2e0b0b0b", +1462 => x"f7aa3880", +1463 => x"081f5978", +1464 => x"61240b0b", +1465 => x"0b0b9238", +1466 => x"811b7940", +1467 => x"5b78612e", +1468 => x"0981060b", +1469 => x"0b0bffb3", +1470 => x"387e802e", +1471 => x"0b0b0bec", +1472 => x"f038811f", +1473 => x"526a510b", +1474 => x"0b80f1b6", +1475 => x"3f80084a", +1476 => x"8008802e", +1477 => x"0b0b0bf6", +1478 => x"fc388853", +1479 => x"80527951", +1480 => x"0b0b8183", +1481 => x"f03f7955", +1482 => x"7e5483be", +1483 => x"3df38c05", +1484 => x"5369526a", +1485 => x"510b0b0b", +1486 => x"9cb03f80", +1487 => x"087f2e09", +1488 => x"81060b0b", +1489 => x"0bf6bd38", +1490 => x"696a8008", +1491 => x"055a5e80", +1492 => x"79340b0b", +1493 => x"0bec9a39", +1494 => x"ad0b83be", +1495 => x"3d340b0b", +1496 => x"82f0d85e", +1497 => x"835f0b0b", +1498 => x"0bec8639", +1499 => x"79557e54", +1500 => x"83be3df3", +1501 => x"8c05537e", +1502 => x"526a510b", +1503 => x"0b0b9bea", +1504 => x"3f80085f", +1505 => x"8008ff2e", +1506 => x"0b0b0bf5", +1507 => x"f7387da2", +1508 => x"3d0c0b0b", +1509 => x"0bfee239", +1510 => x"620a100a", +1511 => x"70810651", +1512 => x"5978802e", +1513 => x"0b0b0beb", +1514 => x"ec386182", +1515 => x"05420b0b", +1516 => x"0bebe239", +1517 => x"620a100a", +1518 => x"70810651", +1519 => x"5978802e", +1520 => x"0b0b0bed", +1521 => x"9f38b00b", +1522 => x"82ce3d34", +1523 => x"7f028405", +1524 => x"8ab10534", +1525 => x"83be3dfc", +1526 => x"bc057c0c", +1527 => x"820b841d", +1528 => x"0c83b73d", +1529 => x"08820583", +1530 => x"b83d0c88", +1531 => x"1c83b73d", +1532 => x"08811183", +1533 => x"b93d0c81", +1534 => x"11515a5c", +1535 => x"8779250b", +1536 => x"0b0bece0", +1537 => x"380b0b0b", +1538 => x"f3f83980", +1539 => x"e560250b", +1540 => x"0b0b83da", +1541 => x"38805980", +1542 => x"79545483", +1543 => x"ba3d0883", +1544 => x"bc3d085b", +1545 => x"5179520b", +1546 => x"0b8282bd", +1547 => x"3f80080b", +1548 => x"0b0b87ff", +1549 => x"380b0b82", +1550 => x"f0f07c0c", +1551 => x"810b841d", +1552 => x"0c83b73d", +1553 => x"08810583", +1554 => x"b83d0c88", +1555 => x"1c83b73d", +1556 => x"08811183", +1557 => x"b93d0c81", +1558 => x"11515a5c", +1559 => x"7887240b", +1560 => x"0b0b81ce", +1561 => x"38a43d08", +1562 => x"5b7aa63d", +1563 => x"08240b0b", +1564 => x"0b0b8e38", +1565 => x"62810659", +1566 => x"78802e0b", +1567 => x"0b0bedc3", +1568 => x"386b7c0c", +1569 => x"810b841d", +1570 => x"0c83b73d", +1571 => x"08810583", +1572 => x"b83d0c88", +1573 => x"1c83b73d", +1574 => x"08811183", +1575 => x"b93d0c81", +1576 => x"11515a5c", +1577 => x"7887240b", +1578 => x"0b0b81c5", +1579 => x"38ff1b5a", +1580 => x"807a250b", +1581 => x"0b0bed8b", +1582 => x"38907a25", +1583 => x"0b0b0b0b", +1584 => x"bd380b0b", +1585 => x"82edb47c", +1586 => x"0c900b84", +1587 => x"1d0c83b7", +1588 => x"3d089005", +1589 => x"83b83d0c", +1590 => x"881c83b7", +1591 => x"3d088111", +1592 => x"83b93d0c", +1593 => x"8111515a", +1594 => x"5c788724", +1595 => x"0b0b0b80", +1596 => x"df38f01a", +1597 => x"5a799024", +1598 => x"0b0b0b0b", +1599 => x"c5380b0b", +1600 => x"82edb47c", +1601 => x"0c79841d", +1602 => x"0c83b73d", +1603 => x"081a83b8", +1604 => x"3d0c881c", +1605 => x"83b73d08", +1606 => x"811183b9", +1607 => x"3d0c8111", +1608 => x"515a5c87", +1609 => x"79250b0b", +1610 => x"0bec9838", +1611 => x"0b0b0bf2", +1612 => x"9d3983be", +1613 => x"3ddc0552", +1614 => x"66510b0b", +1615 => x"0be2c23f", +1616 => x"80080b0b", +1617 => x"0bf2bd38", +1618 => x"655c0b0b", +1619 => x"0bfe9639", +1620 => x"83be3ddc", +1621 => x"05526651", +1622 => x"0b0b0be2", +1623 => x"a43f8008", +1624 => x"0b0b0bf2", +1625 => x"9f3865f0", +1626 => x"1b5b5c0b", +1627 => x"0b0bff85", +1628 => x"3983be3d", +1629 => x"dc055266", +1630 => x"510b0b0b", +1631 => x"e2833f80", +1632 => x"080b0b0b", +1633 => x"f1fe3865", +1634 => x"a53d08ff", +1635 => x"055b5c79", +1636 => x"80240b0b", +1637 => x"0bfea238", +1638 => x"0b0b0beb", +1639 => x"a63983be", +1640 => x"3ddc0552", +1641 => x"66510b0b", +1642 => x"0be1d63f", +1643 => x"80080b0b", +1644 => x"0bf1d138", +1645 => x"6583be3d", +1646 => x"335c5c0b", +1647 => x"0b0be8e6", +1648 => x"397e0b0b", +1649 => x"0bf3c738", +1650 => x"62810659", +1651 => x"78802e0b", +1652 => x"0b0bf3ba", +1653 => x"38028d8f", +1654 => x"055eb07e", +1655 => x"3483be3d", +1656 => x"707f31ff", +1657 => x"9c05405b", +1658 => x"0b0b0be7", +1659 => x"8439a43d", +1660 => x"085b817b", +1661 => x"250b0b0b", +1662 => x"83bc387d", +1663 => x"7081055f", +1664 => x"3382ce3d", +1665 => x"34ae0284", +1666 => x"058ab105", +1667 => x"3483be3d", +1668 => x"fcbc057c", +1669 => x"0c820b84", +1670 => x"1d0c83b7", +1671 => x"3d088205", +1672 => x"83b83d0c", +1673 => x"881c83b7", +1674 => x"3d088111", +1675 => x"83b93d0c", +1676 => x"8111515a", +1677 => x"5c788724", +1678 => x"0b0b0b81", +1679 => x"8b388059", +1680 => x"80795454", +1681 => x"83ba3d08", +1682 => x"83bc3d08", +1683 => x"5b517952", +1684 => x"0b0b8280", +1685 => x"a83f8008", +1686 => x"802e0b0b", +1687 => x"0b81a538", +1688 => x"7d7c0cff", +1689 => x"1b841d0c", +1690 => x"83b73d08", +1691 => x"1bff0583", +1692 => x"b83d0c88", +1693 => x"1c83b73d", +1694 => x"08811183", +1695 => x"b93d0c81", +1696 => x"11515a5c", +1697 => x"7887240b", +1698 => x"0b0b81f7", +1699 => x"3883be3d", +1700 => x"e8057c0c", +1701 => x"6c841d0c", +1702 => x"83b73d08", +1703 => x"6d0583b8", +1704 => x"3d0c881c", +1705 => x"83b73d08", +1706 => x"811183b9", +1707 => x"3d0c8111", +1708 => x"515a5c87", +1709 => x"79250b0b", +1710 => x"0be98838", +1711 => x"83be3ddc", +1712 => x"05520b0b", +1713 => x"0bef8d39", +1714 => x"83be3ddc", +1715 => x"05526651", +1716 => x"0b0b0bdf", +1717 => x"ac3f8008", +1718 => x"0b0b0bef", +1719 => x"a73865a5", +1720 => x"3d085c5c", +1721 => x"80598079", +1722 => x"545483ba", +1723 => x"3d0883bc", +1724 => x"3d085b51", +1725 => x"79520b0b", +1726 => x"81ff823f", +1727 => x"80080b0b", +1728 => x"0bfedd38", +1729 => x"ff1b5a80", +1730 => x"7a250b0b", +1731 => x"0bfefe38", +1732 => x"907a250b", +1733 => x"0b0b0bbd", +1734 => x"380b0b82", +1735 => x"edb47c0c", +1736 => x"900b841d", +1737 => x"0c83b73d", +1738 => x"08900583", +1739 => x"b83d0c88", +1740 => x"1c83b73d", +1741 => x"08811183", +1742 => x"b93d0c81", +1743 => x"11515a5c", +1744 => x"7887240b", +1745 => x"0b0b84c4", +1746 => x"38f01a5a", +1747 => x"7990240b", +1748 => x"0b0b0bc5", +1749 => x"380b0b82", +1750 => x"edb47c0c", +1751 => x"79841d0c", +1752 => x"83b73d08", +1753 => x"1a83b83d", +1754 => x"0c881c83", +1755 => x"b73d0881", +1756 => x"1183b93d", +1757 => x"0c811151", +1758 => x"5a5c8779", +1759 => x"250b0b0b", +1760 => x"fe8b3883", +1761 => x"be3ddc05", +1762 => x"5266510b", +1763 => x"0b0bddf1", +1764 => x"3f80080b", +1765 => x"0b0bedec", +1766 => x"386583bf", +1767 => x"3de80571", +1768 => x"0c6d8412", +1769 => x"0c83b83d", +1770 => x"086e0583", +1771 => x"b93d0c5c", +1772 => x"0b0b0bfd", +1773 => x"ed396281", +1774 => x"0659780b", +1775 => x"0b0bfcbb", +1776 => x"387d7c0c", +1777 => x"810b841d", +1778 => x"0c83b73d", +1779 => x"08810583", +1780 => x"b83d0c88", +1781 => x"1c83b73d", +1782 => x"08811183", +1783 => x"b93d0c81", +1784 => x"11515a5c", +1785 => x"8779250b", +1786 => x"0b0bfda1", +1787 => x"3883be3d", +1788 => x"dc05520b", +1789 => x"0b0bff91", +1790 => x"39646584", +1791 => x"0571085d", +1792 => x"4659815f", +1793 => x"0b0b0be2", +1794 => x"87396465", +1795 => x"84057108", +1796 => x"5d465980", +1797 => x"5f0b0b0b", +1798 => x"e8ba3964", +1799 => x"65840571", +1800 => x"085d4659", +1801 => x"7a80250b", +1802 => x"0b0be8f0", +1803 => x"380b0b0b", +1804 => x"f4c839a5", +1805 => x"3d085a80", +1806 => x"7a250b0b", +1807 => x"0b8bbd38", +1808 => x"a43d085b", +1809 => x"7a7a240b", +1810 => x"0b0b83b5", +1811 => x"387d7c0c", +1812 => x"7a841d0c", +1813 => x"83b73d08", +1814 => x"1b83b83d", +1815 => x"0c881c83", +1816 => x"b73d0881", +1817 => x"1183b93d", +1818 => x"0c811151", +1819 => x"5a5c7887", +1820 => x"240b0b0b", +1821 => x"81e33879", +1822 => x"7b315a80", +1823 => x"7a250b0b", +1824 => x"0b818c38", +1825 => x"907a250b", +1826 => x"0b0b0bbd", +1827 => x"380b0b82", +1828 => x"edb47c0c", +1829 => x"900b841d", +1830 => x"0c83b73d", +1831 => x"08900583", +1832 => x"b83d0c88", +1833 => x"1c83b73d", +1834 => x"08811183", +1835 => x"b93d0c81", +1836 => x"11515a5c", +1837 => x"7887240b", +1838 => x"0b0b80fc", +1839 => x"38f01a5a", +1840 => x"7990240b", +1841 => x"0b0b0bc5", +1842 => x"380b0b82", +1843 => x"edb47c0c", +1844 => x"79841d0c", +1845 => x"83b73d08", +1846 => x"1a83b83d", +1847 => x"0c881c83", +1848 => x"b73d0881", +1849 => x"1183b93d", +1850 => x"0c811151", +1851 => x"5a5c8779", +1852 => x"250b0b0b", +1853 => x"0b993883", +1854 => x"be3ddc05", +1855 => x"5266510b", +1856 => x"0b0bdafd", +1857 => x"3f80080b", +1858 => x"0b0beaf8", +1859 => x"38655c62", +1860 => x"81065978", +1861 => x"802e0b0b", +1862 => x"0be4a838", +1863 => x"0b0b82f0", +1864 => x"f47c0c81", +1865 => x"0b841d0c", +1866 => x"83b73d08", +1867 => x"810583b8", +1868 => x"3d0c0b0b", +1869 => x"0bfaeb39", +1870 => x"83be3ddc", +1871 => x"05526651", +1872 => x"0b0b0bda", +1873 => x"bc3f8008", +1874 => x"0b0b0bea", +1875 => x"b73865f0", +1876 => x"1b5b5c0b", +1877 => x"0b0bfee8", +1878 => x"3983be3d", +1879 => x"dc055266", +1880 => x"510b0b0b", +1881 => x"da9b3f80", +1882 => x"080b0b0b", +1883 => x"ea963865", +1884 => x"a63d08a6", +1885 => x"3d087171", +1886 => x"31525d5b", +1887 => x"5c798024", +1888 => x"0b0b0bfd", +1889 => x"ff380b0b", +1890 => x"0bff8439", +1891 => x"83be3ddc", +1892 => x"05526651", +1893 => x"0b0b0bd9", +1894 => x"e83f8008", +1895 => x"0b0b0be9", +1896 => x"e33865f0", +1897 => x"1b5b5c0b", +1898 => x"0b0bfba0", +1899 => x"39646584", +1900 => x"0571086b", +1901 => x"710c527e", +1902 => x"4046590b", +1903 => x"0b0bdb9a", +1904 => x"397e0b0b", +1905 => x"0bdf9938", +1906 => x"ff1e7bb7", +1907 => x"06b0075b", +1908 => x"5e797e34", +1909 => x"7a832a5b", +1910 => x"7a0b0b0b", +1911 => x"0bea3862", +1912 => x"81065978", +1913 => x"802e0b0b", +1914 => x"0beba338", +1915 => x"79b02e0b", +1916 => x"0b0beb9a", +1917 => x"38ff1e5e", +1918 => x"b07e340b", +1919 => x"0b0bf7dd", +1920 => x"397d7c0c", +1921 => x"79841d0c", +1922 => x"83b73d08", +1923 => x"1a83b83d", +1924 => x"0c881c83", +1925 => x"b73d0881", +1926 => x"1183b93d", +1927 => x"0c811151", +1928 => x"5a5c7887", +1929 => x"240b0b0b", +1930 => x"81a03879", +1931 => x"1e0b0b82", +1932 => x"f0f47d0c", +1933 => x"5e810b84", +1934 => x"1d0c83b7", +1935 => x"3d088105", +1936 => x"83b83d0c", +1937 => x"881c83b7", +1938 => x"3d088111", +1939 => x"83b93d0c", +1940 => x"8111515a", +1941 => x"5c788724", +1942 => x"0b0b0b0b", +1943 => x"b6387d7c", +1944 => x"0ca43d08", +1945 => x"7a317084", +1946 => x"1e0c83b8", +1947 => x"3d080583", +1948 => x"b83d0c88", +1949 => x"1c83b73d", +1950 => x"08811183", +1951 => x"b93d0c81", +1952 => x"11515a5c", +1953 => x"8779250b", +1954 => x"0b0be1b7", +1955 => x"380b0b0b", +1956 => x"e7bc3983", +1957 => x"be3ddc05", +1958 => x"5266510b", +1959 => x"0b0bd7e1", +1960 => x"3f80080b", +1961 => x"0b0be7dc", +1962 => x"3865a63d", +1963 => x"087f720c", +1964 => x"a63d0871", +1965 => x"31708414", +1966 => x"0c83ba3d", +1967 => x"080583ba", +1968 => x"3d0c5b5c", +1969 => x"0b0b0bff", +1970 => x"aa3983be", +1971 => x"3ddc0552", +1972 => x"66510b0b", +1973 => x"0bd7aa3f", +1974 => x"80080b0b", +1975 => x"0be7a538", +1976 => x"65a63d08", +1977 => x"7f110b0b", +1978 => x"82f0f473", +1979 => x"0c405b5c", +1980 => x"810b841d", +1981 => x"0c83b73d", +1982 => x"08810583", +1983 => x"b83d0c88", +1984 => x"1c83b73d", +1985 => x"08811183", +1986 => x"b93d0c81", +1987 => x"11515a5c", +1988 => x"8779250b", +1989 => x"0b0bfec6", +1990 => x"380b0b0b", +1991 => x"fef53983", +1992 => x"ba3d0883", +1993 => x"bc3d085b", +1994 => x"5179520b", +1995 => x"0b8197ea", +1996 => x"3f0b0b82", +1997 => x"f0f85e83", +1998 => x"5f80080b", +1999 => x"0b0bdcb1", +2000 => x"38628280", +2001 => x"0783bb3d", +2002 => x"0883bd3d", +2003 => x"086383c0", +2004 => x"3daa3da5", +2005 => x"3d0c5f45", +2006 => x"415f4383", +2007 => x"0ba13d0c", +2008 => x"7f80e62e", +2009 => x"0b0b0b0b", +2010 => x"b1388008", +2011 => x"5a7f80e5", +2012 => x"2e0b0b0b", +2013 => x"83ea3880", +2014 => x"08597f80", +2015 => x"c52e0b0b", +2016 => x"0b83f038", +2017 => x"79790759", +2018 => x"78802e0b", +2019 => x"0b0b0b85", +2020 => x"38608105", +2021 => x"42820ba1", +2022 => x"3d0c7db3", +2023 => x"3d0c7eb4", +2024 => x"3d0c800b", +2025 => x"b33d0824", +2026 => x"0b0b0b88", +2027 => x"ef38807b", +2028 => x"3483be3d", +2029 => x"f3941159", +2030 => x"f3900557", +2031 => x"6e566155", +2032 => x"6f547d52", +2033 => x"7e536a51", +2034 => x"0b0b0b9b", +2035 => x"b03f8008", +2036 => x"6080e732", +2037 => x"70307072", +2038 => x"079f2a51", +2039 => x"5b5ba13d", +2040 => x"0c7f80c7", +2041 => x"2e0b0b0b", +2042 => x"0b883878", +2043 => x"0b0b0b81", +2044 => x"e4386281", +2045 => x"0659780b", +2046 => x"0b0b81d9", +2047 => x"38a33d08", +2048 => x"5978a13d", +2049 => x"0831a53d", +2050 => x"0c6f6080", +2051 => x"e7327030", +2052 => x"70720780", +2053 => x"256380c7", +2054 => x"32703070", +2055 => x"72078025", +2056 => x"73075354", +2057 => x"5f515c5a", +2058 => x"5e79802e", +2059 => x"0b0b0b86", +2060 => x"f238a53d", +2061 => x"085afc7a", +2062 => x"250b0b0b", +2063 => x"0b8a3860", +2064 => x"7a250b0b", +2065 => x"0b82cc38", +2066 => x"80e5597f", +2067 => x"80e72e0b", +2068 => x"0b0b0b84", +2069 => x"3880c559", +2070 => x"78407f80", +2071 => x"e5240b0b", +2072 => x"0b86ca38", +2073 => x"ff1a70a7", +2074 => x"3d0c83b9", +2075 => x"3d715d43", +2076 => x"5a7f6234", +2077 => x"028ddd05", +2078 => x"5f807a24", +2079 => x"0b0b0b87", +2080 => x"c138ab7f", +2081 => x"34028dde", +2082 => x"05b33d70", +2083 => x"5c425f89", +2084 => x"7b250b0b", +2085 => x"0b818738", +2086 => x"ff1a8a7c", +2087 => x"36b0055a", +2088 => x"5a787a34", +2089 => x"8a7b355b", +2090 => x"7a89240b", +2091 => x"0b0b0be8", +2092 => x"38ff1ab0", +2093 => x"1c5a5a78", +2094 => x"7a347961", +2095 => x"270b0b0b", +2096 => x"80ed3879", +2097 => x"7081055b", +2098 => x"337f7081", +2099 => x"0541340b", +2100 => x"0b0b0be6", +2101 => x"39800862", +2102 => x"055b7f80", +2103 => x"e62e0b0b", +2104 => x"0b819838", +2105 => x"80598079", +2106 => x"54547d51", +2107 => x"7e520b0b", +2108 => x"81f0f63f", +2109 => x"80080b0b", +2110 => x"0b0b8538", +2111 => x"7aa43d0c", +2112 => x"a33d0859", +2113 => x"787b270b", +2114 => x"0b0bfdf5", +2115 => x"38b07934", +2116 => x"a33d0881", +2117 => x"05a43d0c", +2118 => x"0b0b0b0b", +2119 => x"e339b07f", +2120 => x"70810541", +2121 => x"34b01b59", +2122 => x"787f7081", +2123 => x"0541347e", +2124 => x"6231a53d", +2125 => x"08701241", +2126 => x"5a4d8179", +2127 => x"250b0b0b", +2128 => x"81a43881", +2129 => x"1f5f83bc", +2130 => x"3d335978", +2131 => x"802e0b0b", +2132 => x"0bd89e38", +2133 => x"ad0b83be", +2134 => x"3d340b0b", +2135 => x"0bd89239", +2136 => x"810b8008", +2137 => x"5a5a7f80", +2138 => x"c52e0981", +2139 => x"060b0b0b", +2140 => x"fc923881", +2141 => x"590b0b0b", +2142 => x"fc8a3980", +2143 => x"08335978", +2144 => x"b02e0b0b", +2145 => x"0b0bb438", +2146 => x"6e087b05", +2147 => x"5b0b0b0b", +2148 => x"fed23980", +2149 => x"e740a43d", +2150 => x"0859787a", +2151 => x"240b0b0b", +2152 => x"85883879", +2153 => x"6381065a", +2154 => x"5f78802e", +2155 => x"0b0b0bff", +2156 => x"9538811a", +2157 => x"5f0b0b0b", +2158 => x"ff8c3980", +2159 => x"59807954", +2160 => x"547d517e", +2161 => x"520b0b81", +2162 => x"f1b33f80", +2163 => x"08802e0b", +2164 => x"0b0bffb4", +2165 => x"38816231", +2166 => x"70a13d08", +2167 => x"0c7b055b", +2168 => x"0b0b0bfd", +2169 => x"ff396281", +2170 => x"06597880", +2171 => x"2e0b0b0b", +2172 => x"fed43881", +2173 => x"1f5f0b0b", +2174 => x"0bfecb39", +2175 => x"0b0b82f0", +2176 => x"f07c0c81", +2177 => x"0b841d0c", +2178 => x"83b73d08", +2179 => x"810583b8", +2180 => x"3d0c881c", +2181 => x"83b73d08", +2182 => x"811183b9", +2183 => x"3d0c8111", +2184 => x"515a5c78", +2185 => x"87240b0b", +2186 => x"0b829238", +2187 => x"790b0b0b", +2188 => x"0b8c38a4", +2189 => x"3d08802e", +2190 => x"0b0b0bda", +2191 => x"86386b7c", +2192 => x"0c810b84", +2193 => x"1d0c83b7", +2194 => x"3d088105", +2195 => x"83b83d0c", +2196 => x"881c83b7", +2197 => x"3d088111", +2198 => x"83b93d0c", +2199 => x"8111515a", +2200 => x"5c788724", +2201 => x"0b0b0b81", +2202 => x"f6387930", +2203 => x"5a807a25", +2204 => x"0b0b0b81", +2205 => x"8c38907a", +2206 => x"250b0b0b", +2207 => x"0bbd380b", +2208 => x"0b82edb4", +2209 => x"7c0c900b", +2210 => x"841d0c83", +2211 => x"b73d0890", +2212 => x"0583b83d", +2213 => x"0c881c83", +2214 => x"b73d0881", +2215 => x"1183b93d", +2216 => x"0c811151", +2217 => x"5a5c7887", +2218 => x"240b0b0b", +2219 => x"80ee38f0", +2220 => x"1a5a7990", +2221 => x"240b0b0b", +2222 => x"0bc5380b", +2223 => x"0b82edb4", +2224 => x"7c0c7984", +2225 => x"1d0c83b7", +2226 => x"3d081a83", +2227 => x"b83d0c88", +2228 => x"1c83b73d", +2229 => x"08811183", +2230 => x"b93d0c81", +2231 => x"11515a5c", +2232 => x"8779250b", +2233 => x"0b0b0b99", +2234 => x"3883be3d", +2235 => x"dc055266", +2236 => x"510b0b0b", +2237 => x"cf8b3f80", +2238 => x"080b0b0b", +2239 => x"df863865", +2240 => x"5c7d7c0c", +2241 => x"a43d0884", +2242 => x"1d0c83b7", +2243 => x"3d08a53d", +2244 => x"080583b8", +2245 => x"3d0c0b0b", +2246 => x"0bef8739", +2247 => x"83be3ddc", +2248 => x"05526651", +2249 => x"0b0b0bce", +2250 => x"d83f8008", +2251 => x"0b0b0bde", +2252 => x"d33865f0", +2253 => x"1b5b5c0b", +2254 => x"0b0bfef6", +2255 => x"3983be3d", +2256 => x"dc055266", +2257 => x"510b0b0b", +2258 => x"ceb73f80", +2259 => x"080b0b0b", +2260 => x"deb23865", +2261 => x"a63d085b", +2262 => x"5c0b0b0b", +2263 => x"fdce3983", +2264 => x"be3ddc05", +2265 => x"5266510b", +2266 => x"0b0bce95", +2267 => x"3f80080b", +2268 => x"0b0bde90", +2269 => x"3865a63d", +2270 => x"08703051", +2271 => x"5b5c7980", +2272 => x"240b0b0b", +2273 => x"fdf0380b", +2274 => x"0b0bfef5", +2275 => x"3986410b", +2276 => x"0b0be18a", +2277 => x"390b0b82", +2278 => x"f0fc5e86", +2279 => x"5f0b0b0b", +2280 => x"d3cf39a5", +2281 => x"3d085a0b", +2282 => x"0b0bf9ae", +2283 => x"397f80e6", +2284 => x"2e098106", +2285 => x"0b0b0bfb", +2286 => x"dd38807a", +2287 => x"250b0b0b", +2288 => x"81bc3879", +2289 => x"5f600b0b", +2290 => x"0b0b8e38", +2291 => x"62810659", +2292 => x"78802e0b", +2293 => x"0b0bfaee", +2294 => x"38601a81", +2295 => x"055f0b0b", +2296 => x"0bfae339", +2297 => x"83b73d08", +2298 => x"0b0b0b0b", +2299 => x"8d38800b", +2300 => x"83b73d0c", +2301 => x"0b0b0bdd", +2302 => x"8b3983be", +2303 => x"3ddc0552", +2304 => x"66510b0b", +2305 => x"0bccfa3f", +2306 => x"80080b0b", +2307 => x"0bdcf538", +2308 => x"800b83b7", +2309 => x"3d0c0b0b", +2310 => x"0bdce939", +2311 => x"7d810a32", +2312 => x"5ead7b34", +2313 => x"0b0b0bf7", +2314 => x"8839787a", +2315 => x"3182055f", +2316 => x"807a250b", +2317 => x"0b0bfa8e", +2318 => x"3881195f", +2319 => x"0b0b0bfa", +2320 => x"85397930", +2321 => x"5bad7f34", +2322 => x"028dde05", +2323 => x"b33d705c", +2324 => x"425f897b", +2325 => x"250b0b0b", +2326 => x"f9c4380b", +2327 => x"0b0bf8b8", +2328 => x"39646584", +2329 => x"05710843", +2330 => x"46596080", +2331 => x"250b0b0b", +2332 => x"d0a438ff", +2333 => x"7d335b41", +2334 => x"0b0b0bd0", +2335 => x"9c39600b", +2336 => x"0b0b0b90", +2337 => x"38628106", +2338 => x"59815f78", +2339 => x"802e0b0b", +2340 => x"0bf9b338", +2341 => x"6082055f", +2342 => x"0b0b0bf9", +2343 => x"a939fc3d", +2344 => x"0d0b0b82", +2345 => x"f4ec0855", +2346 => x"b8150880", +2347 => x"2e0b0b0b", +2348 => x"0b983878", +2349 => x"54775376", +2350 => x"520b0b82", +2351 => x"f4ec0851", +2352 => x"0b0b0bcb", +2353 => x"f63f863d", +2354 => x"0d047451", +2355 => x"0b0b0bbe", +2356 => x"8e3f7854", +2357 => x"77537652", +2358 => x"0b0b82f4", +2359 => x"ec08510b", +2360 => x"0b0bcbd7", +2361 => x"3f863d0d", +2362 => x"04f63d0d", +2363 => x"7c7e6159", +2364 => x"56588056", +2365 => x"74762e0b", +2366 => x"0b0b0ba3", +2367 => x"3876547e", +2368 => x"53745277", +2369 => x"510b0b0b", +2370 => x"83823f80", +2371 => x"08558008", +2372 => x"ff2e0b0b", +2373 => x"0b0ba938", +2374 => x"74800c8c", +2375 => x"3d0d0476", +2376 => x"5475538c", +2377 => x"3df40552", +2378 => x"77510b0b", +2379 => x"0b82dd3f", +2380 => x"80085580", +2381 => x"08ff2e09", +2382 => x"81060b0b", +2383 => x"0b0bd938", +2384 => x"80770c81", +2385 => x"8a780c74", +2386 => x"800c8c3d", +2387 => x"0d047070", +2388 => x"70707754", +2389 => x"76537552", +2390 => x"0b0b82f4", +2391 => x"ec08510b", +2392 => x"0b0bff85", +2393 => x"3f505050", +2394 => x"5004ec3d", +2395 => x"0d66686a", +2396 => x"6c6e735c", +2397 => x"405d4242", +2398 => x"4260802e", +2399 => x"0b0b0b81", +2400 => x"b2388060", +2401 => x"085a5d7c", +2402 => x"7a270b0b", +2403 => x"0b819b38", +2404 => x"933d5b7b", +2405 => x"08841d08", +2406 => x"7d567a08", +2407 => x"557c5463", +2408 => x"53405e0b", +2409 => x"0b0bfec1", +2410 => x"3f800858", +2411 => x"8008ff2e", +2412 => x"0b0b0b81", +2413 => x"9538807a", +2414 => x"80083156", +2415 => x"567c7526", +2416 => x"0b0b0b0b", +2417 => x"83388156", +2418 => x"80087a27", +2419 => x"0b0b0b80", +2420 => x"ea387580", +2421 => x"2e0b0b0b", +2422 => x"80e13880", +2423 => x"081d5d60", +2424 => x"802e0b0b", +2425 => x"0b0baa38", +2426 => x"80567580", +2427 => x"08250b0b", +2428 => x"0b0b9838", +2429 => x"751b5574", +2430 => x"33777081", +2431 => x"05593481", +2432 => x"16567776", +2433 => x"240b0b0b", +2434 => x"0bea387f", +2435 => x"08840560", +2436 => x"0c787084", +2437 => x"055a0855", +2438 => x"74802e0b", +2439 => x"0b0b0bb9", +2440 => x"38797d26", +2441 => x"0b0b0bfe", +2442 => x"ea387c55", +2443 => x"74800c96", +2444 => x"3d0d04ff", +2445 => x"5a0b0b0b", +2446 => x"fec8397d", +2447 => x"7c0c7e84", +2448 => x"1d0c7c55", +2449 => x"0b0b0b0b", +2450 => x"e339818a", +2451 => x"620c807c", +2452 => x"0c800880", +2453 => x"0c963d0d", +2454 => x"0460802e", +2455 => x"0b0b0b0b", +2456 => x"84387460", +2457 => x"0c747c0c", +2458 => x"ff1d800c", +2459 => x"963d0d04", +2460 => x"fc3d0d79", +2461 => x"55785477", +2462 => x"5376520b", +2463 => x"0b82f4ec", +2464 => x"08510b0b", +2465 => x"0bfde33f", +2466 => x"863d0d04", +2467 => x"f83d0d7b", +2468 => x"7d7f0b0b", +2469 => x"82fbec54", +2470 => x"5957550b", +2471 => x"0b818dfb", +2472 => x"3f800881", +2473 => x"260b0b0b", +2474 => x"0b983874", +2475 => x"5474802e", +2476 => x"0b0b0b0b", +2477 => x"86387575", +2478 => x"34815473", +2479 => x"800c8a3d", +2480 => x"0d040b0b", +2481 => x"82f18452", +2482 => x"0b0b82fb", +2483 => x"ec510b0b", +2484 => x"818c953f", +2485 => x"80080b0b", +2486 => x"0b81d838", +2487 => x"80085474", +2488 => x"802e0b0b", +2489 => x"0b0bd438", +2490 => x"80ff7625", +2491 => x"0b0b0b0b", +2492 => x"c538ff80", +2493 => x"16538eff", +2494 => x"73270b0b", +2495 => x"0b85e338", +2496 => x"f0801653", +2497 => x"83efff73", +2498 => x"270b0b0b", +2499 => x"82d838fc", +2500 => x"80801653", +2501 => x"80fbffff", +2502 => x"73270b0b", +2503 => x"0b85e838", +2504 => x"8fff0a16", +2505 => x"53f7c00a", +2506 => x"73270b0b", +2507 => x"0b86a638", +2508 => x"ff54c00a", +2509 => x"76250b0b", +2510 => x"0bff8038", +2511 => x"75820a06", +2512 => x"709e2c70", +2513 => x"fc075151", +2514 => x"53727570", +2515 => x"81055734", +2516 => x"7581fc0a", +2517 => x"0670982a", +2518 => x"ff800751", +2519 => x"53727570", +2520 => x"81055734", +2521 => x"7587f080", +2522 => x"80067092", +2523 => x"2aff8007", +2524 => x"51537275", +2525 => x"70810557", +2526 => x"34758fe0", +2527 => x"8006708c", +2528 => x"2aff8007", +2529 => x"51537275", +2530 => x"70810557", +2531 => x"34759fc0", +2532 => x"0670862a", +2533 => x"ff800751", +2534 => x"53727570", +2535 => x"81055734", +2536 => x"75ffbf06", +2537 => x"ff800753", +2538 => x"72753486", +2539 => x"0b800c8a", +2540 => x"3d0d040b", +2541 => x"0b82f18c", +2542 => x"520b0b82", +2543 => x"fbec510b", +2544 => x"0b818aa4", +2545 => x"3f80080b", +2546 => x"0b0b81f7", +2547 => x"387581ff", +2548 => x"0676882c", +2549 => x"7081ff06", +2550 => x"80085759", +2551 => x"54587480", +2552 => x"2e0b0b0b", +2553 => x"fdd53876", +2554 => x"802e0b0b", +2555 => x"0bfdbc38", +2556 => x"800880ff", +2557 => x"187081ff", +2558 => x"06515456", +2559 => x"729e260b", +2560 => x"0b0b0b83", +2561 => x"38815680", +2562 => x"08a01870", +2563 => x"81ff0651", +2564 => x"5454728f", +2565 => x"260b0b0b", +2566 => x"0b833881", +2567 => x"54757407", +2568 => x"5372802e", +2569 => x"0b0b0b0b", +2570 => x"b5388008", +2571 => x"c0195456", +2572 => x"72be260b", +2573 => x"0b0b0b83", +2574 => x"38815680", +2575 => x"08ff8019", +2576 => x"7081ff06", +2577 => x"51545472", +2578 => x"80fc260b", +2579 => x"0b0b0b83", +2580 => x"38815475", +2581 => x"74075372", +2582 => x"0b0b0b80", +2583 => x"d338ff0b", +2584 => x"800c8a3d", +2585 => x"0d04fcd0", +2586 => x"801653ff", +2587 => x"548fff73", +2588 => x"270b0b0b", +2589 => x"fcc53875", +2590 => x"83e08006", +2591 => x"708c2ae0", +2592 => x"07515372", +2593 => x"75708105", +2594 => x"5734759f", +2595 => x"c0067086", +2596 => x"2aff8007", +2597 => x"51537275", +2598 => x"70810557", +2599 => x"3475ffbf", +2600 => x"06ff8007", +2601 => x"53727534", +2602 => x"830b800c", +2603 => x"8a3d0d04", +2604 => x"76757081", +2605 => x"05573477", +2606 => x"75348254", +2607 => x"73800c8a", +2608 => x"3d0d040b", +2609 => x"0b82f194", +2610 => x"520b0b82", +2611 => x"fbec510b", +2612 => x"0b818894", +2613 => x"3f80080b", +2614 => x"0b0b80f8", +2615 => x"387581ff", +2616 => x"0676882c", +2617 => x"7081ff06", +2618 => x"80085759", +2619 => x"54587480", +2620 => x"2e0b0b0b", +2621 => x"fbc53876", +2622 => x"802e0b0b", +2623 => x"0bfbac38", +2624 => x"80085381", +2625 => x"a077270b", +2626 => x"0b0b0b83", +2627 => x"38815376", +2628 => x"81ff2e0b", +2629 => x"0b0bfec6", +2630 => x"38817074", +2631 => x"06545472", +2632 => x"802e0b0b", +2633 => x"0bfeb738", +2634 => x"80085381", +2635 => x"a078270b", +2636 => x"0b0b0b83", +2637 => x"38735377", +2638 => x"81ff2e0b", +2639 => x"0b0bfe9e", +2640 => x"38727406", +2641 => x"5372802e", +2642 => x"0b0b0bfe", +2643 => x"91380b0b", +2644 => x"0bfedd39", +2645 => x"0b0b82f1", +2646 => x"9c520b0b", +2647 => x"82fbec51", +2648 => x"0b0b8187", +2649 => x"833f8008", +2650 => x"0b0b0bfa", +2651 => x"be388008", +2652 => x"7681ff06", +2653 => x"77882c70", +2654 => x"81ff0659", +2655 => x"55595981", +2656 => x"5474802e", +2657 => x"0b0b0bfa", +2658 => x"b2387580", +2659 => x"2e0b0b0b", +2660 => x"82a538df", +2661 => x"16537280", +2662 => x"dd260b0b", +2663 => x"0bfdbf38", +2664 => x"df185372", +2665 => x"80dd260b", +2666 => x"0b0bfdb2", +2667 => x"3876080b", +2668 => x"0b0b0b9c", +2669 => x"3873770c", +2670 => x"9b757081", +2671 => x"055734a4", +2672 => x"75708105", +2673 => x"573480c2", +2674 => x"75708105", +2675 => x"57348359", +2676 => x"75757081", +2677 => x"05573477", +2678 => x"75348219", +2679 => x"800c8a3d", +2680 => x"0d04758f", +2681 => x"c0067086", +2682 => x"2ac00751", +2683 => x"53727570", +2684 => x"81055734", +2685 => x"75ffbf06", +2686 => x"ff800753", +2687 => x"72753482", +2688 => x"540b0b0b", +2689 => x"fdb63975", +2690 => x"80f08080", +2691 => x"0670922a", +2692 => x"f0075153", +2693 => x"72757081", +2694 => x"05573475", +2695 => x"8fe08006", +2696 => x"708c2aff", +2697 => x"80075153", +2698 => x"72757081", +2699 => x"05573475", +2700 => x"9fc00670", +2701 => x"862aff80", +2702 => x"07515372", +2703 => x"75708105", +2704 => x"573475ff", +2705 => x"bf06ff80", +2706 => x"07537275", +2707 => x"34840b80", +2708 => x"0c8a3d0d", +2709 => x"047581c0", +2710 => x"0a067098", +2711 => x"2af80751", +2712 => x"53727570", +2713 => x"81055734", +2714 => x"7587f080", +2715 => x"80067092", +2716 => x"2aff8007", +2717 => x"51537275", +2718 => x"70810557", +2719 => x"34758fe0", +2720 => x"8006708c", +2721 => x"2aff8007", +2722 => x"51537275", +2723 => x"70810557", +2724 => x"34759fc0", +2725 => x"0670862a", +2726 => x"ff800751", +2727 => x"53727570", +2728 => x"81055734", +2729 => x"75ffbf06", +2730 => x"ff800753", +2731 => x"72753485", +2732 => x"0b800c8a", +2733 => x"3d0d0476", +2734 => x"08802e0b", +2735 => x"0b0b0b9d", +2736 => x"38800877", +2737 => x"0c9b7570", +2738 => x"81055734", +2739 => x"a8757081", +2740 => x"05573480", +2741 => x"c2757081", +2742 => x"05573483", +2743 => x"59777534", +2744 => x"8119800c", +2745 => x"8a3d0d04", +2746 => x"fa3d0d78", +2747 => x"0b0b82f4", +2748 => x"ec085455", +2749 => x"b8130880", +2750 => x"2e0b0b0b", +2751 => x"81dc388c", +2752 => x"15227083", +2753 => x"ffff0670", +2754 => x"832a8132", +2755 => x"70810651", +2756 => x"55555672", +2757 => x"802e0b0b", +2758 => x"0b80f038", +2759 => x"73842a81", +2760 => x"32810657", +2761 => x"ff53760b", +2762 => x"0b0b8193", +2763 => x"3873822a", +2764 => x"70810651", +2765 => x"5372802e", +2766 => x"0b0b0b80", +2767 => x"c638b015", +2768 => x"08547380", +2769 => x"2e0b0b0b", +2770 => x"0ba53880", +2771 => x"c0155373", +2772 => x"732e0b0b", +2773 => x"0b0b9438", +2774 => x"73520b0b", +2775 => x"82f4ec08", +2776 => x"510b0b0b", +2777 => x"b5d23f8c", +2778 => x"15225676", +2779 => x"b0160c75", +2780 => x"db065372", +2781 => x"8c162380", +2782 => x"0b84160c", +2783 => x"90150875", +2784 => x"0c725675", +2785 => x"88075372", +2786 => x"8c162390", +2787 => x"1508802e", +2788 => x"0b0b0b80", +2789 => x"d3388c15", +2790 => x"22708106", +2791 => x"5553730b", +2792 => x"0b0b0ba2", +2793 => x"38720a10", +2794 => x"0a708106", +2795 => x"5153720b", +2796 => x"0b0b0b85", +2797 => x"38941508", +2798 => x"54738816", +2799 => x"0c805372", +2800 => x"800c883d", +2801 => x"0d04800b", +2802 => x"88160c94", +2803 => x"15083098", +2804 => x"160c8053", +2805 => x"0b0b0b0b", +2806 => x"e6397251", +2807 => x"0b0b0baf", +2808 => x"fe3f0b0b", +2809 => x"0bfe9839", +2810 => x"74510b0b", +2811 => x"80c4ef3f", +2812 => x"8c152270", +2813 => x"81065553", +2814 => x"73802e0b", +2815 => x"0b0bffa5", +2816 => x"380b0b0b", +2817 => x"0bc039ef", +2818 => x"3d0d6365", +2819 => x"9011085e", +2820 => x"40408053", +2821 => x"7b609005", +2822 => x"08240b0b", +2823 => x"0b81d038", +2824 => x"941f70ff", +2825 => x"1e70822b", +2826 => x"73116494", +2827 => x"05705c43", +2828 => x"5f610570", +2829 => x"087f0881", +2830 => x"0557555c", +2831 => x"5e42570b", +2832 => x"0b81ebf8", +2833 => x"3f80085d", +2834 => x"80080b0b", +2835 => x"0b81a738", +2836 => x"7e527f51", +2837 => x"0b0b80e9", +2838 => x"803f800b", +2839 => x"8008240b", +2840 => x"0b0b8189", +2841 => x"38811d5d", +2842 => x"80707f63", +2843 => x"5a585b58", +2844 => x"76708405", +2845 => x"58087083", +2846 => x"ffff067b", +2847 => x"0571902a", +2848 => x"71902a05", +2849 => x"70902a5d", +2850 => x"5283ffff", +2851 => x"06821822", +2852 => x"7072311b", +2853 => x"585b5483", +2854 => x"ffff0676", +2855 => x"22707231", +2856 => x"77902c05", +2857 => x"70902c5b", +2858 => x"52435372", +2859 => x"76237482", +2860 => x"17238416", +2861 => x"567a7727", +2862 => x"0b0b0bff", +2863 => x"b3387b10", +2864 => x"101e5978", +2865 => x"080b0b0b", +2866 => x"0ba338fc", +2867 => x"19597d79", +2868 => x"270b0b0b", +2869 => x"0b923878", +2870 => x"080b0b0b", +2871 => x"0b8a38ff", +2872 => x"1c5c0b0b", +2873 => x"0b0be439", +2874 => x"7b609005", +2875 => x"0c7c5372", +2876 => x"800c933d", +2877 => x"0d048070", +2878 => x"5b587670", +2879 => x"84055808", +2880 => x"7083ffff", +2881 => x"06707f29", +2882 => x"1c72902a", +2883 => x"60297190", +2884 => x"2a057090", +2885 => x"2a5e5283", +2886 => x"ffff0682", +2887 => x"19227072", +2888 => x"311c5945", +2889 => x"5283ffff", +2890 => x"06772270", +2891 => x"72317890", +2892 => x"2c057090", +2893 => x"2c5c5256", +2894 => x"51537276", +2895 => x"23748217", +2896 => x"23841656", +2897 => x"7a77270b", +2898 => x"0b0bffae", +2899 => x"3878080b", +2900 => x"0b0bfdfc", +2901 => x"38fc1959", +2902 => x"7d79270b", +2903 => x"0b0b0b92", +2904 => x"3878080b", +2905 => x"0b0b0b8a", +2906 => x"38ff1c5c", +2907 => x"0b0b0b0b", +2908 => x"e4397b60", +2909 => x"90050c0b", +2910 => x"0b0bfdd4", +2911 => x"398c08c8", +2912 => x"3d0dbc3d", +2913 => x"0880c03d", +2914 => x"0880c23d", +2915 => x"0880c53d", +2916 => x"0880c73d", +2917 => x"088c0c5d", +2918 => x"4b434080", +2919 => x"0bbe3d08", +2920 => x"80c03d08", +2921 => x"5bba3d0c", +2922 => x"79bb3d0c", +2923 => x"6080c005", +2924 => x"08574875", +2925 => x"682e0981", +2926 => x"060b0b0b", +2927 => x"80ea38b8", +2928 => x"3d085780", +2929 => x"77240b0b", +2930 => x"0b818c38", +2931 => x"677a0c76", +2932 => x"9ffe0a06", +2933 => x"56759ffe", +2934 => x"0a2e0b0b", +2935 => x"0b819838", +2936 => x"b83d08ba", +2937 => x"3d085a58", +2938 => x"80568076", +2939 => x"54547751", +2940 => x"78520b0b", +2941 => x"81d6f23f", +2942 => x"80080b0b", +2943 => x"0b81c638", +2944 => x"80c13d08", +2945 => x"5881780c", +2946 => x"0b0b82f0", +2947 => x"f05f8c08", +2948 => x"802e0b0b", +2949 => x"0b0b8638", +2950 => x"811f8c08", +2951 => x"0c7e5675", +2952 => x"800cba3d", +2953 => x"0d8c0c04", +2954 => x"7f80c405", +2955 => x"0884170c", +2956 => x"816080c4", +2957 => x"05082b88", +2958 => x"170c7552", +2959 => x"7f510b0b", +2960 => x"80d8ad3f", +2961 => x"676080c0", +2962 => x"050cb83d", +2963 => x"08577680", +2964 => x"250b0b0b", +2965 => x"fef63881", +2966 => x"7a0c76fe", +2967 => x"0a0670ba", +2968 => x"3d0c709f", +2969 => x"fe0a0657", +2970 => x"57759ffe", +2971 => x"0a2e0981", +2972 => x"060b0b0b", +2973 => x"feea3880", +2974 => x"c13d0856", +2975 => x"80ce8f76", +2976 => x"0cb93d08", +2977 => x"0b0b0b84", +2978 => x"c93876bf", +2979 => x"ffff060b", +2980 => x"0b82f1a4", +2981 => x"4056750b", +2982 => x"0b0b84b6", +2983 => x"388c0880", +2984 => x"2e0b0b0b", +2985 => x"fef73883", +2986 => x"1f337f88", +2987 => x"05585675", +2988 => x"0b0b0b0b", +2989 => x"8438831f", +2990 => x"57768c08", +2991 => x"0c7e560b", +2992 => x"0b0bfedb", +2993 => x"39ba3dff", +2994 => x"b41156ff", +2995 => x"b0055477", +2996 => x"5278537f", +2997 => x"510b0b80", +2998 => x"eaa43f80", +2999 => x"08b93d08", +3000 => x"70942a8f", +3001 => x"ff065e59", +3002 => x"417b0b0b", +3003 => x"0b83ef38", +3004 => x"a73d08a7", +3005 => x"3d080588", +3006 => x"b2115d56", +3007 => x"a07c250b", +3008 => x"0b0b8ff4", +3009 => x"3880c07c", +3010 => x"31889217", +3011 => x"79722bbc", +3012 => x"3d08722a", +3013 => x"07b53d71", +3014 => x"5670555d", +3015 => x"5157570b", +3016 => x"0b81dfa9", +3017 => x"3fb23d08", +3018 => x"b43d08b2", +3019 => x"3d5d5a58", +3020 => x"8076240b", +3021 => x"0b0b93f5", +3022 => x"3877b73d", +3023 => x"0c78b83d", +3024 => x"0cb63d08", +3025 => x"90ff0a05", +3026 => x"b73d0cf7", +3027 => x"cd1c5c81", +3028 => x"4ebffc0a", +3029 => x"56807655", +3030 => x"55b63d08", +3031 => x"b83d0858", +3032 => x"5276537a", +3033 => x"510b0b81", +3034 => x"a2803f83", +3035 => x"feca8fa7", +3036 => x"56869bbd", +3037 => x"86e17655", +3038 => x"55b03d08", +3039 => x"b23d0858", +3040 => x"52765379", +3041 => x"510b0b81", +3042 => x"a3933f83", +3043 => x"fe9a94a8", +3044 => x"56f8db83", +3045 => x"91b37655", +3046 => x"55b23d08", +3047 => x"b43d0858", +3048 => x"527653ba", +3049 => x"3dd00551", +3050 => x"0b0b81a0", +3051 => x"963fae3d", +3052 => x"08b03d08", +3053 => x"7d54ae3d", +3054 => x"535a580b", +3055 => x"0b81de8d", +3056 => x"3faa3d4c", +3057 => x"83fecd88", +3058 => x"93568584", +3059 => x"fdf3fb76", +3060 => x"5555ac3d", +3061 => x"08ae3d08", +3062 => x"58527653", +3063 => x"6b510b0b", +3064 => x"81a2ba3f", +3065 => x"a83dab3d", +3066 => x"08ad3d08", +3067 => x"59557756", +3068 => x"78537954", +3069 => x"7052450b", +3070 => x"0b819fc7", +3071 => x"3fa83d08", +3072 => x"aa3d0871", +3073 => x"5370545f", +3074 => x"5d0b0b81", +3075 => x"dfdf3f80", +3076 => x"08438056", +3077 => x"80765454", +3078 => x"7c517d52", +3079 => x"0b0b81d9", +3080 => x"843f800b", +3081 => x"8008240b", +3082 => x"0b0b8eae", +3083 => x"38810ba2", +3084 => x"3d0c6296", +3085 => x"260b0b0b", +3086 => x"0bb23862", +3087 => x"1010100b", +3088 => x"0b82f2d8", +3089 => x"05841108", +3090 => x"71085555", +3091 => x"b93d08bb", +3092 => x"3d085952", +3093 => x"5676520b", +3094 => x"0b81d8c9", +3095 => x"3f800b80", +3096 => x"08246371", +3097 => x"31445680", +3098 => x"0ba23d0c", +3099 => x"a73d087c", +3100 => x"31ff055a", +3101 => x"807a454b", +3102 => x"6a7a240b", +3103 => x"0b0b8da9", +3104 => x"38806324", +3105 => x"0b0b0ba0", +3106 => x"8b38800b", +3107 => x"a63d0c62", +3108 => x"4f636305", +3109 => x"44896227", +3110 => x"0b0b0b0b", +3111 => x"83388042", +3112 => x"81588562", +3113 => x"250b0b0b", +3114 => x"0b873861", +3115 => x"fc054280", +3116 => x"58810ba1", +3117 => x"3d0cff70", +3118 => x"a53d0c46", +3119 => x"6185260b", +3120 => x"0b0b82bd", +3121 => x"38611010", +3122 => x"0b0b82f1", +3123 => x"b0055675", +3124 => x"08040b0b", +3125 => x"82f0f85f", +3126 => x"0b0b0bfb", +3127 => x"c039b83d", +3128 => x"08ba3d08", +3129 => x"58b73d0c", +3130 => x"76b83d0c", +3131 => x"b63d08fc", +3132 => x"0a069ffc", +3133 => x"0a07b73d", +3134 => x"0cf8811c", +3135 => x"5c804eb2", +3136 => x"3db13d5c", +3137 => x"5abffc0a", +3138 => x"56807655", +3139 => x"55b63d08", +3140 => x"b83d0858", +3141 => x"5276537a", +3142 => x"510b0b81", +3143 => x"9ecc3f83", +3144 => x"feca8fa7", +3145 => x"56869bbd", +3146 => x"86e17655", +3147 => x"55b03d08", +3148 => x"b23d0858", +3149 => x"52765379", +3150 => x"510b0b81", +3151 => x"9fdf3f83", +3152 => x"fe9a94a8", +3153 => x"56f8db83", +3154 => x"91b37655", +3155 => x"55b23d08", +3156 => x"b43d0858", +3157 => x"527653ba", +3158 => x"3dd00551", +3159 => x"0b0b819c", +3160 => x"e23fae3d", +3161 => x"08b03d08", +3162 => x"7d54ae3d", +3163 => x"535a580b", +3164 => x"0b81dad9", +3165 => x"3faa3d4c", +3166 => x"83fecd88", +3167 => x"93568584", +3168 => x"fdf3fb76", +3169 => x"5555ac3d", +3170 => x"08ae3d08", +3171 => x"58527653", +3172 => x"6b510b0b", +3173 => x"819f863f", +3174 => x"a83dab3d", +3175 => x"08ad3d08", +3176 => x"59557756", +3177 => x"78537954", +3178 => x"7052450b", +3179 => x"0b819c93", +3180 => x"3fa83d08", +3181 => x"aa3d0871", +3182 => x"5370545f", +3183 => x"5d0b0b81", +3184 => x"dcab3f80", +3185 => x"08438056", +3186 => x"80765454", +3187 => x"7c517d52", +3188 => x"0b0b81d5", +3189 => x"d03f8008", +3190 => x"80250b0b", +3191 => x"0bfcce38", +3192 => x"0b0b0b8a", +3193 => x"f539800b", +3194 => x"a13d0c68", +3195 => x"63058111", +3196 => x"70485da4", +3197 => x"3d0c7b80", +3198 => x"240b0b0b", +3199 => x"0b833881", +3200 => x"5c845a80", +3201 => x"6080c405", +3202 => x"0c987c26", +3203 => x"0b0b0b0b", +3204 => x"9b388057", +3205 => x"81177a10", +3206 => x"9411585b", +3207 => x"577b7627", +3208 => x"0b0b0b0b", +3209 => x"ef387660", +3210 => x"80c4050c", +3211 => x"7f80c405", +3212 => x"08527f51", +3213 => x"0b0b80cf", +3214 => x"903f8008", +3215 => x"6080c005", +3216 => x"0c800880", +3217 => x"088e6827", +3218 => x"58404d77", +3219 => x"802e0b0b", +3220 => x"0b86fd38", +3221 => x"75802e0b", +3222 => x"0b0b86f4", +3223 => x"38b83d08", +3224 => x"ba3d0871", +3225 => x"b93d0c70", +3226 => x"ba3d0c64", +3227 => x"a53d0c67", +3228 => x"a73d0c5a", +3229 => x"58825c80", +3230 => x"63250b0b", +3231 => x"0b8cae38", +3232 => x"62832b80", +3233 => x"f8060b0b", +3234 => x"82f2d811", +3235 => x"080b0b82", +3236 => x"f2dc1208", +3237 => x"65842c70", +3238 => x"842a7081", +3239 => x"0651545d", +3240 => x"405e5675", +3241 => x"0b0b0b8a", +3242 => x"8a387980", +3243 => x"2e0b0b0b", +3244 => x"0ba8380b", +3245 => x"0b82f2b0", +3246 => x"58798106", +3247 => x"56750b0b", +3248 => x"0b88f138", +3249 => x"79812c88", +3250 => x"19595a79", +3251 => x"0b0b0b0b", +3252 => x"e838b83d", +3253 => x"08ba3d08", +3254 => x"5a587c54", +3255 => x"7d557752", +3256 => x"78536451", +3257 => x"0b0b81bb", +3258 => x"b43fa83d", +3259 => x"08aa3d08", +3260 => x"71bb3d0c", +3261 => x"70bc3d0c", +3262 => x"5a58a13d", +3263 => x"08802e0b", +3264 => x"0b0b80eb", +3265 => x"38805a9f", +3266 => x"fc0a5680", +3267 => x"76545477", +3268 => x"5178520b", +3269 => x"0b81d38d", +3270 => x"3f798008", +3271 => x"240b0b0b", +3272 => x"8def3880", +3273 => x"66250b0b", +3274 => x"0b80c438", +3275 => x"79802e0b", +3276 => x"0b0b0bbb", +3277 => x"38800ba4", +3278 => x"3d08250b", +3279 => x"0b0b84f8", +3280 => x"38a33d08", +3281 => x"63ff0544", +3282 => x"4680c882", +3283 => x"0a568076", +3284 => x"55557752", +3285 => x"78536451", +3286 => x"0b0b819b", +3287 => x"c03fa83d", +3288 => x"08aa3d08", +3289 => x"5ab93d0c", +3290 => x"78ba3d0c", +3291 => x"811c5c7b", +3292 => x"5264510b", +3293 => x"0b81d6d5", +3294 => x"3fb83d08", +3295 => x"ba3d0858", +3296 => x"547655a8", +3297 => x"3d08aa3d", +3298 => x"08585276", +3299 => x"536b510b", +3300 => x"0b819b89", +3301 => x"3f80f082", +3302 => x"0a568076", +3303 => x"5555aa3d", +3304 => x"08ac3d08", +3305 => x"58527653", +3306 => x"ac3d510b", +3307 => x"0b819893", +3308 => x"3fac3d08", +3309 => x"ae3d0858", +3310 => x"b53d0c76", +3311 => x"b63d0cb4", +3312 => x"3d0886bf", +3313 => x"0a05b53d", +3314 => x"0c65802e", +3315 => x"0b0b0b9b", +3316 => x"c9386f80", +3317 => x"2e0b0b0b", +3318 => x"99e23865", +3319 => x"1010100b", +3320 => x"0b82f2d0", +3321 => x"05841108", +3322 => x"71085656", +3323 => x"568ffc0a", +3324 => x"56807653", +3325 => x"5364510b", +3326 => x"0b81b9a1", +3327 => x"3fb43d08", +3328 => x"b63d0858", +3329 => x"547655a8", +3330 => x"3d08aa3d", +3331 => x"08585276", +3332 => x"536b510b", +3333 => x"0b8198d2", +3334 => x"3faa3d08", +3335 => x"ac3d0858", +3336 => x"b53d0c76", +3337 => x"b63d0c80", +3338 => x"0bb93d08", +3339 => x"bb3d085b", +3340 => x"595c80c8", +3341 => x"820a5d80", +3342 => x"5e775178", +3343 => x"520b0b81", +3344 => x"d7ab3f80", +3345 => x"08800853", +3346 => x"65525a0b", +3347 => x"0b81d4fd", +3348 => x"3fa83d08", +3349 => x"aa3d0858", +3350 => x"547655b8", +3351 => x"3d08ba3d", +3352 => x"08585276", +3353 => x"536b510b", +3354 => x"0b8197fe", +3355 => x"3faa3d08", +3356 => x"ac3d085a", +3357 => x"b93d0c78", +3358 => x"ba3d0cb0", +3359 => x"1a56757f", +3360 => x"70810541", +3361 => x"34b83d08", +3362 => x"ba3d08b6", +3363 => x"3d08b83d", +3364 => x"085a5578", +3365 => x"56715370", +3366 => x"545a580b", +3367 => x"0b81d085", +3368 => x"3f800b80", +3369 => x"08240b0b", +3370 => x"0b87d438", +3371 => x"77547855", +3372 => x"9ffc0a56", +3373 => x"80765353", +3374 => x"64510b0b", +3375 => x"8197ab3f", +3376 => x"b43d08b6", +3377 => x"3d087155", +3378 => x"7056aa3d", +3379 => x"08ac3d08", +3380 => x"5a537854", +3381 => x"5a580b0b", +3382 => x"81cfca3f", +3383 => x"800b8008", +3384 => x"240b0b0b", +3385 => x"86e63881", +3386 => x"1c5c7b66", +3387 => x"250b0b0b", +3388 => x"81c6387c", +3389 => x"547d5577", +3390 => x"5278536b", +3391 => x"510b0b81", +3392 => x"989b3faa", +3393 => x"3d08ac3d", +3394 => x"0858b53d", +3395 => x"0c76b63d", +3396 => x"0c7c547d", +3397 => x"55b83d08", +3398 => x"ba3d0858", +3399 => x"52765364", +3400 => x"510b0b81", +3401 => x"97f73fa8", +3402 => x"3d08aa3d", +3403 => x"0871bb3d", +3404 => x"0c70bc3d", +3405 => x"0c5a580b", +3406 => x"0b0bfdfd", +3407 => x"398ffc0a", +3408 => x"58807855", +3409 => x"7056b53d", +3410 => x"08b73d08", +3411 => x"59537754", +3412 => x"6552590b", +3413 => x"0b8194eb", +3414 => x"3fa83d08", +3415 => x"aa3d0858", +3416 => x"537654b8", +3417 => x"3d08ba3d", +3418 => x"08585176", +3419 => x"520b0b81", +3420 => x"cc9f3f80", +3421 => x"0880240b", +3422 => x"0b0b85d0", +3423 => x"38b43d08", +3424 => x"b63d0858", +3425 => x"54765577", +3426 => x"5278536b", +3427 => x"510b0b81", +3428 => x"95d83faa", +3429 => x"3d08ac3d", +3430 => x"08585376", +3431 => x"54b83d08", +3432 => x"ba3d0858", +3433 => x"5176520b", +3434 => x"0b81cdf9", +3435 => x"3f800b80", +3436 => x"08240b0b", +3437 => x"0b97cb38", +3438 => x"6cb73d08", +3439 => x"b93d085b", +3440 => x"ba3d0c79", +3441 => x"bb3d0ca3", +3442 => x"3d08a63d", +3443 => x"0848445f", +3444 => x"800ba73d", +3445 => x"08575877", +3446 => x"76240b0b", +3447 => x"0b0b8338", +3448 => x"81588078", +3449 => x"0657628e", +3450 => x"240b0b0b", +3451 => x"89ad3881", +3452 => x"70790658", +3453 => x"5976802e", +3454 => x"0b0b0b89", +3455 => x"9e386210", +3456 => x"10100b0b", +3457 => x"82f2d805", +3458 => x"70088412", +3459 => x"08806c24", +3460 => x"53405e56", +3461 => x"8066250b", +3462 => x"0b0b86c9", +3463 => x"38810bb9", +3464 => x"3d08bb3d", +3465 => x"085b595c", +3466 => x"7c547d55", +3467 => x"77527853", +3468 => x"64510b0b", +3469 => x"81b4e63f", +3470 => x"a83d08aa", +3471 => x"3d085851", +3472 => x"76520b0b", +3473 => x"81d3a63f", +3474 => x"80088008", +3475 => x"5365525a", +3476 => x"0b0b81d0", +3477 => x"f83f7c54", +3478 => x"7d55a83d", +3479 => x"08aa3d08", +3480 => x"58527653", +3481 => x"6b510b0b", +3482 => x"8195b23f", +3483 => x"aa3d08ac", +3484 => x"3d085854", +3485 => x"7655b83d", +3486 => x"08ba3d08", +3487 => x"58527653", +3488 => x"ac3d510b", +3489 => x"0b8193e2", +3490 => x"3fac3d08", +3491 => x"ae3d085a", +3492 => x"b93d0c78", +3493 => x"ba3d0cb0", +3494 => x"1a56757f", +3495 => x"70810541", +3496 => x"347b662e", +3497 => x"0b0b0b82", +3498 => x"c23880c8", +3499 => x"820a5680", +3500 => x"765555b8", +3501 => x"3d08ba3d", +3502 => x"08585276", +3503 => x"5364510b", +3504 => x"0b8194d9", +3505 => x"3fa83d08", +3506 => x"aa3d0871", +3507 => x"bb3d0c70", +3508 => x"bc3d0c5a", +3509 => x"58805680", +3510 => x"76545477", +3511 => x"5178520b", +3512 => x"0b81c585", +3513 => x"3f800880", +3514 => x"2e0b0b0b", +3515 => x"83913881", +3516 => x"1c5c0b0b", +3517 => x"0bfeb139", +3518 => x"a07c31ba", +3519 => x"3d08712b", +3520 => x"b43d7155", +3521 => x"70545c51", +3522 => x"560b0b81", +3523 => x"cfbf3fb2", +3524 => x"3d08b43d", +3525 => x"08b23d5d", +3526 => x"5a587580", +3527 => x"250b0b0b", +3528 => x"f097380b", +3529 => x"0b0b8485", +3530 => x"3979304b", +3531 => x"80440b0b", +3532 => x"0bf2ce39", +3533 => x"811c7808", +3534 => x"841a0859", +3535 => x"5577567d", +3536 => x"537e5465", +3537 => x"525c0b0b", +3538 => x"8193d23f", +3539 => x"a83d08aa", +3540 => x"3d085f5d", +3541 => x"0b0b0bf6", +3542 => x"eb396252", +3543 => x"64510b0b", +3544 => x"81ceea3f", +3545 => x"7c537d54", +3546 => x"a83d08aa", +3547 => x"3d085851", +3548 => x"76520b0b", +3549 => x"81c6863f", +3550 => x"80083070", +3551 => x"8008079f", +3552 => x"2a647131", +3553 => x"4551560b", +3554 => x"0b0bf1a1", +3555 => x"39800ba1", +3556 => x"3d0c8069", +3557 => x"250b0b0b", +3558 => x"84e73868", +3559 => x"69a53d0c", +3560 => x"69475c0b", +3561 => x"0b0bf4d9", +3562 => x"39925c80", +3563 => x"490b0b0b", +3564 => x"f4cf3979", +3565 => x"8f060b0b", +3566 => x"82f2d008", +3567 => x"0b0b82f2", +3568 => x"d4085955", +3569 => x"77567853", +3570 => x"79546552", +3571 => x"5a0b0b81", +3572 => x"b1cb3fa8", +3573 => x"3d08aa3d", +3574 => x"0871bb3d", +3575 => x"0c70bc3d", +3576 => x"0c5a5883", +3577 => x"5c0b0b0b", +3578 => x"f5c039b8", +3579 => x"3d08ba3d", +3580 => x"08715670", +3581 => x"57585276", +3582 => x"5364510b", +3583 => x"0b818fc3", +3584 => x"3fa83d08", +3585 => x"aa3d0871", +3586 => x"bb3d0c70", +3587 => x"bc3d0c7e", +3588 => x"557f5671", +3589 => x"5370545a", +3590 => x"580b0b81", +3591 => x"c6f33f80", +3592 => x"0880240b", +3593 => x"0b0b0ba4", +3594 => x"387c537d", +3595 => x"54775178", +3596 => x"520b0b81", +3597 => x"c2b33f80", +3598 => x"080b0b0b", +3599 => x"80c13879", +3600 => x"81065675", +3601 => x"802e0b0b", +3602 => x"0b0bb438", +3603 => x"ff1f7033", +3604 => x"575f75b9", +3605 => x"2e098106", +3606 => x"0b0b0b0b", +3607 => x"94387e6d", +3608 => x"2e098106", +3609 => x"0b0b0b0b", +3610 => x"e3386281", +3611 => x"0543b06d", +3612 => x"347e7f81", +3613 => x"05713381", +3614 => x"05584057", +3615 => x"75773460", +3616 => x"527f510b", +3617 => x"0b80c3e8", +3618 => x"3f807f34", +3619 => x"80c13d08", +3620 => x"63810571", +3621 => x"0c568c08", +3622 => x"802e0b0b", +3623 => x"0b0b8538", +3624 => x"7e8c080c", +3625 => x"6c800cba", +3626 => x"3d0d8c0c", +3627 => x"0462305b", +3628 => x"7a802e0b", +3629 => x"0b0bf4c2", +3630 => x"387a832b", +3631 => x"80f8060b", +3632 => x"0b82f2dc", +3633 => x"11080b0b", +3634 => x"82f2d812", +3635 => x"08565678", +3636 => x"53795465", +3637 => x"52560b0b", +3638 => x"8190c23f", +3639 => x"a83d08aa", +3640 => x"3d0871bb", +3641 => x"3d0c70bc", +3642 => x"3d0c7c84", +3643 => x"2c5c5a58", +3644 => x"79802e0b", +3645 => x"0b0bf482", +3646 => x"380b0b82", +3647 => x"f2b07a81", +3648 => x"06575b75", +3649 => x"0b0b0b82", +3650 => x"90387981", +3651 => x"2c881c5c", +3652 => x"5a79802e", +3653 => x"0b0b0bf3", +3654 => x"e1387981", +3655 => x"06567580", +3656 => x"2e0b0b0b", +3657 => x"0be4380b", +3658 => x"0b0b81ed", +3659 => x"399f820a", +3660 => x"56807655", +3661 => x"55775278", +3662 => x"537a510b", +3663 => x"0b818d83", +3664 => x"3fb03d08", +3665 => x"b23d085a", +3666 => x"b73d0c78", +3667 => x"b83d0cb6", +3668 => x"3d0890ff", +3669 => x"0a05b73d", +3670 => x"0cf7cd1c", +3671 => x"5c814e0b", +3672 => x"0b0bebed", +3673 => x"39757906", +3674 => x"5675802e", +3675 => x"0b0b0bf9", +3676 => x"ac388070", +3677 => x"484a6966", +3678 => x"240b0b0b", +3679 => x"82943880", +3680 => x"d0820a56", +3681 => x"80765555", +3682 => x"7c527d53", +3683 => x"64510b0b", +3684 => x"818f8a3f", +3685 => x"a83d08aa", +3686 => x"3d085853", +3687 => x"7654b83d", +3688 => x"08ba3d08", +3689 => x"58517652", +3690 => x"0b0b81c8", +3691 => x"8c3f6980", +3692 => x"08250b0b", +3693 => x"0b81db38", +3694 => x"6c5fb17f", +3695 => x"70810541", +3696 => x"34628105", +3697 => x"4366527f", +3698 => x"510b0b80", +3699 => x"c1a23f69", +3700 => x"802e0b0b", +3701 => x"0bfda838", +3702 => x"67307069", +3703 => x"079f2a51", +3704 => x"56676a2e", +3705 => x"0b0b0b0b", +3706 => x"8838750b", +3707 => x"0b0b80e5", +3708 => x"3869527f", +3709 => x"510b0b80", +3710 => x"c0f63f0b", +3711 => x"0b0bfcff", +3712 => x"39817071", +3713 => x"a63d0c71", +3714 => x"485d490b", +3715 => x"0b0beff1", +3716 => x"39815a0b", +3717 => x"0b0bf28b", +3718 => x"39811c7b", +3719 => x"08841d08", +3720 => x"59557756", +3721 => x"78537954", +3722 => x"65525c0b", +3723 => x"0b818ded", +3724 => x"3fa83d08", +3725 => x"aa3d0871", +3726 => x"bb3d0c70", +3727 => x"bc3d0c7b", +3728 => x"812c881e", +3729 => x"5e5c5a58", +3730 => x"790b0b0b", +3731 => x"fdcc380b", +3732 => x"0b0bf1a6", +3733 => x"3967527f", +3734 => x"510b0b80", +3735 => x"c0923f69", +3736 => x"527f510b", +3737 => x"0b80c088", +3738 => x"3f0b0b0b", +3739 => x"fc913977", +3740 => x"810a3253", +3741 => x"78547951", +3742 => x"7a520b0b", +3743 => x"81c4a63f", +3744 => x"80088025", +3745 => x"0b0b0bf6", +3746 => x"af3879b9", +3747 => x"3d0c7aba", +3748 => x"3d0c6809", +3749 => x"430b0b0b", +3750 => x"feab396a", +3751 => x"a63d0878", +3752 => x"794b4c59", +3753 => x"596f802e", +3754 => x"0b0b0b80", +3755 => x"d0388162", +3756 => x"250b0b0b", +3757 => x"8ec73865", +3758 => x"ff05a63d", +3759 => x"08713159", +3760 => x"5aa53d08", +3761 => x"7a250b0b", +3762 => x"0b0b9438", +3763 => x"79a63d08", +3764 => x"316f11a1", +3765 => x"3d0ca63d", +3766 => x"0805a63d", +3767 => x"0c765865", +3768 => x"5c806624", +3769 => x"0b0b0b84", +3770 => x"cb386a1c", +3771 => x"641d454b", +3772 => x"81527f51", +3773 => x"0b0b80c4", +3774 => x"de3f8008", +3775 => x"4a788024", +3776 => x"56806425", +3777 => x"0b0b0b0b", +3778 => x"a3387580", +3779 => x"2e0b0b0b", +3780 => x"0b9a3863", +3781 => x"5c786425", +3782 => x"0b0b0b0b", +3783 => x"8338785c", +3784 => x"6a7c3179", +3785 => x"7d31657e", +3786 => x"31465a4b", +3787 => x"800ba63d", +3788 => x"08250b0b", +3789 => x"0b80cb38", +3790 => x"6f802e0b", +3791 => x"0b0b8ae5", +3792 => x"38807825", +3793 => x"0b0b0b0b", +3794 => x"ac387753", +3795 => x"69527f51", +3796 => x"0b0b80c7", +3797 => x"943f8008", +3798 => x"61548008", +3799 => x"5360524a", +3800 => x"0b0b80c4", +3801 => x"8e3f8008", +3802 => x"61536052", +3803 => x"560b0b0b", +3804 => x"bdfe3f75", +3805 => x"41a53d08", +3806 => x"78315a79", +3807 => x"0b0b0b83", +3808 => x"9e388152", +3809 => x"7f510b0b", +3810 => x"80c3cc3f", +3811 => x"80084780", +3812 => x"6f250b0b", +3813 => x"0b0b9138", +3814 => x"6e538008", +3815 => x"527f510b", +3816 => x"0b80c6c5", +3817 => x"3f800847", +3818 => x"80588162", +3819 => x"250b0b0b", +3820 => x"829b3863", +3821 => x"81059f06", +3822 => x"5c6e0b0b", +3823 => x"0b81ee38", +3824 => x"7b802e0b", +3825 => x"0b0b0b85", +3826 => x"38a07c31", +3827 => x"5c847c25", +3828 => x"0b0b0b88", +3829 => x"c238fc1c", +3830 => x"6b11711b", +3831 => x"5b4c6405", +3832 => x"44806b25", +3833 => x"0b0b0b0b", +3834 => x"90386a53", +3835 => x"60527f51", +3836 => x"0b0b80c7", +3837 => x"f23f8008", +3838 => x"41806425", +3839 => x"0b0b0b0b", +3840 => x"90386353", +3841 => x"66527f51", +3842 => x"0b0b80c7", +3843 => x"da3f8008", +3844 => x"47a13d08", +3845 => x"0b0b0b80", +3846 => x"da388066", +3847 => x"25568262", +3848 => x"250b0b0b", +3849 => x"82c73875", +3850 => x"802e0b0b", +3851 => x"0b82be38", +3852 => x"8066240b", +3853 => x"0b0bfcda", +3854 => x"38805485", +3855 => x"5366527f", +3856 => x"510b0b0b", +3857 => x"bcce3f80", +3858 => x"08800853", +3859 => x"6152470b", +3860 => x"0b80c985", +3861 => x"3f800b80", +3862 => x"08250b0b", +3863 => x"0bfcb338", +3864 => x"6c5fb17f", +3865 => x"70810541", +3866 => x"34628105", +3867 => x"430b0b0b", +3868 => x"fad33966", +3869 => x"5260510b", +3870 => x"0b80c8dd", +3871 => x"3f800880", +3872 => x"250b0b0b", +3873 => x"ff943862", +3874 => x"ff054380", +3875 => x"548a5360", +3876 => x"527f510b", +3877 => x"0b0bbbfc", +3878 => x"3f800841", +3879 => x"6f0b0b0b", +3880 => x"81b038a3", +3881 => x"3d08460b", +3882 => x"0b0bfeee", +3883 => x"39669005", +3884 => x"08101067", +3885 => x"05901108", +3886 => x"52560b0b", +3887 => x"0bbec93f", +3888 => x"63800831", +3889 => x"9f065c0b", +3890 => x"0b0bfdf4", +3891 => x"39b93d08", +3892 => x"782e0981", +3893 => x"060b0b0b", +3894 => x"fdd938b8", +3895 => x"3d0870bf", +3896 => x"ffff0657", +3897 => x"5775782e", +3898 => x"0981060b", +3899 => x"0b0bfdc3", +3900 => x"38769ffe", +3901 => x"0a065675", +3902 => x"782e0b0b", +3903 => x"0bfdb438", +3904 => x"6a810564", +3905 => x"8105454b", +3906 => x"81648105", +3907 => x"9f065d58", +3908 => x"6e802e0b", +3909 => x"0b0bfda8", +3910 => x"380b0b0b", +3911 => x"ff8f3979", +3912 => x"5360527f", +3913 => x"510b0b80", +3914 => x"c3bf3f80", +3915 => x"08410b0b", +3916 => x"0bfccf39", +3917 => x"6a663159", +3918 => x"806b114c", +3919 => x"64054481", +3920 => x"527f510b", +3921 => x"0b80c08f", +3922 => x"3f80084a", +3923 => x"0b0b0bfb", +3924 => x"ac398054", +3925 => x"8a536952", +3926 => x"7f510b0b", +3927 => x"0bbab53f", +3928 => x"8008a43d", +3929 => x"08474a0b", +3930 => x"0b0bfdae", +3931 => x"39815c6f", +3932 => x"802e0b0b", +3933 => x"0b82bb38", +3934 => x"8079250b", +3935 => x"0b0b0b90", +3936 => x"38785369", +3937 => x"527f510b", +3938 => x"0b80c4db", +3939 => x"3f80084a", +3940 => x"6948770b", +3941 => x"0b0b82e9", +3942 => x"38815c66", +3943 => x"5260510b", +3944 => x"0b0bdce3", +3945 => x"3f8008b0", +3946 => x"05685361", +3947 => x"52570b0b", +3948 => x"80c6a63f", +3949 => x"80086a54", +3950 => x"67536052", +3951 => x"5a0b0b80", +3952 => x"c6fe3f80", +3953 => x"0856815b", +3954 => x"80088c05", +3955 => x"08802e0b", +3956 => x"0b0b8299", +3957 => x"3875527f", +3958 => x"510b0b0b", +3959 => x"b9923f7a", +3960 => x"62075675", +3961 => x"0b0b0b0b", +3962 => x"9038b93d", +3963 => x"08810656", +3964 => x"75802e0b", +3965 => x"0b0b82c8", +3966 => x"38807a24", +3967 => x"0b0b0b82", +3968 => x"da387962", +3969 => x"0756750b", +3970 => x"0b0b0b90", +3971 => x"38b93d08", +3972 => x"81065675", +3973 => x"802e0b0b", +3974 => x"0b82c038", +3975 => x"7a80240b", +3976 => x"0b0b8883", +3977 => x"38767f70", +3978 => x"81054134", +3979 => x"7b662e0b", +3980 => x"0b0b83fd", +3981 => x"3880548a", +3982 => x"5360527f", +3983 => x"510b0b0b", +3984 => x"b8d23f80", +3985 => x"0841676a", +3986 => x"2e0b0b0b", +3987 => x"83ac3880", +3988 => x"548a5367", +3989 => x"527f510b", +3990 => x"0b0bb8b8", +3991 => x"3f800848", +3992 => x"80548a53", +3993 => x"69527f51", +3994 => x"0b0b0bb8", +3995 => x"a73f8008", +3996 => x"811d5d4a", +3997 => x"66526051", +3998 => x"0b0b0bdb", +3999 => x"8a3f8008", +4000 => x"b0056853", +4001 => x"6152570b", +4002 => x"0b80c4cd", +4003 => x"3f80086a", +4004 => x"54675360", +4005 => x"525a0b0b", +4006 => x"80c5a53f", +4007 => x"80085681", +4008 => x"5b80088c", +4009 => x"05080b0b", +4010 => x"0bfeaa38", +4011 => x"0b0b0b0b", +4012 => x"bc396652", +4013 => x"7e7f8105", +4014 => x"62534056", +4015 => x"0b0b0bda", +4016 => x"c63f8008", +4017 => x"b0055776", +4018 => x"76347b66", +4019 => x"250b0b0b", +4020 => x"82df3880", +4021 => x"548a5360", +4022 => x"527f510b", +4023 => x"0b0bb7b4", +4024 => x"3f800881", +4025 => x"1d5d410b", +4026 => x"0b0b0bc6", +4027 => x"39800852", +4028 => x"60510b0b", +4029 => x"80c3e23f", +4030 => x"80085b0b", +4031 => x"0b0bfdd5", +4032 => x"39698405", +4033 => x"08527f51", +4034 => x"0b0b0bb5", +4035 => x"bc3f8008", +4036 => x"68900508", +4037 => x"10108805", +4038 => x"54688c05", +4039 => x"5380088c", +4040 => x"05524a0b", +4041 => x"0bff94e3", +4042 => x"3f815369", +4043 => x"527f510b", +4044 => x"0b80c1b3", +4045 => x"3f80084a", +4046 => x"815c0b0b", +4047 => x"0bfcdc39", +4048 => x"76b92e0b", +4049 => x"0b0b80d0", +4050 => x"38798024", +4051 => x"1757767f", +4052 => x"70810541", +4053 => x"340b0b0b", +4054 => x"f4eb3980", +4055 => x"7b250b0b", +4056 => x"0b0beb38", +4057 => x"81536052", +4058 => x"7f510b0b", +4059 => x"80c0f83f", +4060 => x"80086753", +4061 => x"80085241", +4062 => x"0b0b80c2", +4063 => x"dc3f800b", +4064 => x"8008250b", +4065 => x"0b0b80c8", +4066 => x"38811757", +4067 => x"76ba2e09", +4068 => x"81060b0b", +4069 => x"0bffb738", +4070 => x"b97f7081", +4071 => x"054134ff", +4072 => x"1f703357", +4073 => x"5f75b92e", +4074 => x"0981060b", +4075 => x"0b0b81d0", +4076 => x"387e6d2e", +4077 => x"0981060b", +4078 => x"0b0b0be3", +4079 => x"38628105", +4080 => x"6d4043b1", +4081 => x"7f708105", +4082 => x"41340b0b", +4083 => x"0bf3f639", +4084 => x"80080b0b", +4085 => x"0bfef738", +4086 => x"76810656", +4087 => x"75802e0b", +4088 => x"0b0bfeea", +4089 => x"38811757", +4090 => x"76ba2e09", +4091 => x"81060b0b", +4092 => x"0bfedb38", +4093 => x"0b0b0bff", +4094 => x"9f398054", +4095 => x"8a536952", +4096 => x"7f510b0b", +4097 => x"0bb58d3f", +4098 => x"80088008", +4099 => x"811e5e49", +4100 => x"4a0b0b0b", +4101 => x"fcde397b", +4102 => x"83240b0b", +4103 => x"0bf7c238", +4104 => x"9c1c6b11", +4105 => x"711b5b4c", +4106 => x"6405440b", +4107 => x"0b0bf7b1", +4108 => x"39815360", +4109 => x"527f510b", +4110 => x"0b0bbfab", +4111 => x"3f800867", +4112 => x"53800852", +4113 => x"410b0b80", +4114 => x"c18f3f80", +4115 => x"0880240b", +4116 => x"0b0bfecb", +4117 => x"3880080b", +4118 => x"0b0b0b8c", +4119 => x"38768106", +4120 => x"56750b0b", +4121 => x"0bfeb838", +4122 => x"ff1f7033", +4123 => x"575f75b0", +4124 => x"2e0b0b0b", +4125 => x"0bf23881", +4126 => x"1f5f0b0b", +4127 => x"0bf2c639", +4128 => x"7e7f8105", +4129 => x"71338105", +4130 => x"58405775", +4131 => x"77340b0b", +4132 => x"0bf2b239", +4133 => x"6a633163", +4134 => x"30a73d0c", +4135 => x"4b804f0b", +4136 => x"0b0bdff1", +4137 => x"39a53d08", +4138 => x"5360527f", +4139 => x"510b0b0b", +4140 => x"bcb73f80", +4141 => x"08410b0b", +4142 => x"0bf5c739", +4143 => x"65101010", +4144 => x"0b0b82f2", +4145 => x"d0058411", +4146 => x"08710856", +4147 => x"56b53d08", +4148 => x"b73d0859", +4149 => x"53567653", +4150 => x"64510b0b", +4151 => x"8180be3f", +4152 => x"a83d08aa", +4153 => x"3d0858b5", +4154 => x"3d0c76b6", +4155 => x"3d0c810b", +4156 => x"b93d08bb", +4157 => x"3d085b59", +4158 => x"5c775178", +4159 => x"520b0b81", +4160 => x"bdeb3f80", +4161 => x"08800853", +4162 => x"65525a0b", +4163 => x"0b81bbbd", +4164 => x"3fa83d08", +4165 => x"aa3d0858", +4166 => x"547655b8", +4167 => x"3d08ba3d", +4168 => x"08585276", +4169 => x"536b510b", +4170 => x"0b80febe", +4171 => x"3faa3d08", +4172 => x"ac3d085a", +4173 => x"b93d0c78", +4174 => x"ba3d0cb0", +4175 => x"1a56757f", +4176 => x"70810541", +4177 => x"347b662e", +4178 => x"0b0b0be7", +4179 => x"f038811c", +4180 => x"5c80c882", +4181 => x"0a568076", +4182 => x"5555b83d", +4183 => x"08ba3d08", +4184 => x"58527653", +4185 => x"64510b0b", +4186 => x"80ffb23f", +4187 => x"a83d08aa", +4188 => x"3d0871bb", +4189 => x"3d0c70bc", +4190 => x"3d0c5a58", +4191 => x"0b0b0bfe", +4192 => x"f839ff1f", +4193 => x"7033575f", +4194 => x"75b02e0b", +4195 => x"0b0b0bf2", +4196 => x"38811f5f", +4197 => x"0b0b0bed", +4198 => x"e6396566", +4199 => x"484a80d0", +4200 => x"820a5680", +4201 => x"765555b8", +4202 => x"3d08ba3d", +4203 => x"08585276", +4204 => x"5364510b", +4205 => x"0b80fdb2", +4206 => x"3fa83d08", +4207 => x"aa3d08b6", +4208 => x"3d08b83d", +4209 => x"08715770", +4210 => x"58735572", +4211 => x"565c5a5c", +4212 => x"5a0b0b81", +4213 => x"b3bb3f80", +4214 => x"0b800825", +4215 => x"0b0b0bf1", +4216 => x"8e3879b9", +4217 => x"3d0c7aba", +4218 => x"3d0c6c5f", +4219 => x"b17f7081", +4220 => x"05413462", +4221 => x"8105430b", +4222 => x"0b0befc9", +4223 => x"3988b316", +4224 => x"5c6d0b0b", +4225 => x"0bf1e338", +4226 => x"b60ba83d", +4227 => x"08316b11", +4228 => x"4c640544", +4229 => x"81527f51", +4230 => x"0b0b0bb6", +4231 => x"ba3f8008", +4232 => x"4a0b0b0b", +4233 => x"f1d73976", +4234 => x"b92e0b0b", +4235 => x"0bfae938", +4236 => x"81175675", +4237 => x"7f708105", +4238 => x"41340b0b", +4239 => x"0bef8639", +4240 => x"f83d0d7a", +4241 => x"5877802e", +4242 => x"0b0b0b81", +4243 => x"bd380b0b", +4244 => x"82f4ec08", +4245 => x"54b81408", +4246 => x"802e0b0b", +4247 => x"0b818238", +4248 => x"8c182270", +4249 => x"902b7090", +4250 => x"2c70832a", +4251 => x"81328106", +4252 => x"5c515754", +4253 => x"780b0b0b", +4254 => x"80df3890", +4255 => x"18085776", +4256 => x"802e0b0b", +4257 => x"0b80d238", +4258 => x"77087731", +4259 => x"77790c76", +4260 => x"83067a58", +4261 => x"5555730b", +4262 => x"0b0b0b85", +4263 => x"38941808", +4264 => x"56758819", +4265 => x"0c807525", +4266 => x"0b0b0b0b", +4267 => x"ac387453", +4268 => x"76529c18", +4269 => x"0851a418", +4270 => x"0854732d", +4271 => x"800b8008", +4272 => x"250b0b0b", +4273 => x"80df3880", +4274 => x"08177580", +4275 => x"08315657", +4276 => x"7480240b", +4277 => x"0b0b0bd6", +4278 => x"38800b80", +4279 => x"0c8a3d0d", +4280 => x"0473510b", +4281 => x"0b0b81f7", +4282 => x"3f8c1822", +4283 => x"70902b70", +4284 => x"902c7083", +4285 => x"2a813281", +4286 => x"065c5157", +4287 => x"54780b0b", +4288 => x"0b0bd638", +4289 => x"0b0b0bfe", +4290 => x"f2390b0b", +4291 => x"8184c052", +4292 => x"0b0b82f4", +4293 => x"ec08510b", +4294 => x"0b0b93b4", +4295 => x"3f800880", +4296 => x"0c8a3d0d", +4297 => x"048c1822", +4298 => x"80c00754", +4299 => x"738c1923", +4300 => x"ff0b800c", +4301 => x"8a3d0d04", +4302 => x"70725180", +4303 => x"710c800b", +4304 => x"84120c80", +4305 => x"0b88120c", +4306 => x"028e0522", +4307 => x"8c122302", +4308 => x"9205228e", +4309 => x"1223800b", +4310 => x"90120c80", +4311 => x"0b94120c", +4312 => x"800b9812", +4313 => x"0c709c12", +4314 => x"0c0b0b81", +4315 => x"d7880ba0", +4316 => x"120c0b0b", +4317 => x"81d7dd0b", +4318 => x"a4120c0b", +4319 => x"0b81d8ec", +4320 => x"0ba8120c", +4321 => x"0b0b81d9", +4322 => x"c60bac12", +4323 => x"0c5004fa", +4324 => x"3d0d7970", +4325 => x"80dc298c", +4326 => x"11547a53", +4327 => x"56570b0b", +4328 => x"0b989f3f", +4329 => x"80088008", +4330 => x"55568008", +4331 => x"802e0b0b", +4332 => x"0b0ba538", +4333 => x"80088c05", +4334 => x"54800b80", +4335 => x"080c7680", +4336 => x"0884050c", +4337 => x"73800888", +4338 => x"050c7453", +4339 => x"80527351", +4340 => x"0b0b0baa", +4341 => x"c03f7554", +4342 => x"73800c88", +4343 => x"3d0d04fc", +4344 => x"3d0d760b", +4345 => x"0b818aa8", +4346 => x"0bbc120c", +4347 => x"55810bb8", +4348 => x"160c800b", +4349 => x"84dc160c", +4350 => x"830b84e0", +4351 => x"160c84e8", +4352 => x"1584e416", +4353 => x"0c745480", +4354 => x"53845284", +4355 => x"1508510b", +4356 => x"0b0bfea4", +4357 => x"3f745481", +4358 => x"53895288", +4359 => x"1508510b", +4360 => x"0b0bfe94", +4361 => x"3f745482", +4362 => x"538a528c", +4363 => x"1508510b", +4364 => x"0b0bfe84", +4365 => x"3f863d0d", +4366 => x"04f93d0d", +4367 => x"790b0b82", +4368 => x"f4ec0854", +4369 => x"57b81308", +4370 => x"802e0b0b", +4371 => x"0b80db38", +4372 => x"84dc1356", +4373 => x"88160884", +4374 => x"1708ff05", +4375 => x"55558074", +4376 => x"240b0b0b", +4377 => x"0ba6388c", +4378 => x"15227090", +4379 => x"2b70902c", +4380 => x"51545872", +4381 => x"802e0b0b", +4382 => x"0b80e838", +4383 => x"80dc15ff", +4384 => x"15555573", +4385 => x"80250b0b", +4386 => x"0b0bdc38", +4387 => x"75085372", +4388 => x"802e0b0b", +4389 => x"0b0bab38", +4390 => x"72568816", +4391 => x"08841708", +4392 => x"ff055555", +4393 => x"0b0b0bff", +4394 => x"b5397251", +4395 => x"0b0b0bfe", +4396 => x"ae3f0b0b", +4397 => x"82f4ec08", +4398 => x"84dc0556", +4399 => x"0b0b0bff", +4400 => x"93398452", +4401 => x"76510b0b", +4402 => x"0bfdc43f", +4403 => x"8008760c", +4404 => x"8008802e", +4405 => x"0b0b0b80", +4406 => x"c4388008", +4407 => x"560b0b0b", +4408 => x"ffb83981", +4409 => x"0b8c1623", +4410 => x"72750c72", +4411 => x"88160c72", +4412 => x"84160c72", +4413 => x"90160c72", +4414 => x"94160c72", +4415 => x"98160cff", +4416 => x"0b8e1623", +4417 => x"72b0160c", +4418 => x"72b4160c", +4419 => x"7280c416", +4420 => x"0c7280c8", +4421 => x"160c7480", +4422 => x"0c893d0d", +4423 => x"048c770c", +4424 => x"800b800c", +4425 => x"893d0d04", +4426 => x"70700b0b", +4427 => x"8184c052", +4428 => x"73510b0b", +4429 => x"0b8f993f", +4430 => x"50500470", +4431 => x"0b0b82f4", +4432 => x"ec08510b", +4433 => x"0b0b0be0", +4434 => x"3f5004fb", +4435 => x"3d0d7770", +4436 => x"52560b0b", +4437 => x"0ba8f03f", +4438 => x"0b0b82fc", +4439 => x"c80b8805", +4440 => x"08841108", +4441 => x"fc06707b", +4442 => x"319fef05", +4443 => x"e08006e0", +4444 => x"80055656", +4445 => x"53a08074", +4446 => x"240b0b0b", +4447 => x"0b9d3880", +4448 => x"5275510b", +4449 => x"0b80cbba", +4450 => x"3f0b0b82", +4451 => x"fcd00815", +4452 => x"53728008", +4453 => x"2e0b0b0b", +4454 => x"0b923875", +4455 => x"510b0b0b", +4456 => x"a8a63f80", +4457 => x"5372800c", +4458 => x"873d0d04", +4459 => x"73305275", +4460 => x"510b0b80", +4461 => x"cb8c3f80", +4462 => x"08ff2e0b", +4463 => x"0b0b0bb1", +4464 => x"380b0b82", +4465 => x"fcc80b88", +4466 => x"05087575", +4467 => x"31810784", +4468 => x"120c530b", +4469 => x"0b82fc8c", +4470 => x"0874310b", +4471 => x"0b82fc8c", +4472 => x"0c75510b", +4473 => x"0b0ba7e0", +4474 => x"3f810b80", +4475 => x"0c873d0d", +4476 => x"04805275", +4477 => x"510b0b80", +4478 => x"cac83f0b", +4479 => x"0b82fcc8", +4480 => x"0b880508", +4481 => x"80087131", +4482 => x"56538f75", +4483 => x"250b0b0b", +4484 => x"ff893880", +4485 => x"080b0b82", +4486 => x"fcbc0831", +4487 => x"0b0b82fc", +4488 => x"8c0c7481", +4489 => x"0784140c", +4490 => x"75510b0b", +4491 => x"0ba7993f", +4492 => x"80530b0b", +4493 => x"0bfeee39", +4494 => x"f63d0d7c", +4495 => x"7e545b72", +4496 => x"802e0b0b", +4497 => x"0b82c838", +4498 => x"7a510b0b", +4499 => x"0ba6f83f", +4500 => x"f8138411", +4501 => x"0870fe06", +4502 => x"70138411", +4503 => x"08fc065d", +4504 => x"58595458", +4505 => x"0b0b82fc", +4506 => x"d008752e", +4507 => x"0b0b0b83", +4508 => x"b5387884", +4509 => x"160c8073", +4510 => x"8106545a", +4511 => x"727a2e0b", +4512 => x"0b0b828f", +4513 => x"38781584", +4514 => x"11088106", +4515 => x"5153720b", +4516 => x"0b0b0ba8", +4517 => x"38781757", +4518 => x"790b0b0b", +4519 => x"82a13888", +4520 => x"15085372", +4521 => x"0b0b82fc", +4522 => x"d02e0b0b", +4523 => x"0b83d738", +4524 => x"8c150870", +4525 => x"8c150c73", +4526 => x"88120c56", +4527 => x"76810784", +4528 => x"190c7618", +4529 => x"77710c53", +4530 => x"790b0b0b", +4531 => x"81b93883", +4532 => x"ff77270b", +4533 => x"0b0b81fb", +4534 => x"3876892a", +4535 => x"77832a56", +4536 => x"5372802e", +4537 => x"0b0b0b80", +4538 => x"d3387686", +4539 => x"2ab80555", +4540 => x"8473270b", +4541 => x"0b0b80c4", +4542 => x"3880db13", +4543 => x"55947327", +4544 => x"0b0b0b0b", +4545 => x"b738768c", +4546 => x"2a80ee05", +4547 => x"5580d473", +4548 => x"270b0b0b", +4549 => x"0ba63876", +4550 => x"8f2a80f7", +4551 => x"055582d4", +4552 => x"73270b0b", +4553 => x"0b0b9538", +4554 => x"76922a80", +4555 => x"fc05558a", +4556 => x"d473270b", +4557 => x"0b0b0b84", +4558 => x"3880fe55", +4559 => x"74101010", +4560 => x"0b0b82fc", +4561 => x"c8058811", +4562 => x"08555673", +4563 => x"762e0b0b", +4564 => x"0b82fa38", +4565 => x"841408fc", +4566 => x"06537673", +4567 => x"270b0b0b", +4568 => x"0b913888", +4569 => x"14085473", +4570 => x"762e0981", +4571 => x"060b0b0b", +4572 => x"0be2388c", +4573 => x"1408708c", +4574 => x"1a0c7488", +4575 => x"1a0c7888", +4576 => x"120c5677", +4577 => x"8c150c7a", +4578 => x"510b0b0b", +4579 => x"a4ba3f8c", +4580 => x"3d0d0477", +4581 => x"08787131", +4582 => x"59770588", +4583 => x"19085457", +4584 => x"720b0b82", +4585 => x"fcd02e0b", +4586 => x"0b0b80f2", +4587 => x"388c1808", +4588 => x"708c150c", +4589 => x"7388120c", +4590 => x"560b0b0b", +4591 => x"fdc73988", +4592 => x"15088c16", +4593 => x"08708c13", +4594 => x"0c578817", +4595 => x"0c0b0b0b", +4596 => x"fdea3976", +4597 => x"832a7054", +4598 => x"55807524", +4599 => x"0b0b0b81", +4600 => x"bd387282", +4601 => x"2c81712b", +4602 => x"0b0b82fc", +4603 => x"cc08070b", +4604 => x"0b82fcc8", +4605 => x"0b84050c", +4606 => x"53741010", +4607 => x"100b0b82", +4608 => x"fcc80588", +4609 => x"11085556", +4610 => x"758c190c", +4611 => x"7388190c", +4612 => x"7788170c", +4613 => x"778c150c", +4614 => x"0b0b0bfe", +4615 => x"ea39815a", +4616 => x"0b0b0bfc", +4617 => x"e0397817", +4618 => x"73810654", +4619 => x"57720b0b", +4620 => x"0b0b9838", +4621 => x"77087871", +4622 => x"31597705", +4623 => x"8c190888", +4624 => x"1a08718c", +4625 => x"120c8812", +4626 => x"0c575776", +4627 => x"81078419", +4628 => x"0c770b0b", +4629 => x"82fcc80b", +4630 => x"88050c0b", +4631 => x"0b82fcc4", +4632 => x"0877260b", +4633 => x"0b0bfe9f", +4634 => x"380b0b82", +4635 => x"fcc00852", +4636 => x"7a510b0b", +4637 => x"0bf9d43f", +4638 => x"7a510b0b", +4639 => x"0ba2c93f", +4640 => x"0b0b0bfe", +4641 => x"8a398178", +4642 => x"8c150c78", +4643 => x"88150c73", +4644 => x"8c1a0c73", +4645 => x"881a0c5a", +4646 => x"0b0b0bfc", +4647 => x"9f398315", +4648 => x"70822c81", +4649 => x"712b0b0b", +4650 => x"82fccc08", +4651 => x"070b0b82", +4652 => x"fcc80b84", +4653 => x"050c5153", +4654 => x"74101010", +4655 => x"0b0b82fc", +4656 => x"c8058811", +4657 => x"0855560b", +4658 => x"0b0bfebc", +4659 => x"39745380", +4660 => x"75240b0b", +4661 => x"0b0bae38", +4662 => x"72822c81", +4663 => x"712b0b0b", +4664 => x"82fccc08", +4665 => x"070b0b82", +4666 => x"fcc80b84", +4667 => x"050c5375", +4668 => x"8c190c73", +4669 => x"88190c77", +4670 => x"88170c77", +4671 => x"8c150c0b", +4672 => x"0b0bfd83", +4673 => x"39831570", +4674 => x"822c8171", +4675 => x"2b0b0b82", +4676 => x"fccc0807", +4677 => x"0b0b82fc", +4678 => x"c80b8405", +4679 => x"0c51530b", +4680 => x"0b0b0bcb", +4681 => x"39f23d0d", +4682 => x"60628811", +4683 => x"08705757", +4684 => x"5f5a7480", +4685 => x"2e0b0b0b", +4686 => x"81b3388c", +4687 => x"1a227083", +4688 => x"2a813270", +4689 => x"81065155", +4690 => x"58730b0b", +4691 => x"0b0b8a38", +4692 => x"901a080b", +4693 => x"0b0b0b97", +4694 => x"3879510b", +4695 => x"0b0bc388", +4696 => x"3fff5480", +4697 => x"080b0b0b", +4698 => x"8183388c", +4699 => x"1a22587d", +4700 => x"08578078", +4701 => x"83ffff06", +4702 => x"700a100a", +4703 => x"70810651", +4704 => x"56575573", +4705 => x"752e0b0b", +4706 => x"0b80e938", +4707 => x"740b0b0b", +4708 => x"0b943876", +4709 => x"08841808", +4710 => x"88195956", +4711 => x"5974802e", +4712 => x"0b0b0b0b", +4713 => x"ee387454", +4714 => x"88807527", +4715 => x"0b0b0b0b", +4716 => x"84388880", +4717 => x"54735378", +4718 => x"529c1a08", +4719 => x"51a41a08", +4720 => x"54732d80", +4721 => x"0b800825", +4722 => x"0b0b0b83", +4723 => x"bf388008", +4724 => x"19758008", +4725 => x"317f8805", +4726 => x"08800831", +4727 => x"70618805", +4728 => x"0c565659", +4729 => x"730b0b0b", +4730 => x"ffa23880", +4731 => x"5473800c", +4732 => x"903d0d04", +4733 => x"75813270", +4734 => x"81067641", +4735 => x"51547380", +4736 => x"2e0b0b0b", +4737 => x"81f03874", +4738 => x"0b0b0b0b", +4739 => x"94387608", +4740 => x"84180888", +4741 => x"19595659", +4742 => x"74802e0b", +4743 => x"0b0b0bee", +4744 => x"38881a08", +4745 => x"7883ffff", +4746 => x"0670892a", +4747 => x"70810651", +4748 => x"56595673", +4749 => x"802e0b0b", +4750 => x"0b83e338", +4751 => x"7575270b", +4752 => x"0b0b0b90", +4753 => x"3877872a", +4754 => x"70810651", +4755 => x"54730b0b", +4756 => x"0b838c38", +4757 => x"7476270b", +4758 => x"0b0b0b83", +4759 => x"38745675", +4760 => x"53785279", +4761 => x"08510b0b", +4762 => x"0b9bb83f", +4763 => x"881a0876", +4764 => x"31881b0c", +4765 => x"7908167a", +4766 => x"0c745675", +4767 => x"19757731", +4768 => x"7f880508", +4769 => x"78317061", +4770 => x"88050c56", +4771 => x"56597380", +4772 => x"2e0b0b0b", +4773 => x"fed5388c", +4774 => x"1a22580b", +4775 => x"0b0bfee7", +4776 => x"39777854", +4777 => x"79537b52", +4778 => x"560b0b0b", +4779 => x"9af53f88", +4780 => x"1a087831", +4781 => x"881b0c79", +4782 => x"08187a0c", +4783 => x"7c76315d", +4784 => x"7c0b0b0b", +4785 => x"0b943879", +4786 => x"510b0b0b", +4787 => x"eef23f80", +4788 => x"080b0b0b", +4789 => x"81b63880", +4790 => x"085f7519", +4791 => x"7577317f", +4792 => x"88050878", +4793 => x"31706188", +4794 => x"050c5656", +4795 => x"5973802e", +4796 => x"0b0b0bfd", +4797 => x"f638740b", +4798 => x"0b0b81a4", +4799 => x"38760884", +4800 => x"18088819", +4801 => x"59565974", +4802 => x"802e0b0b", +4803 => x"0b0bee38", +4804 => x"74538a52", +4805 => x"78510b0b", +4806 => x"0b98bb3f", +4807 => x"80087931", +4808 => x"81055d80", +4809 => x"080b0b0b", +4810 => x"0b843881", +4811 => x"155d815f", +4812 => x"7c58747d", +4813 => x"270b0b0b", +4814 => x"0b833874", +4815 => x"58941a08", +4816 => x"881b0811", +4817 => x"575c807a", +4818 => x"085c5490", +4819 => x"1a087b27", +4820 => x"0b0b0b0b", +4821 => x"83388154", +4822 => x"7578250b", +4823 => x"0b0b0b88", +4824 => x"38730b0b", +4825 => x"0b80c638", +4826 => x"7b78240b", +4827 => x"0b0bfeb1", +4828 => x"387b5378", +4829 => x"529c1a08", +4830 => x"51a41a08", +4831 => x"54732d80", +4832 => x"08568008", +4833 => x"80240b0b", +4834 => x"0bfeb138", +4835 => x"8c1a2280", +4836 => x"c0075473", +4837 => x"8c1b23ff", +4838 => x"5473800c", +4839 => x"903d0d04", +4840 => x"7e0b0b0b", +4841 => x"ff8a380b", +4842 => x"0b0bfee4", +4843 => x"39755378", +4844 => x"527a510b", +4845 => x"0b0b98eb", +4846 => x"3f790816", +4847 => x"7a0c7951", +4848 => x"0b0b0bec", +4849 => x"fb3f8008", +4850 => x"0b0b0bff", +4851 => x"bf387c76", +4852 => x"315d7c0b", +4853 => x"0b0bfe82", +4854 => x"380b0b0b", +4855 => x"fde93990", +4856 => x"1a087a08", +4857 => x"71317611", +4858 => x"70565a57", +4859 => x"520b0b82", +4860 => x"f4ec0851", +4861 => x"0b0b0bb4", +4862 => x"ad3f8008", +4863 => x"802e0b0b", +4864 => x"0bff8938", +4865 => x"8008901b", +4866 => x"0c800816", +4867 => x"7a0c7794", +4868 => x"1b0c7488", +4869 => x"1b0c7456", +4870 => x"0b0b0bfc", +4871 => x"b7397908", +4872 => x"58901a08", +4873 => x"78270b0b", +4874 => x"0b0b8338", +4875 => x"81547575", +4876 => x"270b0b0b", +4877 => x"0b883873", +4878 => x"0b0b0b0b", +4879 => x"bc38941a", +4880 => x"08567575", +4881 => x"260b0b0b", +4882 => x"80e53875", +4883 => x"5378529c", +4884 => x"1a0851a4", +4885 => x"1a085473", +4886 => x"2d800856", +4887 => x"80088024", +4888 => x"0b0b0bfc", +4889 => x"96388c1a", +4890 => x"2280c007", +4891 => x"54738c1b", +4892 => x"23ff540b", +4893 => x"0b0bfea1", +4894 => x"39755378", +4895 => x"5277510b", +4896 => x"0b0b979f", +4897 => x"3f790816", +4898 => x"7a0c7951", +4899 => x"0b0b0beb", +4900 => x"af3f8008", +4901 => x"802e0b0b", +4902 => x"0bfbe038", +4903 => x"8c1a2280", +4904 => x"c0075473", +4905 => x"8c1b23ff", +4906 => x"540b0b0b", +4907 => x"fdeb3974", +4908 => x"75547953", +4909 => x"7852560b", +4910 => x"0b0b96e7", +4911 => x"3f881a08", +4912 => x"7531881b", +4913 => x"0c790815", +4914 => x"7a0c0b0b", +4915 => x"0bfbac39", +4916 => x"f93d0d79", +4917 => x"7b585380", +4918 => x"0b0b0b82", +4919 => x"f4ec0853", +4920 => x"5672722e", +4921 => x"0b0b0b80", +4922 => x"d53884dc", +4923 => x"13557476", +4924 => x"2e0b0b0b", +4925 => x"80c83888", +4926 => x"15088416", +4927 => x"08ff0554", +4928 => x"54807324", +4929 => x"0b0b0b0b", +4930 => x"a4388c14", +4931 => x"2270902b", +4932 => x"70902c51", +4933 => x"5358710b", +4934 => x"0b0b80f6", +4935 => x"3880dc14", +4936 => x"ff145454", +4937 => x"7280250b", +4938 => x"0b0b0bde", +4939 => x"38740855", +4940 => x"740b0b0b", +4941 => x"0bc1380b", +4942 => x"0b82f4ec", +4943 => x"085284dc", +4944 => x"12557480", +4945 => x"2e0b0b0b", +4946 => x"80c13888", +4947 => x"15088416", +4948 => x"08ff0554", +4949 => x"54807324", +4950 => x"0b0b0b0b", +4951 => x"a4388c14", +4952 => x"2270902b", +4953 => x"70902c51", +4954 => x"5358710b", +4955 => x"0b0b0bb8", +4956 => x"3880dc14", +4957 => x"ff145454", +4958 => x"7280250b", +4959 => x"0b0b0bde", +4960 => x"38740855", +4961 => x"740b0b0b", +4962 => x"0bc13875", +4963 => x"800c893d", +4964 => x"0d047351", +4965 => x"762d7580", +4966 => x"080780dc", +4967 => x"15ff1555", +4968 => x"55560b0b", +4969 => x"0bfefd39", +4970 => x"7351762d", +4971 => x"75800807", +4972 => x"80dc15ff", +4973 => x"15555556", +4974 => x"0b0b0bff", +4975 => x"bb39fc3d", +4976 => x"0d767955", +4977 => x"5573802e", +4978 => x"0b0b0b0b", +4979 => x"9f380b0b", +4980 => x"82f1c852", +4981 => x"73510b0b", +4982 => x"0bbe8d3f", +4983 => x"80080b0b", +4984 => x"0b0b9638", +4985 => x"77b0160c", +4986 => x"73b4160c", +4987 => x"0b0b82f1", +4988 => x"c8537280", +4989 => x"0c863d0d", +4990 => x"040b0b82", +4991 => x"f0ec5273", +4992 => x"510b0b0b", +4993 => x"bde23f80", +4994 => x"53800873", +4995 => x"2e098106", +4996 => x"0b0b0b0b", +4997 => x"dd3877b0", +4998 => x"160c73b4", +4999 => x"160c0b0b", +5000 => x"0b0bc939", +5001 => x"0b0b82fc", +5002 => x"8808800c", +5003 => x"040b0b82", +5004 => x"f1d80b80", +5005 => x"0c047070", +5006 => x"70755374", +5007 => x"520b0b82", +5008 => x"f4ec0851", +5009 => x"0b0b0bfe", +5010 => x"f53f5050", +5011 => x"5004700b", +5012 => x"0b82f4ec", +5013 => x"08510b0b", +5014 => x"0b0bd23f", +5015 => x"5004ea3d", +5016 => x"0d688c11", +5017 => x"22700a10", +5018 => x"0a810657", +5019 => x"5856740b", +5020 => x"0b0b8180", +5021 => x"388e1622", +5022 => x"70902b70", +5023 => x"902c5155", +5024 => x"58807424", +5025 => x"0b0b0b80", +5026 => x"c038983d", +5027 => x"c4055373", +5028 => x"520b0b82", +5029 => x"f4ec0851", +5030 => x"0b0b80c1", +5031 => x"ac3f800b", +5032 => x"8008240b", +5033 => x"0b0b0b9d", +5034 => x"387983e0", +5035 => x"80065473", +5036 => x"80c0802e", +5037 => x"0b0b0b81", +5038 => x"aa387382", +5039 => x"80802e0b", +5040 => x"0b0b81ac", +5041 => x"388c1622", +5042 => x"57769080", +5043 => x"0754738c", +5044 => x"17238880", +5045 => x"520b0b82", +5046 => x"f4ec0851", +5047 => x"0b0b0b81", +5048 => x"e13f8008", +5049 => x"0b0b0b0b", +5050 => x"9d388c16", +5051 => x"22820754", +5052 => x"738c1723", +5053 => x"80c31670", +5054 => x"770c9017", +5055 => x"0c810b94", +5056 => x"170c983d", +5057 => x"0d040b0b", +5058 => x"82f4ec08", +5059 => x"0b0b818a", +5060 => x"a80bbc12", +5061 => x"0c548c16", +5062 => x"22818007", +5063 => x"54738c17", +5064 => x"23800876", +5065 => x"0c800890", +5066 => x"170c8880", +5067 => x"0b94170c", +5068 => x"74802e0b", +5069 => x"0b0b0bca", +5070 => x"388e1622", +5071 => x"70902b70", +5072 => x"902c5355", +5073 => x"580b0b80", +5074 => x"ced33f80", +5075 => x"08802e0b", +5076 => x"0b0bffae", +5077 => x"388c1622", +5078 => x"81075473", +5079 => x"8c172398", +5080 => x"3d0d0481", +5081 => x"0b8c1722", +5082 => x"58550b0b", +5083 => x"0bfeda39", +5084 => x"a816080b", +5085 => x"0b81d8ec", +5086 => x"2e098106", +5087 => x"0b0b0bfe", +5088 => x"c4388c16", +5089 => x"22888007", +5090 => x"54738c17", +5091 => x"2388800b", +5092 => x"80cc170c", +5093 => x"0b0b0bfe", +5094 => x"b9397070", +5095 => x"73520b0b", +5096 => x"82f4ec08", +5097 => x"510b0b0b", +5098 => x"0b983f50", +5099 => x"50047070", +5100 => x"73520b0b", +5101 => x"82f4ec08", +5102 => x"510b0b0b", +5103 => x"ecfa3f50", +5104 => x"5004f33d", +5105 => x"0d7f618b", +5106 => x"1170f806", +5107 => x"5c55555e", +5108 => x"7296260b", +5109 => x"0b0b0b83", +5110 => x"38905980", +5111 => x"7924747a", +5112 => x"26075380", +5113 => x"5472742e", +5114 => x"0981060b", +5115 => x"0b0b80d9", +5116 => x"387d510b", +5117 => x"0b0b93cf", +5118 => x"3f7883f7", +5119 => x"260b0b0b", +5120 => x"80ce3878", +5121 => x"832a7010", +5122 => x"10100b0b", +5123 => x"82fcc805", +5124 => x"8c110859", +5125 => x"595a7678", +5126 => x"2e0b0b0b", +5127 => x"84aa3884", +5128 => x"1708fc06", +5129 => x"568c1708", +5130 => x"88180871", +5131 => x"8c120c88", +5132 => x"120c5875", +5133 => x"17841108", +5134 => x"81078412", +5135 => x"0c537d51", +5136 => x"0b0b0b93", +5137 => x"833f8817", +5138 => x"5473800c", +5139 => x"8f3d0d04", +5140 => x"78892a79", +5141 => x"832a5b53", +5142 => x"72802e0b", +5143 => x"0b0b80d3", +5144 => x"3878862a", +5145 => x"b8055a84", +5146 => x"73270b0b", +5147 => x"0b80c438", +5148 => x"80db135a", +5149 => x"9473270b", +5150 => x"0b0b0bb7", +5151 => x"38788c2a", +5152 => x"80ee055a", +5153 => x"80d47327", +5154 => x"0b0b0b0b", +5155 => x"a638788f", +5156 => x"2a80f705", +5157 => x"5a82d473", +5158 => x"270b0b0b", +5159 => x"0b953878", +5160 => x"922a80fc", +5161 => x"055a8ad4", +5162 => x"73270b0b", +5163 => x"0b0b8438", +5164 => x"80fe5a79", +5165 => x"1010100b", +5166 => x"0b82fcc8", +5167 => x"058c1108", +5168 => x"58557675", +5169 => x"2e0b0b0b", +5170 => x"0bad3884", +5171 => x"1708fc06", +5172 => x"707a3155", +5173 => x"56738f24", +5174 => x"0b0b0b8b", +5175 => x"94387380", +5176 => x"250b0b0b", +5177 => x"febf388c", +5178 => x"17085776", +5179 => x"752e0981", +5180 => x"060b0b0b", +5181 => x"0bd53881", +5182 => x"1a5a0b0b", +5183 => x"82fcd808", +5184 => x"57760b0b", +5185 => x"82fcd02e", +5186 => x"0b0b0b83", +5187 => x"9a388417", +5188 => x"08fc0670", +5189 => x"7a315556", +5190 => x"738f240b", +5191 => x"0b0b82c4", +5192 => x"380b0b82", +5193 => x"fcd00b0b", +5194 => x"0b82fcdc", +5195 => x"0c0b0b82", +5196 => x"fcd00b0b", +5197 => x"0b82fcd8", +5198 => x"0c738025", +5199 => x"0b0b0bfd", +5200 => x"f23883ff", +5201 => x"76270b0b", +5202 => x"0b84e238", +5203 => x"75892a76", +5204 => x"832a5553", +5205 => x"72802e0b", +5206 => x"0b0b80d3", +5207 => x"3875862a", +5208 => x"b8055484", +5209 => x"73270b0b", +5210 => x"0b80c438", +5211 => x"80db1354", +5212 => x"9473270b", +5213 => x"0b0b0bb7", +5214 => x"38758c2a", +5215 => x"80ee0554", +5216 => x"80d47327", +5217 => x"0b0b0b0b", +5218 => x"a638758f", +5219 => x"2a80f705", +5220 => x"5482d473", +5221 => x"270b0b0b", +5222 => x"0b953875", +5223 => x"922a80fc", +5224 => x"05548ad4", +5225 => x"73270b0b", +5226 => x"0b0b8438", +5227 => x"80fe5473", +5228 => x"1010100b", +5229 => x"0b82fcc8", +5230 => x"05881108", +5231 => x"56587478", +5232 => x"2e0b0b0b", +5233 => x"88b83884", +5234 => x"1508fc06", +5235 => x"53757327", +5236 => x"0b0b0b0b", +5237 => x"91388815", +5238 => x"08557478", +5239 => x"2e098106", +5240 => x"0b0b0b0b", +5241 => x"e2388c15", +5242 => x"080b0b82", +5243 => x"fcc80b84", +5244 => x"0508718c", +5245 => x"1a0c7688", +5246 => x"1a0c7888", +5247 => x"130c788c", +5248 => x"180c5d58", +5249 => x"7953807a", +5250 => x"240b0b0b", +5251 => x"84e93872", +5252 => x"822c8171", +5253 => x"2b5c537a", +5254 => x"7c260b0b", +5255 => x"0b81c538", +5256 => x"7b7b0653", +5257 => x"720b0b0b", +5258 => x"83d03879", +5259 => x"fc068405", +5260 => x"5a7a1070", +5261 => x"7d06545b", +5262 => x"720b0b0b", +5263 => x"83bc3884", +5264 => x"1a5a0b0b", +5265 => x"0b0bea39", +5266 => x"88178c11", +5267 => x"08585876", +5268 => x"782e0981", +5269 => x"060b0b0b", +5270 => x"fbc53882", +5271 => x"1a5a0b0b", +5272 => x"0bfd9739", +5273 => x"78177981", +5274 => x"0784190c", +5275 => x"700b0b82", +5276 => x"fcdc0c70", +5277 => x"0b0b82fc", +5278 => x"d80c0b0b", +5279 => x"82fcd00b", +5280 => x"8c120c8c", +5281 => x"11088812", +5282 => x"0c748107", +5283 => x"84120c74", +5284 => x"1175710c", +5285 => x"51537d51", +5286 => x"0b0b0b8e", +5287 => x"ab3f8817", +5288 => x"540b0b0b", +5289 => x"fba3390b", +5290 => x"0b82fcc8", +5291 => x"0b840508", +5292 => x"7a545c79", +5293 => x"80250b0b", +5294 => x"0bfed438", +5295 => x"0b0b0b83", +5296 => x"b6397a09", +5297 => x"7c06700b", +5298 => x"0b82fcc8", +5299 => x"0b84050c", +5300 => x"5c7a105b", +5301 => x"7a7c260b", +5302 => x"0b0b0b88", +5303 => x"387a0b0b", +5304 => x"0b86f738", +5305 => x"0b0b82fc", +5306 => x"c80b8805", +5307 => x"08708412", +5308 => x"08fc0670", +5309 => x"7c317c72", +5310 => x"268f7225", +5311 => x"0757575c", +5312 => x"5d557280", +5313 => x"2e0b0b0b", +5314 => x"80f73879", +5315 => x"7a160b0b", +5316 => x"82fcc008", +5317 => x"1b90115a", +5318 => x"55575b0b", +5319 => x"0b82fcbc", +5320 => x"08ff2e0b", +5321 => x"0b0b0b88", +5322 => x"38a08f13", +5323 => x"e0800657", +5324 => x"76527d51", +5325 => x"0b0b0bb0", +5326 => x"893f8008", +5327 => x"548008ff", +5328 => x"2e0b0b0b", +5329 => x"0b983880", +5330 => x"0876270b", +5331 => x"0b0b82e1", +5332 => x"38740b0b", +5333 => x"82fcc82e", +5334 => x"0b0b0b82", +5335 => x"d4380b0b", +5336 => x"82fcc80b", +5337 => x"88050855", +5338 => x"841508fc", +5339 => x"06707a31", +5340 => x"7a72268f", +5341 => x"72250752", +5342 => x"5553720b", +5343 => x"0b0b84ee", +5344 => x"38747981", +5345 => x"0784170c", +5346 => x"7916700b", +5347 => x"0b82fcc8", +5348 => x"0b88050c", +5349 => x"75810784", +5350 => x"120c547e", +5351 => x"52570b0b", +5352 => x"0b8ca53f", +5353 => x"8817540b", +5354 => x"0b0bf99d", +5355 => x"3975832a", +5356 => x"70545480", +5357 => x"74240b0b", +5358 => x"0b81c538", +5359 => x"72822c81", +5360 => x"712b0b0b", +5361 => x"82fccc08", +5362 => x"07700b0b", +5363 => x"82fcc80b", +5364 => x"84050c75", +5365 => x"1010100b", +5366 => x"0b82fcc8", +5367 => x"05881108", +5368 => x"585a5d53", +5369 => x"778c180c", +5370 => x"7488180c", +5371 => x"7688190c", +5372 => x"768c160c", +5373 => x"0b0b0bfc", +5374 => x"8b39797a", +5375 => x"1010100b", +5376 => x"0b82fcc8", +5377 => x"05705759", +5378 => x"5d8c1508", +5379 => x"5776752e", +5380 => x"0b0b0b0b", +5381 => x"ad388417", +5382 => x"08fc0670", +5383 => x"7a315556", +5384 => x"738f240b", +5385 => x"0b0b84d5", +5386 => x"38738025", +5387 => x"0b0b0b85", +5388 => x"92388c17", +5389 => x"08577675", +5390 => x"2e098106", +5391 => x"0b0b0b0b", +5392 => x"d5388815", +5393 => x"811b7083", +5394 => x"06555b55", +5395 => x"720b0b0b", +5396 => x"ffb7387c", +5397 => x"83065372", +5398 => x"802e0b0b", +5399 => x"0bfce338", +5400 => x"ff1df819", +5401 => x"595d8818", +5402 => x"08782e0b", +5403 => x"0b0b0be3", +5404 => x"380b0b0b", +5405 => x"fcdb3983", +5406 => x"1a530b0b", +5407 => x"0bfb9039", +5408 => x"83147082", +5409 => x"2c81712b", +5410 => x"0b0b82fc", +5411 => x"cc080770", +5412 => x"0b0b82fc", +5413 => x"c80b8405", +5414 => x"0c761010", +5415 => x"100b0b82", +5416 => x"fcc80588", +5417 => x"1108595b", +5418 => x"5e51530b", +5419 => x"0b0bfeb4", +5420 => x"390b0b82", +5421 => x"fc8c0817", +5422 => x"58800876", +5423 => x"2e0b0b0b", +5424 => x"81b2380b", +5425 => x"0b82fcbc", +5426 => x"08ff2e0b", +5427 => x"0b0b84e8", +5428 => x"38737631", +5429 => x"180b0b82", +5430 => x"fc8c0c73", +5431 => x"87067057", +5432 => x"5372802e", +5433 => x"0b0b0b0b", +5434 => x"88388873", +5435 => x"31701555", +5436 => x"5676149f", +5437 => x"ff06a080", +5438 => x"71311770", +5439 => x"547f5357", +5440 => x"530b0b0b", +5441 => x"acbc3f80", +5442 => x"08538008", +5443 => x"ff2e0b0b", +5444 => x"0b81d138", +5445 => x"0b0b82fc", +5446 => x"8c081670", +5447 => x"0b0b82fc", +5448 => x"8c0c7475", +5449 => x"0b0b82fc", +5450 => x"c80b8805", +5451 => x"0c747631", +5452 => x"18708107", +5453 => x"51555658", +5454 => x"7b0b0b82", +5455 => x"fcc82e0b", +5456 => x"0b0b8488", +5457 => x"38798f26", +5458 => x"0b0b0b83", +5459 => x"a038810b", +5460 => x"84150c84", +5461 => x"1508fc06", +5462 => x"707a317a", +5463 => x"72268f72", +5464 => x"25075255", +5465 => x"5372802e", +5466 => x"0b0b0bfc", +5467 => x"94380b0b", +5468 => x"0b80fb39", +5469 => x"80089fff", +5470 => x"0653720b", +5471 => x"0b0bfec3", +5472 => x"38770b0b", +5473 => x"82fc8c0c", +5474 => x"0b0b82fc", +5475 => x"c80b8805", +5476 => x"087b1881", +5477 => x"0784120c", +5478 => x"550b0b82", +5479 => x"fcb80878", +5480 => x"270b0b0b", +5481 => x"0b883877", +5482 => x"0b0b82fc", +5483 => x"b80c0b0b", +5484 => x"82fcb408", +5485 => x"78270b0b", +5486 => x"0bfbad38", +5487 => x"770b0b82", +5488 => x"fcb40c84", +5489 => x"1508fc06", +5490 => x"707a317a", +5491 => x"72268f72", +5492 => x"25075255", +5493 => x"5372802e", +5494 => x"0b0b0bfb", +5495 => x"a4380b0b", +5496 => x"0b0b8b39", +5497 => x"80745456", +5498 => x"0b0b0bfe", +5499 => x"a7397d51", +5500 => x"0b0b0b87", +5501 => x"d33f800b", +5502 => x"800c8f3d", +5503 => x"0d047353", +5504 => x"8074240b", +5505 => x"0b0b0bb0", +5506 => x"3872822c", +5507 => x"81712b0b", +5508 => x"0b82fccc", +5509 => x"0807700b", +5510 => x"0b82fcc8", +5511 => x"0b84050c", +5512 => x"5d53778c", +5513 => x"180c7488", +5514 => x"180c7688", +5515 => x"190c768c", +5516 => x"160c0b0b", +5517 => x"0bf7cd39", +5518 => x"83147082", +5519 => x"2c81712b", +5520 => x"0b0b82fc", +5521 => x"cc080770", +5522 => x"0b0b82fc", +5523 => x"c80b8405", +5524 => x"0c5e5153", +5525 => x"0b0b0b0b", +5526 => x"c9397b7b", +5527 => x"0653720b", +5528 => x"0b0bfb96", +5529 => x"38841a7b", +5530 => x"105c5a0b", +5531 => x"0b0b0bea", +5532 => x"39ff1a81", +5533 => x"11515a0b", +5534 => x"0b0bf4fe", +5535 => x"39781779", +5536 => x"81078419", +5537 => x"0c8c1808", +5538 => x"88190871", +5539 => x"8c120c88", +5540 => x"120c5970", +5541 => x"0b0b82fc", +5542 => x"dc0c700b", +5543 => x"0b82fcd8", +5544 => x"0c0b0b82", +5545 => x"fcd00b8c", +5546 => x"120c8c11", +5547 => x"0888120c", +5548 => x"74810784", +5549 => x"120c7411", +5550 => x"75710c51", +5551 => x"530b0b0b", +5552 => x"f7d43975", +5553 => x"17841108", +5554 => x"81078412", +5555 => x"0c538c17", +5556 => x"08881808", +5557 => x"718c120c", +5558 => x"88120c58", +5559 => x"7d510b0b", +5560 => x"0b85e53f", +5561 => x"8817540b", +5562 => x"0b0bf2dd", +5563 => x"39728415", +5564 => x"0cf41af8", +5565 => x"0670841e", +5566 => x"08810607", +5567 => x"841e0c70", +5568 => x"1d545b85", +5569 => x"0b84140c", +5570 => x"850b8814", +5571 => x"0c8f7b27", +5572 => x"0b0b0bfd", +5573 => x"8438881c", +5574 => x"527d510b", +5575 => x"0b0bde98", +5576 => x"3f0b0b82", +5577 => x"fcc80b88", +5578 => x"05080b0b", +5579 => x"82fc8c08", +5580 => x"59550b0b", +5581 => x"0bfce239", +5582 => x"770b0b82", +5583 => x"fc8c0c73", +5584 => x"0b0b82fc", +5585 => x"bc0c0b0b", +5586 => x"0bfb9039", +5587 => x"7284150c", +5588 => x"0b0b0bfc", +5589 => x"c439fa3d", +5590 => x"0d7a7902", +5591 => x"8805a705", +5592 => x"33565253", +5593 => x"8373270b", +5594 => x"0b0b0b8e", +5595 => x"38708306", +5596 => x"5271802e", +5597 => x"0b0b0b0b", +5598 => x"b438ff13", +5599 => x"5372ff2e", +5600 => x"0b0b0b0b", +5601 => x"9f387033", +5602 => x"5273722e", +5603 => x"0b0b0b0b", +5604 => x"95388111", +5605 => x"ff145451", +5606 => x"72ff2e09", +5607 => x"81060b0b", +5608 => x"0b0be338", +5609 => x"80517080", +5610 => x"0c883d0d", +5611 => x"04707257", +5612 => x"55835175", +5613 => x"82802914", +5614 => x"ff125256", +5615 => x"7080250b", +5616 => x"0b0b0bef", +5617 => x"38837327", +5618 => x"0b0b0b80", +5619 => x"ce387408", +5620 => x"76327009", +5621 => x"f7fbfdff", +5622 => x"120670f8", +5623 => x"84828180", +5624 => x"06515151", +5625 => x"70802e0b", +5626 => x"0b0b0ba0", +5627 => x"38745180", +5628 => x"52703357", +5629 => x"73772e0b", +5630 => x"0b0bffaa", +5631 => x"38811181", +5632 => x"13535183", +5633 => x"72270b0b", +5634 => x"0b0be638", +5635 => x"fc138416", +5636 => x"56537283", +5637 => x"260b0b0b", +5638 => x"ffb43874", +5639 => x"510b0b0b", +5640 => x"fed839fa", +5641 => x"3d0d787a", +5642 => x"7c727272", +5643 => x"57575759", +5644 => x"56567476", +5645 => x"270b0b0b", +5646 => x"0bbe3876", +5647 => x"15517571", +5648 => x"270b0b0b", +5649 => x"0bb23870", +5650 => x"7717ff14", +5651 => x"54555371", +5652 => x"ff2e0b0b", +5653 => x"0b0b9a38", +5654 => x"ff14ff14", +5655 => x"54547233", +5656 => x"7434ff12", +5657 => x"5271ff2e", +5658 => x"0981060b", +5659 => x"0b0b0be8", +5660 => x"3875800c", +5661 => x"883d0d04", +5662 => x"768f260b", +5663 => x"0b0b0b9f", +5664 => x"38ff1252", +5665 => x"71ff2e0b", +5666 => x"0b0b0be5", +5667 => x"38727081", +5668 => x"05543374", +5669 => x"70810556", +5670 => x"340b0b0b", +5671 => x"0be33974", +5672 => x"76078306", +5673 => x"51700b0b", +5674 => x"0b0bd638", +5675 => x"75755451", +5676 => x"72708405", +5677 => x"54087170", +5678 => x"8405530c", +5679 => x"72708405", +5680 => x"54087170", +5681 => x"8405530c", +5682 => x"72708405", +5683 => x"54087170", +5684 => x"8405530c", +5685 => x"72708405", +5686 => x"54087170", +5687 => x"8405530c", +5688 => x"f0125271", +5689 => x"8f260b0b", +5690 => x"0b0bc538", +5691 => x"8372270b", +5692 => x"0b0b0b99", +5693 => x"38727084", +5694 => x"05540871", +5695 => x"70840553", +5696 => x"0cfc1252", +5697 => x"7183260b", +5698 => x"0b0b0be9", +5699 => x"3870540b", +5700 => x"0b0bfeed", +5701 => x"39fc3d0d", +5702 => x"76797102", +5703 => x"8c059f05", +5704 => x"33575553", +5705 => x"55837227", +5706 => x"0b0b0b0b", +5707 => x"8e387483", +5708 => x"06517080", +5709 => x"2e0b0b0b", +5710 => x"0baa38ff", +5711 => x"125271ff", +5712 => x"2e0b0b0b", +5713 => x"0b973873", +5714 => x"73708105", +5715 => x"5534ff12", +5716 => x"5271ff2e", +5717 => x"0981060b", +5718 => x"0b0b0beb", +5719 => x"3874800c", +5720 => x"863d0d04", +5721 => x"7474882b", +5722 => x"75077071", +5723 => x"902b0751", +5724 => x"54518f72", +5725 => x"270b0b0b", +5726 => x"0ba93872", +5727 => x"71708405", +5728 => x"530c7271", +5729 => x"70840553", +5730 => x"0c727170", +5731 => x"8405530c", +5732 => x"72717084", +5733 => x"05530cf0", +5734 => x"1252718f", +5735 => x"260b0b0b", +5736 => x"0bd93883", +5737 => x"72270b0b", +5738 => x"0b0b9438", +5739 => x"72717084", +5740 => x"05530cfc", +5741 => x"12527183", +5742 => x"260b0b0b", +5743 => x"0bee3870", +5744 => x"530b0b0b", +5745 => x"fef53904", +5746 => x"04f93d0d", +5747 => x"797b80cc", +5748 => x"12085658", +5749 => x"5673802e", +5750 => x"0b0b0b0b", +5751 => x"a9387610", +5752 => x"10147008", +5753 => x"55557380", +5754 => x"2e0b0b0b", +5755 => x"80c03873", +5756 => x"08750c80", +5757 => x"0b90150c", +5758 => x"800b8c15", +5759 => x"0c735574", +5760 => x"800c893d", +5761 => x"0d049053", +5762 => x"84527551", +5763 => x"0b0b0ba8", +5764 => x"c63f8008", +5765 => x"80cc170c", +5766 => x"80085580", +5767 => x"08802e0b", +5768 => x"0b0b0bdb", +5769 => x"38800854", +5770 => x"0b0b0bff", +5771 => x"b1398177", +5772 => x"2b701010", +5773 => x"94055458", +5774 => x"81527551", +5775 => x"0b0b0ba8", +5776 => x"963f8008", +5777 => x"80085654", +5778 => x"8008802e", +5779 => x"0b0b0bff", +5780 => x"ae387680", +5781 => x"0884050c", +5782 => x"77800888", +5783 => x"050c800b", +5784 => x"90150c80", +5785 => x"0b8c150c", +5786 => x"73550b0b", +5787 => x"0bff9039", +5788 => x"70707452", +5789 => x"71802e0b", +5790 => x"0b0b0b95", +5791 => x"38738413", +5792 => x"08101080", +5793 => x"cc120805", +5794 => x"7008740c", +5795 => x"73710c51", +5796 => x"51505004", +5797 => x"f53d0d7d", +5798 => x"7f616390", +5799 => x"13089414", +5800 => x"5b5d5b5c", +5801 => x"5c5c8057", +5802 => x"8216227a", +5803 => x"71291977", +5804 => x"227c7129", +5805 => x"72902a05", +5806 => x"70902a73", +5807 => x"83ffff06", +5808 => x"72848080", +5809 => x"29057b70", +5810 => x"84055d0c", +5811 => x"811c5c52", +5812 => x"535a5555", +5813 => x"7877240b", +5814 => x"0b0b0bcc", +5815 => x"3877802e", +5816 => x"0b0b0b0b", +5817 => x"9a387888", +5818 => x"1c08250b", +5819 => x"0b0b0b96", +5820 => x"38781010", +5821 => x"1b789412", +5822 => x"0c548119", +5823 => x"901c0c7a", +5824 => x"800c8d3d", +5825 => x"0d04841b", +5826 => x"08810552", +5827 => x"7b510b0b", +5828 => x"0bfdb63f", +5829 => x"8008901c", +5830 => x"08101088", +5831 => x"05548c1c", +5832 => x"5380088c", +5833 => x"0552540b", +5834 => x"0bfedcdf", +5835 => x"3f7a527b", +5836 => x"510b0b0b", +5837 => x"feba3f73", +5838 => x"79101011", +5839 => x"7994120c", +5840 => x"55811a90", +5841 => x"120c5b0b", +5842 => x"0b0bffb3", +5843 => x"39f63d0d", +5844 => x"7c7e6062", +5845 => x"890b8812", +5846 => x"355b5e5c", +5847 => x"59598056", +5848 => x"81557477", +5849 => x"250b0b0b", +5850 => x"0b903874", +5851 => x"10811757", +5852 => x"55767524", +5853 => x"0b0b0b0b", +5854 => x"f2387552", +5855 => x"78510b0b", +5856 => x"0bfcc63f", +5857 => x"80086180", +5858 => x"0894050c", +5859 => x"56810b80", +5860 => x"0890050c", +5861 => x"8957767a", +5862 => x"250b0b0b", +5863 => x"80e13876", +5864 => x"18587770", +5865 => x"81055933", +5866 => x"d005548a", +5867 => x"53755278", +5868 => x"510b0b0b", +5869 => x"fdde3f80", +5870 => x"08811858", +5871 => x"56797724", +5872 => x"0b0b0b0b", +5873 => x"dd388118", +5874 => x"58767b25", +5875 => x"0b0b0b0b", +5876 => x"a7387a77", +5877 => x"31577770", +5878 => x"81055933", +5879 => x"d005548a", +5880 => x"53755278", +5881 => x"510b0b0b", +5882 => x"fdaa3f80", +5883 => x"08ff1858", +5884 => x"56760b0b", +5885 => x"0b0bdf38", +5886 => x"75800c8c", +5887 => x"3d0d048a", +5888 => x"18580b0b", +5889 => x"0b0bc239", +5890 => x"70707074", +5891 => x"528072fc", +5892 => x"80800652", +5893 => x"5370732e", +5894 => x"0981060b", +5895 => x"0b0b0b87", +5896 => x"38907271", +5897 => x"2b535371", +5898 => x"81ff0a06", +5899 => x"51700b0b", +5900 => x"0b0b8838", +5901 => x"88137288", +5902 => x"2b535371", +5903 => x"8f0a0651", +5904 => x"700b0b0b", +5905 => x"0b883884", +5906 => x"1372842b", +5907 => x"53537183", +5908 => x"0a065170", +5909 => x"0b0b0b0b", +5910 => x"88388213", +5911 => x"72822b53", +5912 => x"53807224", +5913 => x"0b0b0b0b", +5914 => x"97388113", +5915 => x"729e2a70", +5916 => x"81065152", +5917 => x"53a05270", +5918 => x"802e0b0b", +5919 => x"0b0b8338", +5920 => x"72527180", +5921 => x"0c505050", +5922 => x"04fc3d0d", +5923 => x"76700870", +5924 => x"87065353", +5925 => x"5570802e", +5926 => x"0b0b0b0b", +5927 => x"b1387181", +5928 => x"06518053", +5929 => x"70732e09", +5930 => x"81060b0b", +5931 => x"0b0b9838", +5932 => x"710a100a", +5933 => x"70810652", +5934 => x"5370802e", +5935 => x"0b0b0b81", +5936 => x"89387275", +5937 => x"0c815372", +5938 => x"800c863d", +5939 => x"0d047072", +5940 => x"83ffff06", +5941 => x"52547080", +5942 => x"2e0b0b0b", +5943 => x"80e03871", +5944 => x"81ff0651", +5945 => x"700b0b0b", +5946 => x"0b883888", +5947 => x"1472882a", +5948 => x"5354718f", +5949 => x"0651700b", +5950 => x"0b0b0b88", +5951 => x"38841472", +5952 => x"842a5354", +5953 => x"71830651", +5954 => x"700b0b0b", +5955 => x"0b883882", +5956 => x"1472822a", +5957 => x"53547181", +5958 => x"0651700b", +5959 => x"0b0b0b94", +5960 => x"38811472", +5961 => x"0a100a53", +5962 => x"54a05371", +5963 => x"802e0b0b", +5964 => x"0bff9438", +5965 => x"71750c73", +5966 => x"800c863d", +5967 => x"0d049072", +5968 => x"712a5354", +5969 => x"0b0b0bff", +5970 => x"96397182", +5971 => x"2a750c82", +5972 => x"0b800c86", +5973 => x"3d0d0470", +5974 => x"70815273", +5975 => x"510b0b0b", +5976 => x"f8e73f74", +5977 => x"80089405", +5978 => x"0c810b80", +5979 => x"0890050c", +5980 => x"505004ee", +5981 => x"3d0d6567", +5982 => x"90120890", +5983 => x"12085856", +5984 => x"57537375", +5985 => x"250b0b0b", +5986 => x"0b8d3872", +5987 => x"76717790", +5988 => x"14085957", +5989 => x"58544274", +5990 => x"14708815", +5991 => x"08248415", +5992 => x"08055365", +5993 => x"525e0b0b", +5994 => x"0bf89e3f", +5995 => x"80088008", +5996 => x"94057060", +5997 => x"822b7211", +5998 => x"43465941", +5999 => x"427f7f27", +6000 => x"0b0b0b0b", +6001 => x"91388077", +6002 => x"70840559", +6003 => x"0c7e7726", +6004 => x"0b0b0b0b", +6005 => x"f1389413", +6006 => x"74101011", +6007 => x"94187710", +6008 => x"10116341", +6009 => x"445d5d5f", +6010 => x"7a61270b", +6011 => x"0b0b81c9", +6012 => x"387a0870", +6013 => x"83ffff06", +6014 => x"59537780", +6015 => x"2e0b0b0b", +6016 => x"80cb387e", +6017 => x"7d575780", +6018 => x"5a767084", +6019 => x"05580870", +6020 => x"83ffff06", +6021 => x"82182271", +6022 => x"7b29057c", +6023 => x"1173902a", +6024 => x"7c297a22", +6025 => x"5e7d0571", +6026 => x"902a0570", +6027 => x"902a5f59", +6028 => x"51515454", +6029 => x"74762372", +6030 => x"82172384", +6031 => x"16567b77", +6032 => x"260b0b0b", +6033 => x"0bc33879", +6034 => x"760c7a08", +6035 => x"5372902a", +6036 => x"5877802e", +6037 => x"0b0b0b80", +6038 => x"d1387e7d", +6039 => x"5757807d", +6040 => x"08705b56", +6041 => x"5a767084", +6042 => x"05580870", +6043 => x"83ffff06", +6044 => x"707a297b", +6045 => x"902a057c", +6046 => x"11515154", +6047 => x"54727623", +6048 => x"74821723", +6049 => x"84167490", +6050 => x"2a792971", +6051 => x"08821322", +6052 => x"5d5b7b05", +6053 => x"74902a05", +6054 => x"70902a5c", +6055 => x"56567b77", +6056 => x"260b0b0b", +6057 => x"ffbf3874", +6058 => x"760c841b", +6059 => x"841e5e5b", +6060 => x"607b260b", +6061 => x"0b0bfeb9", +6062 => x"38626005", +6063 => x"56807e25", +6064 => x"0b0b0b0b", +6065 => x"9838fc16", +6066 => x"5675080b", +6067 => x"0b0b0b8d", +6068 => x"38ff1e5e", +6069 => x"7d80240b", +6070 => x"0b0b0bea", +6071 => x"387d6290", +6072 => x"050c6180", +6073 => x"0c943d0d", +6074 => x"04f73d0d", +6075 => x"7b7d7f70", +6076 => x"83065858", +6077 => x"5a5a740b", +6078 => x"0b0b8181", +6079 => x"3875822c", +6080 => x"5675802e", +6081 => x"0b0b0b80", +6082 => x"cc3880c8", +6083 => x"1a087056", +6084 => x"5776802e", +6085 => x"0b0b0b81", +6086 => x"a3387581", +6087 => x"0655740b", +6088 => x"0b0b0bb8", +6089 => x"3875812c", +6090 => x"5675802e", +6091 => x"0b0b0b0b", +6092 => x"a4387608", +6093 => x"70595574", +6094 => x"802e0b0b", +6095 => x"0b80e038", +6096 => x"74577581", +6097 => x"06557480", +6098 => x"2e0b0b0b", +6099 => x"0bd7380b", +6100 => x"0b0b0b88", +6101 => x"3978800c", +6102 => x"8b3d0d04", +6103 => x"76537852", +6104 => x"79510b0b", +6105 => x"0bfc8c3f", +6106 => x"80087953", +6107 => x"7a52550b", +6108 => x"0b0bf5fc", +6109 => x"3f74590b", +6110 => x"0b0bffa9", +6111 => x"39805474", +6112 => x"10100b0b", +6113 => x"82f49c05", +6114 => x"70085455", +6115 => x"78527951", +6116 => x"0b0b0bf5", +6117 => x"ff3f8008", +6118 => x"590b0b0b", +6119 => x"fedf3976", +6120 => x"53765279", +6121 => x"510b0b0b", +6122 => x"fbc93f80", +6123 => x"08770c80", +6124 => x"08788008", +6125 => x"0c570b0b", +6126 => x"0bff8739", +6127 => x"84f15279", +6128 => x"510b0b0b", +6129 => x"fb913f80", +6130 => x"0880c81b", +6131 => x"0c800875", +6132 => x"80080c76", +6133 => x"81065657", +6134 => x"74802e0b", +6135 => x"0b0bfec5", +6136 => x"380b0b0b", +6137 => x"fef639f5", +6138 => x"3d0d7d7f", +6139 => x"6170852c", +6140 => x"84130890", +6141 => x"14081281", +6142 => x"05881508", +6143 => x"595e5959", +6144 => x"5a5c5c72", +6145 => x"79250b0b", +6146 => x"0b0b9038", +6147 => x"81157310", +6148 => x"54557873", +6149 => x"240b0b0b", +6150 => x"0bf23874", +6151 => x"527b510b", +6152 => x"0b0bf3a5", +6153 => x"3f800880", +6154 => x"08940555", +6155 => x"5a807625", +6156 => x"0b0b0b0b", +6157 => x"94387553", +6158 => x"80747084", +6159 => x"05560cff", +6160 => x"1353720b", +6161 => x"0b0b0bf0", +6162 => x"38941b90", +6163 => x"1c081010", +6164 => x"11799f06", +6165 => x"5a585377", +6166 => x"802e0b0b", +6167 => x"0b80ca38", +6168 => x"a0783155", +6169 => x"80567208", +6170 => x"782b7607", +6171 => x"74708405", +6172 => x"560c7270", +6173 => x"84055408", +6174 => x"752a5676", +6175 => x"73260b0b", +6176 => x"0b0be338", +6177 => x"75740c75", +6178 => x"802e0b0b", +6179 => x"0b0b8438", +6180 => x"811959ff", +6181 => x"19901b0c", +6182 => x"7a527b51", +6183 => x"0b0b0bf3", +6184 => x"cf3f7980", +6185 => x"0c8d3d0d", +6186 => x"04727084", +6187 => x"05540874", +6188 => x"70840556", +6189 => x"0c727727", +6190 => x"0b0b0b0b", +6191 => x"d6387270", +6192 => x"84055408", +6193 => x"74708405", +6194 => x"560c7673", +6195 => x"260b0b0b", +6196 => x"0bd7380b", +6197 => x"0b0bffbb", +6198 => x"39fb3d0d", +6199 => x"77799011", +6200 => x"08901308", +6201 => x"71317056", +6202 => x"54555754", +6203 => x"700b0b0b", +6204 => x"0bb33894", +6205 => x"1473822b", +6206 => x"71117119", +6207 => x"94055254", +6208 => x"5255fc12", +6209 => x"fc127108", +6210 => x"71085656", +6211 => x"52527373", +6212 => x"2e098106", +6213 => x"0b0b0b0b", +6214 => x"93387175", +6215 => x"260b0b0b", +6216 => x"0be03880", +6217 => x"5271800c", +6218 => x"873d0d04", +6219 => x"ff517274", +6220 => x"260b0b0b", +6221 => x"0b833881", +6222 => x"5170800c", +6223 => x"873d0d04", +6224 => x"f33d0d7f", +6225 => x"61637055", +6226 => x"71545754", +6227 => x"560b0b0b", +6228 => x"ff873f80", +6229 => x"08548008", +6230 => x"802e0b0b", +6231 => x"0b81e038", +6232 => x"80547380", +6233 => x"08240b0b", +6234 => x"0b81f638", +6235 => x"84130852", +6236 => x"75510b0b", +6237 => x"0bf0d23f", +6238 => x"80087480", +6239 => x"088c050c", +6240 => x"90140894", +6241 => x"15711010", +6242 => x"11941990", +6243 => x"1a081010", +6244 => x"11800894", +6245 => x"055d415d", +6246 => x"415a5c5d", +6247 => x"805a7770", +6248 => x"84055908", +6249 => x"7083ffff", +6250 => x"067a7084", +6251 => x"055c0870", +6252 => x"83ffff06", +6253 => x"7271311e", +6254 => x"74902a73", +6255 => x"902a3171", +6256 => x"902c1170", +6257 => x"902c4151", +6258 => x"55515657", +6259 => x"57547377", +6260 => x"23728218", +6261 => x"23841757", +6262 => x"7b79260b", +6263 => x"0b0bffbe", +6264 => x"38777e27", +6265 => x"0b0b0b0b", +6266 => x"b0387770", +6267 => x"84055908", +6268 => x"7083ffff", +6269 => x"067b1170", +6270 => x"902c7390", +6271 => x"2a057090", +6272 => x"2c5e5351", +6273 => x"54547377", +6274 => x"23728218", +6275 => x"23841757", +6276 => x"7d78260b", +6277 => x"0b0b0bd2", +6278 => x"38fc1757", +6279 => x"76080b0b", +6280 => x"0b0b9138", +6281 => x"ff1bfc18", +6282 => x"585b7608", +6283 => x"802e0b0b", +6284 => x"0b0bf138", +6285 => x"7a901e0c", +6286 => x"7c800c8f", +6287 => x"3d0d0480", +6288 => x"08527551", +6289 => x"0b0b0bef", +6290 => x"803f8008", +6291 => x"5d810b80", +6292 => x"0890050c", +6293 => x"73800894", +6294 => x"050c7c80", +6295 => x"0c8f3d0d", +6296 => x"04727554", +6297 => x"55810b84", +6298 => x"14085376", +6299 => x"52540b0b", +6300 => x"0beed63f", +6301 => x"80087480", +6302 => x"088c050c", +6303 => x"90140894", +6304 => x"15711010", +6305 => x"11941990", +6306 => x"1a081010", +6307 => x"11800894", +6308 => x"055d415d", +6309 => x"415a5c5d", +6310 => x"805a0b0b", +6311 => x"0bfdff39", +6312 => x"fa3d0d78", +6313 => x"7a7c5457", +6314 => x"7258769f", +6315 => x"fe0a0686", +6316 => x"bf0a0553", +6317 => x"53807225", +6318 => x"0b0b0b0b", +6319 => x"95387154", +6320 => x"80557375", +6321 => x"53730c71", +6322 => x"84140c72", +6323 => x"800c883d", +6324 => x"0d047130", +6325 => x"70942c53", +6326 => x"51937225", +6327 => x"0b0b0b0b", +6328 => x"ab388054", +6329 => x"ec129f71", +6330 => x"3181712b", +6331 => x"5152529e", +6332 => x"72250b0b", +6333 => x"0b0b8338", +6334 => x"81517055", +6335 => x"73755373", +6336 => x"0c718414", +6337 => x"0c72800c", +6338 => x"883d0d04", +6339 => x"a0808072", +6340 => x"2c548055", +6341 => x"0b0b0bff", +6342 => x"a939f63d", +6343 => x"0d7c7e94", +6344 => x"11901208", +6345 => x"101011fc", +6346 => x"11700870", +6347 => x"575a5157", +6348 => x"5853590b", +6349 => x"0b0bf1d0", +6350 => x"3f80087f", +6351 => x"a00b8008", +6352 => x"31710c53", +6353 => x"538a0b80", +6354 => x"08250b0b", +6355 => x"0b80f738", +6356 => x"80577376", +6357 => x"260b0b0b", +6358 => x"80c438f5", +6359 => x"13537280", +6360 => x"2e0b0b0b", +6361 => x"80c838a0", +6362 => x"73317574", +6363 => x"2b78722a", +6364 => x"079ffc0a", +6365 => x"075b5880", +6366 => x"55757427", +6367 => x"0b0b0b0b", +6368 => x"8538fc14", +6369 => x"08557673", +6370 => x"2b75792a", +6371 => x"075b797b", +6372 => x"54790c72", +6373 => x"841a0c78", +6374 => x"800c8c3d", +6375 => x"0d04fc14", +6376 => x"7008f515", +6377 => x"55585472", +6378 => x"0b0b0bff", +6379 => x"ba38749f", +6380 => x"fc0a075a", +6381 => x"765b797b", +6382 => x"54790c72", +6383 => x"841a0c78", +6384 => x"800c8c3d", +6385 => x"0d048b0b", +6386 => x"80083175", +6387 => x"712a9ffc", +6388 => x"0a075b57", +6389 => x"80587574", +6390 => x"270b0b0b", +6391 => x"0b8538fc", +6392 => x"14085895", +6393 => x"1375712b", +6394 => x"79792a07", +6395 => x"5c52797b", +6396 => x"54790c72", +6397 => x"841a0c78", +6398 => x"800c8c3d", +6399 => x"0d04f33d", +6400 => x"0d626462", +6401 => x"64575f75", +6402 => x"405b5981", +6403 => x"527f510b", +6404 => x"0b0bebb5", +6405 => x"3f800880", +6406 => x"0894057e", +6407 => x"70bfffff", +6408 => x"06705f71", +6409 => x"fe0a0670", +6410 => x"4270942a", +6411 => x"5b525755", +6412 => x"59577580", +6413 => x"2e0b0b0b", +6414 => x"0b873873", +6415 => x"90800a07", +6416 => x"5b7d5372", +6417 => x"802e0b0b", +6418 => x"0b80e038", +6419 => x"725c8f3d", +6420 => x"f405510b", +6421 => x"0b0bf0b1", +6422 => x"3f800855", +6423 => x"8008802e", +6424 => x"0b0b0b81", +6425 => x"8d38a00b", +6426 => x"8008317b", +6427 => x"712b7d07", +6428 => x"790c537a", +6429 => x"80082a5b", +6430 => x"7a70841a", +6431 => x"0c703070", +6432 => x"72078025", +6433 => x"82713170", +6434 => x"901c0c51", +6435 => x"51545475", +6436 => x"802e0b0b", +6437 => x"0b0bb638", +6438 => x"7416f7cd", +6439 => x"05790cb5", +6440 => x"75317a0c", +6441 => x"76800c8f", +6442 => x"3d0d048f", +6443 => x"3df00551", +6444 => x"0b0b0bef", +6445 => x"d43f7a78", +6446 => x"0c810b90", +6447 => x"180c810b", +6448 => x"8008a005", +6449 => x"5653750b", +6450 => x"0b0b0bcc", +6451 => x"38f7ce15", +6452 => x"790c7285", +6453 => x"2b731010", +6454 => x"19fc1108", +6455 => x"5354540b", +6456 => x"0b0beea4", +6457 => x"3f738008", +6458 => x"317a0c76", +6459 => x"800c8f3d", +6460 => x"0d047b78", +6461 => x"0c7a7084", +6462 => x"1a0c7030", +6463 => x"70720780", +6464 => x"25827131", +6465 => x"70901c0c", +6466 => x"51515454", +6467 => x"0b0b0bfe", +6468 => x"fe39f03d", +6469 => x"0d626466", +6470 => x"953de411", +6471 => x"577256f8", +6472 => x"05545858", +6473 => x"580b0b0b", +6474 => x"fbf03f92", +6475 => x"3de01154", +6476 => x"7653f005", +6477 => x"510b0b0b", +6478 => x"fbe03f90", +6479 => x"17089017", +6480 => x"0831852b", +6481 => x"7b7b3111", +6482 => x"51568076", +6483 => x"250b0b0b", +6484 => x"0bb03875", +6485 => x"90800a29", +6486 => x"6005407d", +6487 => x"7f585476", +6488 => x"557f6158", +6489 => x"52765392", +6490 => x"3de80551", +6491 => x"0b0b80d6", +6492 => x"ac3f7b7d", +6493 => x"58780c76", +6494 => x"84190c77", +6495 => x"800c923d", +6496 => x"0d047530", +6497 => x"7090800a", +6498 => x"291f5f56", +6499 => x"7d7f5854", +6500 => x"76557f61", +6501 => x"58527653", +6502 => x"923de805", +6503 => x"510b0b80", +6504 => x"d5fb3f7b", +6505 => x"7d58780c", +6506 => x"7684190c", +6507 => x"77800c92", +6508 => x"3d0d04f3", +6509 => x"3d0d7f61", +6510 => x"575c9ffc", +6511 => x"0a578058", +6512 => x"7597240b", +6513 => x"0b0b0b9d", +6514 => x"38751010", +6515 => x"100b0b82", +6516 => x"f2d80584", +6517 => x"11087108", +6518 => x"7e0c841e", +6519 => x"0c7c800c", +6520 => x"568f3d0d", +6521 => x"04807625", +6522 => x"0b0b0b0b", +6523 => x"ab388d3d", +6524 => x"5b80c882", +6525 => x"0a59805a", +6526 => x"78547955", +6527 => x"76527753", +6528 => x"7a510b0b", +6529 => x"0bb6963f", +6530 => x"7c7eff18", +6531 => x"58595775", +6532 => x"80240b0b", +6533 => x"0b0be138", +6534 => x"767c0c77", +6535 => x"841d0c7b", +6536 => x"800c8f3d", +6537 => x"0d04ef3d", +6538 => x"0d636567", +6539 => x"405d427b", +6540 => x"802e0b0b", +6541 => x"0b85ea38", +6542 => x"61510b0b", +6543 => x"0be7883f", +6544 => x"f81c7084", +6545 => x"120870fc", +6546 => x"0670628b", +6547 => x"0570f806", +6548 => x"4159455b", +6549 => x"5c415796", +6550 => x"74270b0b", +6551 => x"0b82fe38", +6552 => x"807b247e", +6553 => x"7c260759", +6554 => x"80547874", +6555 => x"2e098106", +6556 => x"0b0b0b82", +6557 => x"e138777b", +6558 => x"250b0b0b", +6559 => x"82ab3877", +6560 => x"170b0b82", +6561 => x"fcc80b88", +6562 => x"05085e56", +6563 => x"7c762e0b", +6564 => x"0b0b859f", +6565 => x"38841608", +6566 => x"70fe0617", +6567 => x"84110881", +6568 => x"06515555", +6569 => x"730b0b0b", +6570 => x"82bb3874", +6571 => x"fc06597c", +6572 => x"762e0b0b", +6573 => x"0b85c938", +6574 => x"77195f7e", +6575 => x"7b250b0b", +6576 => x"0b82aa38", +6577 => x"79810654", +6578 => x"730b0b0b", +6579 => x"82f53876", +6580 => x"77083184", +6581 => x"1108fc06", +6582 => x"565a7580", +6583 => x"2e0b0b0b", +6584 => x"0b97387c", +6585 => x"762e0b0b", +6586 => x"0b85d438", +6587 => x"74191859", +6588 => x"787b250b", +6589 => x"0b0b84e2", +6590 => x"3879802e", +6591 => x"0b0b0b82", +6592 => x"c2387715", +6593 => x"567a7624", +6594 => x"0b0b0b82", +6595 => x"b6388c1a", +6596 => x"08881b08", +6597 => x"718c120c", +6598 => x"88120c55", +6599 => x"79765957", +6600 => x"881761fc", +6601 => x"05575975", +6602 => x"a4260b0b", +6603 => x"0b86e638", +6604 => x"7b795555", +6605 => x"9376270b", +6606 => x"0b0b80d1", +6607 => x"387b7084", +6608 => x"055d087c", +6609 => x"56790c74", +6610 => x"70840556", +6611 => x"088c180c", +6612 => x"9017549b", +6613 => x"76270b0b", +6614 => x"0b0bb238", +6615 => x"74708405", +6616 => x"5608740c", +6617 => x"74708405", +6618 => x"56089418", +6619 => x"0c981754", +6620 => x"a376270b", +6621 => x"0b0b0b95", +6622 => x"38747084", +6623 => x"05560874", +6624 => x"0c747084", +6625 => x"0556089c", +6626 => x"180ca017", +6627 => x"54747084", +6628 => x"05560874", +6629 => x"70840556", +6630 => x"0c747084", +6631 => x"05560874", +6632 => x"70840556", +6633 => x"0c740874", +6634 => x"0c777b31", +6635 => x"56758f26", +6636 => x"0b0b0b80", +6637 => x"d5388417", +6638 => x"08810678", +6639 => x"0784180c", +6640 => x"77178411", +6641 => x"08810784", +6642 => x"120c5461", +6643 => x"510b0b0b", +6644 => x"e3f63f88", +6645 => x"17547380", +6646 => x"0c933d0d", +6647 => x"04905b0b", +6648 => x"0b0bfcfc", +6649 => x"3978560b", +6650 => x"0b0bfdd8", +6651 => x"398c1608", +6652 => x"88170871", +6653 => x"8c120c88", +6654 => x"120c557e", +6655 => x"707c3157", +6656 => x"588f7627", +6657 => x"0b0b0bff", +6658 => x"ad387a17", +6659 => x"84180881", +6660 => x"067c0784", +6661 => x"190c7681", +6662 => x"0784120c", +6663 => x"76118411", +6664 => x"08810784", +6665 => x"120c5588", +6666 => x"05526151", +6667 => x"0b0bffbc", +6668 => x"873f6151", +6669 => x"0b0b0be3", +6670 => x"8f3f8817", +6671 => x"540b0b0b", +6672 => x"ff94397d", +6673 => x"5261510b", +6674 => x"0b0bcef6", +6675 => x"3f800859", +6676 => x"8008802e", +6677 => x"0b0b0b81", +6678 => x"b7388008", +6679 => x"f8056084", +6680 => x"0508fe06", +6681 => x"61055557", +6682 => x"76742e0b", +6683 => x"0b0b84b7", +6684 => x"38fc1856", +6685 => x"75a4260b", +6686 => x"0b0b81c1", +6687 => x"387b8008", +6688 => x"55559376", +6689 => x"270b0b0b", +6690 => x"80e03874", +6691 => x"70840556", +6692 => x"08800870", +6693 => x"8405800c", +6694 => x"0c800875", +6695 => x"70840557", +6696 => x"08717084", +6697 => x"05530c54", +6698 => x"9b76270b", +6699 => x"0b0b0bba", +6700 => x"38747084", +6701 => x"05560874", +6702 => x"70840556", +6703 => x"0c747084", +6704 => x"05560874", +6705 => x"70840556", +6706 => x"0ca37627", +6707 => x"0b0b0b0b", +6708 => x"99387470", +6709 => x"84055608", +6710 => x"74708405", +6711 => x"560c7470", +6712 => x"84055608", +6713 => x"74708405", +6714 => x"560c7470", +6715 => x"84055608", +6716 => x"74708405", +6717 => x"560c7470", +6718 => x"84055608", +6719 => x"74708405", +6720 => x"560c7408", +6721 => x"740c7b52", +6722 => x"61510b0b", +6723 => x"ffbaa93f", +6724 => x"61510b0b", +6725 => x"0be1b13f", +6726 => x"78547380", +6727 => x"0c933d0d", +6728 => x"047d5261", +6729 => x"510b0b0b", +6730 => x"cd983f80", +6731 => x"08800c93", +6732 => x"3d0d0484", +6733 => x"1608550b", +6734 => x"0b0bfaef", +6735 => x"3975537b", +6736 => x"52800851", +6737 => x"0b0bfec0", +6738 => x"c23f7b52", +6739 => x"61510b0b", +6740 => x"ffb9e53f", +6741 => x"0b0b0bff", +6742 => x"b7398c16", +6743 => x"08881708", +6744 => x"718c120c", +6745 => x"88120c55", +6746 => x"8c1a0888", +6747 => x"1b08718c", +6748 => x"120c8812", +6749 => x"0c557979", +6750 => x"59570b0b", +6751 => x"0bfba139", +6752 => x"7719901c", +6753 => x"55557375", +6754 => x"240b0b0b", +6755 => x"fab6387a", +6756 => x"17700b0b", +6757 => x"82fcc80b", +6758 => x"88050c75", +6759 => x"7c318107", +6760 => x"84120c5d", +6761 => x"84170881", +6762 => x"067b0784", +6763 => x"180c6151", +6764 => x"0b0b0be0", +6765 => x"933f8817", +6766 => x"540b0b0b", +6767 => x"fc983974", +6768 => x"1918901c", +6769 => x"555d737d", +6770 => x"240b0b0b", +6771 => x"faab388c", +6772 => x"1a08881b", +6773 => x"08718c12", +6774 => x"0c88120c", +6775 => x"55881a61", +6776 => x"fc055759", +6777 => x"75a4260b", +6778 => x"0b0b81ca", +6779 => x"387b7955", +6780 => x"55937627", +6781 => x"0b0b0b80", +6782 => x"d1387b70", +6783 => x"84055d08", +6784 => x"7c56790c", +6785 => x"74708405", +6786 => x"56088c1b", +6787 => x"0c901a54", +6788 => x"9b76270b", +6789 => x"0b0b0bb2", +6790 => x"38747084", +6791 => x"05560874", +6792 => x"0c747084", +6793 => x"05560894", +6794 => x"1b0c981a", +6795 => x"54a37627", +6796 => x"0b0b0b0b", +6797 => x"95387470", +6798 => x"84055608", +6799 => x"740c7470", +6800 => x"84055608", +6801 => x"9c1b0ca0", +6802 => x"1a547470", +6803 => x"84055608", +6804 => x"74708405", +6805 => x"560c7470", +6806 => x"84055608", +6807 => x"74708405", +6808 => x"560c7408", +6809 => x"740c7a1a", +6810 => x"700b0b82", +6811 => x"fcc80b88", +6812 => x"050c7d7c", +6813 => x"31810784", +6814 => x"120c5484", +6815 => x"1a088106", +6816 => x"7b07841b", +6817 => x"0c61510b", +6818 => x"0b0bdebc", +6819 => x"3f78540b", +6820 => x"0b0bfd86", +6821 => x"3975537b", +6822 => x"5278510b", +6823 => x"0bfebdeb", +6824 => x"3f0b0b0b", +6825 => x"fa833984", +6826 => x"1708fc06", +6827 => x"18605858", +6828 => x"0b0b0bf9", +6829 => x"f4397553", +6830 => x"7b527851", +6831 => x"0b0bfebd", +6832 => x"ca3f7a1a", +6833 => x"700b0b82", +6834 => x"fcc80b88", +6835 => x"050c7d7c", +6836 => x"31810784", +6837 => x"120c5484", +6838 => x"1a088106", +6839 => x"7b07841b", +6840 => x"0c0b0b0b", +6841 => x"ff9f3970", +6842 => x"70707075", +6843 => x"77535371", +6844 => x"54733070", +6845 => x"75079f2a", +6846 => x"7075fe0a", +6847 => x"06079081", +6848 => x"0a119ffe", +6849 => x"0a723107", +6850 => x"709f2a81", +6851 => x"7131800c", +6852 => x"51515151", +6853 => x"51505050", +6854 => x"50047070", +6855 => x"70707577", +6856 => x"53537154", +6857 => x"73307075", +6858 => x"079f2a70", +6859 => x"75fe0a06", +6860 => x"079ffe0a", +6861 => x"71319f2a", +6862 => x"800c5151", +6863 => x"51505050", +6864 => x"50047070", +6865 => x"7070800b", +6866 => x"0b0b8385", +6867 => x"840c7651", +6868 => x"0b0b0b8c", +6869 => x"f33f8008", +6870 => x"538008ff", +6871 => x"2e0b0b0b", +6872 => x"0b893872", +6873 => x"800c5050", +6874 => x"5050040b", +6875 => x"0b838584", +6876 => x"08547380", +6877 => x"2e0b0b0b", +6878 => x"0be93875", +6879 => x"74710c52", +6880 => x"72800c50", +6881 => x"50505004", +6882 => x"f93d0d79", +6883 => x"7c557b54", +6884 => x"8e112270", +6885 => x"902b7090", +6886 => x"2c55570b", +6887 => x"0b82f4ec", +6888 => x"08535856", +6889 => x"0b0b0b88", +6890 => x"ac3f8008", +6891 => x"57800b80", +6892 => x"08240b0b", +6893 => x"0b0b9338", +6894 => x"80d01608", +6895 => x"80080580", +6896 => x"d0170c76", +6897 => x"800c893d", +6898 => x"0d048c16", +6899 => x"2283dfff", +6900 => x"0655748c", +6901 => x"17237680", +6902 => x"0c893d0d", +6903 => x"04fa3d0d", +6904 => x"788c1122", +6905 => x"70882a70", +6906 => x"81065157", +6907 => x"5856740b", +6908 => x"0b0b0bae", +6909 => x"388c1622", +6910 => x"83dfff06", +6911 => x"55748c17", +6912 => x"237a5479", +6913 => x"538e1622", +6914 => x"70902b70", +6915 => x"902c5456", +6916 => x"0b0b82f4", +6917 => x"ec085256", +6918 => x"0b0b0b83", +6919 => x"f33f883d", +6920 => x"0d048254", +6921 => x"80538e16", +6922 => x"2270902b", +6923 => x"70902c54", +6924 => x"560b0b82", +6925 => x"f4ec0852", +6926 => x"570b0b0b", +6927 => x"86d03f8c", +6928 => x"162283df", +6929 => x"ff065574", +6930 => x"8c17237a", +6931 => x"5479538e", +6932 => x"16227090", +6933 => x"2b70902c", +6934 => x"54560b0b", +6935 => x"82f4ec08", +6936 => x"52560b0b", +6937 => x"0b83a93f", +6938 => x"883d0d04", +6939 => x"f93d0d79", +6940 => x"7c557b54", +6941 => x"8e112270", +6942 => x"902b7090", +6943 => x"2c55570b", +6944 => x"0b82f4ec", +6945 => x"08535856", +6946 => x"0b0b0b86", +6947 => x"813f8008", +6948 => x"578008ff", +6949 => x"2e0b0b0b", +6950 => x"0b99388c", +6951 => x"1622a080", +6952 => x"0755748c", +6953 => x"17238008", +6954 => x"80d0170c", +6955 => x"76800c89", +6956 => x"3d0d048c", +6957 => x"162283df", +6958 => x"ff065574", +6959 => x"8c172376", +6960 => x"800c893d", +6961 => x"0d047070", +6962 => x"70748e11", +6963 => x"2270902b", +6964 => x"70902c55", +6965 => x"5151530b", +6966 => x"0b82f4ec", +6967 => x"08510b0b", +6968 => x"0b84a03f", +6969 => x"50505004", +6970 => x"fb3d0d77", +6971 => x"79707207", +6972 => x"83065354", +6973 => x"52700b0b", +6974 => x"0b0b9638", +6975 => x"71737308", +6976 => x"54565471", +6977 => x"73082e0b", +6978 => x"0b0b80d0", +6979 => x"38737554", +6980 => x"52713370", +6981 => x"81ff0652", +6982 => x"5470802e", +6983 => x"0b0b0b0b", +6984 => x"a5387233", +6985 => x"5570752e", +6986 => x"0981060b", +6987 => x"0b0b0b99", +6988 => x"38811281", +6989 => x"14713370", +6990 => x"81ff0654", +6991 => x"56545270", +6992 => x"0b0b0b0b", +6993 => x"dd387233", +6994 => x"557381ff", +6995 => x"067581ff", +6996 => x"06717131", +6997 => x"800c5252", +6998 => x"873d0d04", +6999 => x"710970f7", +7000 => x"fbfdff14", +7001 => x"0670f884", +7002 => x"82818006", +7003 => x"51515170", +7004 => x"0b0b0b0b", +7005 => x"9e388414", +7006 => x"84167108", +7007 => x"54565471", +7008 => x"75082e0b", +7009 => x"0b0b0bd4", +7010 => x"38737554", +7011 => x"520b0b0b", +7012 => x"feff3980", +7013 => x"0b800c87", +7014 => x"3d0d0470", +7015 => x"70707075", +7016 => x"70718306", +7017 => x"53555270", +7018 => x"0b0b0b80", +7019 => x"c0387170", +7020 => x"087009f7", +7021 => x"fbfdff12", +7022 => x"0670f884", +7023 => x"82818006", +7024 => x"51515253", +7025 => x"700b0b0b", +7026 => x"0ba13884", +7027 => x"13700870", +7028 => x"09f7fbfd", +7029 => x"ff120670", +7030 => x"f8848281", +7031 => x"80065151", +7032 => x"52537080", +7033 => x"2e0b0b0b", +7034 => x"0be13872", +7035 => x"52713351", +7036 => x"70802e0b", +7037 => x"0b0b0b8e", +7038 => x"38811270", +7039 => x"33525270", +7040 => x"0b0b0b0b", +7041 => x"f4387174", +7042 => x"31800c50", +7043 => x"50505004", +7044 => x"fb3d0d80", +7045 => x"0b0b0b83", +7046 => x"85840c7a", +7047 => x"53795278", +7048 => x"510b0b0b", +7049 => x"88de3f80", +7050 => x"08558008", +7051 => x"ff2e0b0b", +7052 => x"0b0b8838", +7053 => x"74800c87", +7054 => x"3d0d040b", +7055 => x"0b838584", +7056 => x"08567580", +7057 => x"2e0b0b0b", +7058 => x"0bea3877", +7059 => x"76710c54", +7060 => x"74800c87", +7061 => x"3d0d04fb", +7062 => x"3d0d787a", +7063 => x"29527751", +7064 => x"0b0b0bc2", +7065 => x"dd3f8008", +7066 => x"80085556", +7067 => x"8008802e", +7068 => x"0b0b0b80", +7069 => x"f2388008", +7070 => x"fc0508fc", +7071 => x"06fc0555", +7072 => x"74a4260b", +7073 => x"0b0b80e6", +7074 => x"38937527", +7075 => x"0b0b0b80", +7076 => x"c338800b", +7077 => x"80087084", +7078 => x"05800c0c", +7079 => x"80085480", +7080 => x"74708405", +7081 => x"560c9b75", +7082 => x"270b0b0b", +7083 => x"0ba63880", +7084 => x"74708405", +7085 => x"560c8074", +7086 => x"70840556", +7087 => x"0ca37527", +7088 => x"0b0b0b0b", +7089 => x"8f388074", +7090 => x"70840556", +7091 => x"0c807470", +7092 => x"8405560c", +7093 => x"80747084", +7094 => x"05560c80", +7095 => x"74708405", +7096 => x"560c8074", +7097 => x"0c755473", +7098 => x"800c873d", +7099 => x"0d047453", +7100 => x"80528008", +7101 => x"510b0b0b", +7102 => x"d49b3f75", +7103 => x"540b0b0b", +7104 => x"0be53970", +7105 => x"70707080", +7106 => x"0b0b0b83", +7107 => x"85840c76", +7108 => x"510b0b0b", +7109 => x"8a943f80", +7110 => x"08538008", +7111 => x"ff2e0b0b", +7112 => x"0b0b8938", +7113 => x"72800c50", +7114 => x"50505004", +7115 => x"0b0b8385", +7116 => x"84085473", +7117 => x"802e0b0b", +7118 => x"0b0be938", +7119 => x"7574710c", +7120 => x"5272800c", +7121 => x"50505050", +7122 => x"04fc3d0d", +7123 => x"800b0b0b", +7124 => x"8385840c", +7125 => x"78527751", +7126 => x"0b0b0b8d", +7127 => x"823f8008", +7128 => x"548008ff", +7129 => x"2e0b0b0b", +7130 => x"0b883873", +7131 => x"800c863d", +7132 => x"0d040b0b", +7133 => x"83858408", +7134 => x"5574802e", +7135 => x"0b0b0b0b", +7136 => x"ea387675", +7137 => x"710c5373", +7138 => x"800c863d", +7139 => x"0d04fb3d", +7140 => x"0d800b0b", +7141 => x"0b838584", +7142 => x"0c7a5379", +7143 => x"5278510b", +7144 => x"0b0b8a9e", +7145 => x"3f800855", +7146 => x"8008ff2e", +7147 => x"0b0b0b0b", +7148 => x"88387480", +7149 => x"0c873d0d", +7150 => x"040b0b83", +7151 => x"85840856", +7152 => x"75802e0b", +7153 => x"0b0b0bea", +7154 => x"38777671", +7155 => x"0c547480", +7156 => x"0c873d0d", +7157 => x"04fb3d0d", +7158 => x"800b0b0b", +7159 => x"8385840c", +7160 => x"7a537952", +7161 => x"78510b0b", +7162 => x"0b86b13f", +7163 => x"80085580", +7164 => x"08ff2e0b", +7165 => x"0b0b0b88", +7166 => x"3874800c", +7167 => x"873d0d04", +7168 => x"0b0b8385", +7169 => x"84085675", +7170 => x"802e0b0b", +7171 => x"0b0bea38", +7172 => x"7776710c", +7173 => x"5474800c", +7174 => x"873d0d04", +7175 => x"fc3d0d76", +7176 => x"78700855", +7177 => x"5555720b", +7178 => x"0b0b0b8f", +7179 => x"38735274", +7180 => x"510b0bff", +7181 => x"ac823f86", +7182 => x"3d0d0472", +7183 => x"5274510b", +7184 => x"0b0b0bd8", +7185 => x"3f735274", +7186 => x"510b0bff", +7187 => x"abea3f86", +7188 => x"3d0d04fb", +7189 => x"3d0d7755", +7190 => x"740b0b82", +7191 => x"f4ec082e", +7192 => x"0b0b0b80", +7193 => x"fe3880cc", +7194 => x"15085380", +7195 => x"5672762e", +7196 => x"0981060b", +7197 => x"0b0b8180", +7198 => x"3882c815", +7199 => x"08537280", +7200 => x"2e0b0b0b", +7201 => x"0bb23882", +7202 => x"cc155672", +7203 => x"762e0b0b", +7204 => x"0b0ba538", +7205 => x"72547574", +7206 => x"2e0b0b0b", +7207 => x"0b9a3873", +7208 => x"74085552", +7209 => x"74510b0b", +7210 => x"ffab8d3f", +7211 => x"75742e09", +7212 => x"81060b0b", +7213 => x"0b0be838", +7214 => x"80d41508", +7215 => x"53720b0b", +7216 => x"0b80d938", +7217 => x"b8150880", +7218 => x"2e0b0b0b", +7219 => x"0b953874", +7220 => x"51bc1508", +7221 => x"53722d84", +7222 => x"dc150853", +7223 => x"720b0b0b", +7224 => x"80ca3887", +7225 => x"3d0d0481", +7226 => x"1656758e", +7227 => x"240b0b0b", +7228 => x"80c83880", +7229 => x"cc150853", +7230 => x"75101013", +7231 => x"70085553", +7232 => x"73802e0b", +7233 => x"0b0b0bdf", +7234 => x"38737408", +7235 => x"55527451", +7236 => x"0b0bffaa", +7237 => x"a33f0b0b", +7238 => x"0b0be539", +7239 => x"72527451", +7240 => x"0b0bffaa", +7241 => x"933f0b0b", +7242 => x"0bff9939", +7243 => x"72527451", +7244 => x"0b0b0bfd", +7245 => x"e73f873d", +7246 => x"0d0480cc", +7247 => x"15085274", +7248 => x"510b0bff", +7249 => x"a9f23f0b", +7250 => x"0b0bfead", +7251 => x"39fb3d0d", +7252 => x"77567580", +7253 => x"2e0b0b0b", +7254 => x"80dc3882", +7255 => x"c8160855", +7256 => x"74802e0b", +7257 => x"0b0b0bb5", +7258 => x"38841508", +7259 => x"ff055480", +7260 => x"74240b0b", +7261 => x"0b0b9c38", +7262 => x"73101015", +7263 => x"88055372", +7264 => x"08fc1454", +7265 => x"52712dff", +7266 => x"14547380", +7267 => x"250b0b0b", +7268 => x"0bed3874", +7269 => x"0855740b", +7270 => x"0b0b0bcd", +7271 => x"38bc1608", +7272 => x"0b0b0b0b", +7273 => x"8538873d", +7274 => x"0d047551", +7275 => x"bc160852", +7276 => x"712d873d", +7277 => x"0d040b0b", +7278 => x"82f4ec08", +7279 => x"82c81108", +7280 => x"56560b0b", +7281 => x"0bff9939", +7282 => x"7070700b", +7283 => x"0b8384fc", +7284 => x"080b0b0b", +7285 => x"0b8d380b", +7286 => x"0b838588", +7287 => x"0b0b0b83", +7288 => x"84fc0c0b", +7289 => x"0b8384fc", +7290 => x"08751152", +7291 => x"52ff5370", +7292 => x"0b87fb80", +7293 => x"80260b0b", +7294 => x"0b0b8a38", +7295 => x"700b0b83", +7296 => x"84fc0c71", +7297 => x"5372800c", +7298 => x"50505004", +7299 => x"fd3d0d80", +7300 => x"0b0b0b82", +7301 => x"f4e00854", +7302 => x"5472812e", +7303 => x"0b0b0b0b", +7304 => x"ab38730b", +7305 => x"0b838580", +7306 => x"0c0b0bfe", +7307 => x"a5853f0b", +7308 => x"0bfea3cc", +7309 => x"3f0b0b83", +7310 => x"84d05281", +7311 => x"510b0bfe", +7312 => x"a7dd3f80", +7313 => x"08510b0b", +7314 => x"0b89973f", +7315 => x"720b0b83", +7316 => x"85800c0b", +7317 => x"0bfea4db", +7318 => x"3f0b0bfe", +7319 => x"a3a23f0b", +7320 => x"0b8384d0", +7321 => x"5281510b", +7322 => x"0bfea7b3", +7323 => x"3f800851", +7324 => x"0b0b0b88", +7325 => x"ed3f000b", +7326 => x"0b0b0bfb", +7327 => x"39000b0b", +7328 => x"0b0bfb39", +7329 => x"f53d0d7e", +7330 => x"600b0b83", +7331 => x"85800870", +7332 => x"5b585b5b", +7333 => x"750b0b0b", +7334 => x"80db3877", +7335 => x"7a250b0b", +7336 => x"0b0bac38", +7337 => x"771b7033", +7338 => x"7081ff06", +7339 => x"58585975", +7340 => x"8a2e0b0b", +7341 => x"0b0b9f38", +7342 => x"7681ff06", +7343 => x"510b0bfe", +7344 => x"a3cc3f81", +7345 => x"18587978", +7346 => x"240b0b0b", +7347 => x"0bd63879", +7348 => x"800c8d3d", +7349 => x"0d048d51", +7350 => x"0b0bfea3", +7351 => x"b13f7833", +7352 => x"7081ff06", +7353 => x"52570b0b", +7354 => x"fea3a33f", +7355 => x"8118580b", +7356 => x"0b0b0bd2", +7357 => x"3979557a", +7358 => x"547d5385", +7359 => x"528d3dfc", +7360 => x"05510b0b", +7361 => x"fea2c03f", +7362 => x"8008560b", +7363 => x"0b0b87c9", +7364 => x"3f7b8008", +7365 => x"0c75800c", +7366 => x"8d3d0d04", +7367 => x"f63d0d7d", +7368 => x"7f0b0b83", +7369 => x"85800870", +7370 => x"5b585a5a", +7371 => x"750b0b0b", +7372 => x"80d63877", +7373 => x"79250b0b", +7374 => x"0b80c438", +7375 => x"0b0bfea2", +7376 => x"a43f8008", +7377 => x"81ff0670", +7378 => x"8d327030", +7379 => x"709f2a51", +7380 => x"51575776", +7381 => x"8a2e0b0b", +7382 => x"0b80d438", +7383 => x"75802e0b", +7384 => x"0b0b80cb", +7385 => x"38771a56", +7386 => x"76763476", +7387 => x"510b0bfe", +7388 => x"a29c3f81", +7389 => x"18587878", +7390 => x"240b0b0b", +7391 => x"ffbe3877", +7392 => x"5675800c", +7393 => x"8c3d0d04", +7394 => x"78557954", +7395 => x"7c538452", +7396 => x"8c3dfc05", +7397 => x"510b0bfe", +7398 => x"a1ad3f80", +7399 => x"08560b0b", +7400 => x"0b86b63f", +7401 => x"7a80080c", +7402 => x"75800c8c", +7403 => x"3d0d0477", +7404 => x"1a568a76", +7405 => x"34811858", +7406 => x"8d510b0b", +7407 => x"fea1cf3f", +7408 => x"8a510b0b", +7409 => x"fea1c73f", +7410 => x"77560b0b", +7411 => x"0bffb239", +7412 => x"f93d0d79", +7413 => x"570b0b83", +7414 => x"85800880", +7415 => x"2e0b0b0b", +7416 => x"0bb53876", +7417 => x"510b0b0b", +7418 => x"f3b13f7b", +7419 => x"567a5580", +7420 => x"08810554", +7421 => x"76538252", +7422 => x"893dfc05", +7423 => x"510b0bfe", +7424 => x"a0c53f80", +7425 => x"08570b0b", +7426 => x"0b85ce3f", +7427 => x"7780080c", +7428 => x"76800c89", +7429 => x"3d0d040b", +7430 => x"0b0b85bd", +7431 => x"3f850b80", +7432 => x"080cff0b", +7433 => x"800c893d", +7434 => x"0d04fb3d", +7435 => x"0d0b0b83", +7436 => x"85800870", +7437 => x"5654730b", +7438 => x"0b0b0b88", +7439 => x"3874800c", +7440 => x"873d0d04", +7441 => x"77538352", +7442 => x"873dfc05", +7443 => x"510b0bfe", +7444 => x"9ff53f80", +7445 => x"08540b0b", +7446 => x"0b84fe3f", +7447 => x"7580080c", +7448 => x"73800c87", +7449 => x"3d0d04ff", +7450 => x"0b800c04", +7451 => x"fb3d0d77", +7452 => x"550b0b83", +7453 => x"85800880", +7454 => x"2e0b0b0b", +7455 => x"0bb13874", +7456 => x"510b0b0b", +7457 => x"f2953f80", +7458 => x"08810554", +7459 => x"74538752", +7460 => x"873dfc05", +7461 => x"510b0bfe", +7462 => x"9fad3f80", +7463 => x"08550b0b", +7464 => x"0b84b63f", +7465 => x"7580080c", +7466 => x"74800c87", +7467 => x"3d0d040b", +7468 => x"0b0b84a5", +7469 => x"3f850b80", +7470 => x"080cff0b", +7471 => x"800c873d", +7472 => x"0d04fa3d", +7473 => x"0d0b0b83", +7474 => x"85800880", +7475 => x"2e0b0b0b", +7476 => x"0ba8387a", +7477 => x"55795478", +7478 => x"53865288", +7479 => x"3dfc0551", +7480 => x"0b0bfe9e", +7481 => x"e23f8008", +7482 => x"560b0b0b", +7483 => x"83eb3f76", +7484 => x"80080c75", +7485 => x"800c883d", +7486 => x"0d040b0b", +7487 => x"0b83da3f", +7488 => x"9d0b8008", +7489 => x"0cff0b80", +7490 => x"0c883d0d", +7491 => x"04fb3d0d", +7492 => x"77795656", +7493 => x"80705454", +7494 => x"7375250b", +7495 => x"0b0b0ba3", +7496 => x"38741010", +7497 => x"10f80552", +7498 => x"72167033", +7499 => x"70742b76", +7500 => x"078116f8", +7501 => x"16565656", +7502 => x"51517473", +7503 => x"240b0b0b", +7504 => x"0be63873", +7505 => x"800c873d", +7506 => x"0d04fc3d", +7507 => x"0d767855", +7508 => x"55bc5380", +7509 => x"5273510b", +7510 => x"0b0bc7b9", +7511 => x"3f845274", +7512 => x"510b0b0b", +7513 => x"ffa73f80", +7514 => x"08742384", +7515 => x"52841551", +7516 => x"0b0b0bff", +7517 => x"983f8008", +7518 => x"82152384", +7519 => x"52881551", +7520 => x"0b0b0bff", +7521 => x"883f8008", +7522 => x"84150c84", +7523 => x"528c1551", +7524 => x"0b0b0bfe", +7525 => x"f83f8008", +7526 => x"88152384", +7527 => x"52901551", +7528 => x"0b0b0bfe", +7529 => x"e83f8008", +7530 => x"8a152384", +7531 => x"52941551", +7532 => x"0b0b0bfe", +7533 => x"d83f8008", +7534 => x"8c152384", +7535 => x"52981551", +7536 => x"0b0b0bfe", +7537 => x"c83f8008", +7538 => x"8e152388", +7539 => x"529c1551", +7540 => x"0b0b0bfe", +7541 => x"b83f8008", +7542 => x"90150c86", +7543 => x"3d0d04e9", +7544 => x"3d0d6a0b", +7545 => x"0b838580", +7546 => x"08575775", +7547 => x"0b0b0b0b", +7548 => x"933880c0", +7549 => x"800b8418", +7550 => x"0c75ac18", +7551 => x"0c75800c", +7552 => x"993d0d04", +7553 => x"893d7055", +7554 => x"6a54558a", +7555 => x"52993dff", +7556 => x"bc05510b", +7557 => x"0bfe9caf", +7558 => x"3f800877", +7559 => x"53755256", +7560 => x"0b0b0bfe", +7561 => x"a53f0b0b", +7562 => x"0b81ae3f", +7563 => x"7780080c", +7564 => x"75800c99", +7565 => x"3d0d04e9", +7566 => x"3d0d6957", +7567 => x"0b0b8385", +7568 => x"8008802e", +7569 => x"0b0b0b80", +7570 => x"c1387651", +7571 => x"0b0b0bee", +7572 => x"ca3f893d", +7573 => x"70568008", +7574 => x"81055577", +7575 => x"54568f52", +7576 => x"993dffbc", +7577 => x"05510b0b", +7578 => x"fe9bdc3f", +7579 => x"80086b53", +7580 => x"7652570b", +7581 => x"0b0bfdd2", +7582 => x"3f0b0b0b", +7583 => x"80db3f77", +7584 => x"80080c76", +7585 => x"800c993d", +7586 => x"0d040b0b", +7587 => x"0b80ca3f", +7588 => x"850b8008", +7589 => x"0cff0b80", +7590 => x"0c993d0d", +7591 => x"04fc3d0d", +7592 => x"81540b0b", +7593 => x"83858008", +7594 => x"0b0b0b0b", +7595 => x"88387380", +7596 => x"0c863d0d", +7597 => x"04765397", +7598 => x"b952863d", +7599 => x"fc05510b", +7600 => x"0bfe9b83", +7601 => x"3f800854", +7602 => x"0b0b0b0b", +7603 => x"8c3f7480", +7604 => x"080c7380", +7605 => x"0c863d0d", +7606 => x"040b0b82", +7607 => x"f4ec0880", +7608 => x"0c04f73d", +7609 => x"0d7b0b0b", +7610 => x"82f4ec08", +7611 => x"82c81108", +7612 => x"5a545a77", +7613 => x"802e0b0b", +7614 => x"0b80ee38", +7615 => x"81881884", +7616 => x"1908ff05", +7617 => x"81712b59", +7618 => x"55598074", +7619 => x"240b0b0b", +7620 => x"81893880", +7621 => x"74240b0b", +7622 => x"0b0bbd38", +7623 => x"73822b78", +7624 => x"11880556", +7625 => x"56818019", +7626 => x"08770653", +7627 => x"72802e0b", +7628 => x"0b0b80c6", +7629 => x"38781670", +7630 => x"08535379", +7631 => x"51740853", +7632 => x"722dff14", +7633 => x"fc17fc17", +7634 => x"79812c5a", +7635 => x"57575473", +7636 => x"80250b0b", +7637 => x"0b0bce38", +7638 => x"77085877", +7639 => x"0b0b0bff", +7640 => x"9b380b0b", +7641 => x"82f4ec08", +7642 => x"53bc1308", +7643 => x"0b0b0b0b", +7644 => x"b2387951", +7645 => x"0b0b0bf5", +7646 => x"fd3f7408", +7647 => x"53722dff", +7648 => x"14fc17fc", +7649 => x"1779812c", +7650 => x"5a575754", +7651 => x"7380250b", +7652 => x"0b0bff91", +7653 => x"380b0b0b", +7654 => x"ffbe3980", +7655 => x"570b0b0b", +7656 => x"fef13972", +7657 => x"51bc1308", +7658 => x"53722d79", +7659 => x"510b0b0b", +7660 => x"f5c43f8c", +7661 => x"08028c0c", +7662 => x"d43d0d8c", +7663 => x"08880508", +7664 => x"510b0b0b", +7665 => x"8fb43f80", +7666 => x"08547380", +7667 => x"2e0b0b0b", +7668 => x"0b93388c", +7669 => x"08880508", +7670 => x"708c08d0", +7671 => x"050c540b", +7672 => x"0b0b8e8a", +7673 => x"398c088c", +7674 => x"0508510b", +7675 => x"0b0b8f8a", +7676 => x"3f800854", +7677 => x"73802e0b", +7678 => x"0b0b0b93", +7679 => x"388c088c", +7680 => x"0508708c", +7681 => x"08d0050c", +7682 => x"540b0b0b", +7683 => x"8de0398c", +7684 => x"08880508", +7685 => x"510b0b0b", +7686 => x"8eaa3f80", +7687 => x"08547380", +7688 => x"2e0b0b0b", +7689 => x"80d9388c", +7690 => x"088c0508", +7691 => x"510b0b0b", +7692 => x"8e923f80", +7693 => x"08547380", +7694 => x"2e0b0b0b", +7695 => x"0baf388c", +7696 => x"08880508", +7697 => x"8c088c05", +7698 => x"08555584", +7699 => x"15088415", +7700 => x"082e0b0b", +7701 => x"0b0b9638", +7702 => x"0b0b0b8d", +7703 => x"d43f8008", +7704 => x"708c08d0", +7705 => x"050c540b", +7706 => x"0b0b8d82", +7707 => x"398c0888", +7708 => x"0508708c", +7709 => x"08d0050c", +7710 => x"540b0b0b", +7711 => x"8cf0398c", +7712 => x"088c0508", +7713 => x"510b0b0b", +7714 => x"8dba3f80", +7715 => x"08547380", +7716 => x"2e0b0b0b", +7717 => x"0b93388c", +7718 => x"088c0508", +7719 => x"708c08d0", +7720 => x"050c540b", +7721 => x"0b0b8cc6", +7722 => x"398c088c", +7723 => x"0508510b", +7724 => x"0b0b8cc7", +7725 => x"3f800854", +7726 => x"73802e0b", +7727 => x"0b0b80f5", +7728 => x"388c0888", +7729 => x"0508510b", +7730 => x"0b0b8caf", +7731 => x"3f800854", +7732 => x"73802e0b", +7733 => x"0b0b80cb", +7734 => x"388c0890", +7735 => x"05088c08", +7736 => x"88050871", +7737 => x"58565494", +7738 => x"70547553", +7739 => x"7652540b", +7740 => x"0bfea197", +7741 => x"3f8c0890", +7742 => x"05088c08", +7743 => x"8805088c", +7744 => x"088c0508", +7745 => x"84120884", +7746 => x"12080684", +7747 => x"140c8c08", +7748 => x"90050870", +7749 => x"8c08d005", +7750 => x"0c515656", +7751 => x"560b0b0b", +7752 => x"8bcc398c", +7753 => x"08880508", +7754 => x"708c08d0", +7755 => x"050c540b", +7756 => x"0b0b8bba", +7757 => x"398c0888", +7758 => x"0508510b", +7759 => x"0b0b8bbb", +7760 => x"3f800854", +7761 => x"73802e0b", +7762 => x"0b0b0b93", +7763 => x"388c088c", +7764 => x"0508708c", +7765 => x"08d0050c", +7766 => x"540b0b0b", +7767 => x"8b90398c", +7768 => x"08880508", +7769 => x"8811088c", +7770 => x"08f4050c", +7771 => x"8c088c05", +7772 => x"08881108", +7773 => x"8c08f005", +7774 => x"0c8c0888", +7775 => x"05085151", +7776 => x"54901408", +7777 => x"8c150855", +7778 => x"55738c08", +7779 => x"e8050c74", +7780 => x"8c08ec05", +7781 => x"0c8c088c", +7782 => x"05085490", +7783 => x"14088c15", +7784 => x"08555573", +7785 => x"8c08e005", +7786 => x"0c748c08", +7787 => x"e4050c8c", +7788 => x"08f40508", +7789 => x"8c08f005", +7790 => x"08318c08", +7791 => x"dc050c8c", +7792 => x"08dc0508", +7793 => x"80250b0b", +7794 => x"0b0b8c38", +7795 => x"8c08dc05", +7796 => x"08308c08", +7797 => x"dc050c8c", +7798 => x"08dc0508", +7799 => x"bf240b0b", +7800 => x"0b81bf38", +7801 => x"8c08f005", +7802 => x"088c08f4", +7803 => x"0508250b", +7804 => x"0b0b80cf", +7805 => x"388c08f0", +7806 => x"05088105", +7807 => x"8c08f005", +7808 => x"0c8c08e0", +7809 => x"05088006", +7810 => x"8c08e405", +7811 => x"0881068c", +7812 => x"08e00508", +7813 => x"9f2b8c08", +7814 => x"e4050881", +7815 => x"2a707207", +7816 => x"8c08e005", +7817 => x"08812a70", +7818 => x"76078c08", +7819 => x"e0050c74", +7820 => x"72078c08", +7821 => x"e4050c59", +7822 => x"595b5b58", +7823 => x"560b0b0b", +7824 => x"ffa2398c", +7825 => x"08f40508", +7826 => x"8c08f005", +7827 => x"08250b0b", +7828 => x"0b819a38", +7829 => x"8c08f405", +7830 => x"0881058c", +7831 => x"08f4050c", +7832 => x"8c08e805", +7833 => x"0880068c", +7834 => x"08ec0508", +7835 => x"81068c08", +7836 => x"e805089f", +7837 => x"2b8c08ec", +7838 => x"0508812a", +7839 => x"7072078c", +7840 => x"08e80508", +7841 => x"812a7076", +7842 => x"078c08e8", +7843 => x"050c7472", +7844 => x"078c08ec", +7845 => x"050c5959", +7846 => x"5b5b5856", +7847 => x"0b0b0bff", +7848 => x"a2398c08", +7849 => x"f005088c", +7850 => x"08f40508", +7851 => x"250b0b0b", +7852 => x"0ba1388c", +7853 => x"08f40508", +7854 => x"8c08f005", +7855 => x"0c805480", +7856 => x"55738c08", +7857 => x"e0050c74", +7858 => x"8c08e405", +7859 => x"0c0b0b0b", +7860 => x"0b9b398c", +7861 => x"08f00508", +7862 => x"8c08f405", +7863 => x"0c805480", +7864 => x"55738c08", +7865 => x"e8050c74", +7866 => x"8c08ec05", +7867 => x"0c8c0888", +7868 => x"05088c08", +7869 => x"8c050855", +7870 => x"55841508", +7871 => x"8415082e", +7872 => x"0b0b0b85", +7873 => x"85388c08", +7874 => x"88050854", +7875 => x"84140880", +7876 => x"2e0b0b0b", +7877 => x"81bc388c", +7878 => x"08e00508", +7879 => x"8c08e405", +7880 => x"08565473", +7881 => x"8c08c805", +7882 => x"0c748c08", +7883 => x"cc050c8c", +7884 => x"08e80508", +7885 => x"8c08ec05", +7886 => x"08575574", +7887 => x"8c08c005", +7888 => x"0c758c08", +7889 => x"c4050c8c", +7890 => x"08cc0508", +7891 => x"8c08c405", +7892 => x"08717131", +7893 => x"708c08ff", +7894 => x"bc050c52", +7895 => x"5556810b", +7896 => x"8c08ffb4", +7897 => x"050c8c08", +7898 => x"ffbc0508", +7899 => x"8c08cc05", +7900 => x"08575574", +7901 => x"76260b0b", +7902 => x"0b0b8938", +7903 => x"800b8c08", +7904 => x"ffb4050c", +7905 => x"8c08c805", +7906 => x"088c08c0", +7907 => x"05087171", +7908 => x"31708c08", +7909 => x"ffb8050c", +7910 => x"8c08ffb8", +7911 => x"0508708c", +7912 => x"08ffb405", +7913 => x"0831708c", +7914 => x"08ffb805", +7915 => x"0c525952", +7916 => x"56548c08", +7917 => x"ffb80508", +7918 => x"8c08ffbc", +7919 => x"05085654", +7920 => x"738c08f8", +7921 => x"050c748c", +7922 => x"08fc050c", +7923 => x"0b0b0b81", +7924 => x"bf398c08", +7925 => x"e805088c", +7926 => x"08ec0508", +7927 => x"5755748c", +7928 => x"08ffac05", +7929 => x"0c758c08", +7930 => x"ffb0050c", +7931 => x"8c08e005", +7932 => x"088c08e4", +7933 => x"05085654", +7934 => x"738c08ff", +7935 => x"a4050c74", +7936 => x"8c08ffa8", +7937 => x"050c8c08", +7938 => x"ffb00508", +7939 => x"8c08ffa8", +7940 => x"05087171", +7941 => x"31708c08", +7942 => x"ffa0050c", +7943 => x"52575581", +7944 => x"0b8c08ff", +7945 => x"98050c8c", +7946 => x"08ffa005", +7947 => x"088c08ff", +7948 => x"b0050856", +7949 => x"54737526", +7950 => x"0b0b0b0b", +7951 => x"8938800b", +7952 => x"8c08ff98", +7953 => x"050c8c08", +7954 => x"ffac0508", +7955 => x"8c08ffa4", +7956 => x"05087171", +7957 => x"31708c08", +7958 => x"ff9c050c", +7959 => x"8c08ff9c", +7960 => x"0508708c", +7961 => x"08ff9805", +7962 => x"0831708c", +7963 => x"08ff9c05", +7964 => x"0c535852", +7965 => x"55568c08", +7966 => x"ff9c0508", +7967 => x"8c08ffa0", +7968 => x"05085654", +7969 => x"738c08f8", +7970 => x"050c748c", +7971 => x"08fc050c", +7972 => x"800b8c08", +7973 => x"f8050824", +7974 => x"0b0b0b0b", +7975 => x"ba388c08", +7976 => x"90050854", +7977 => x"800b8415", +7978 => x"0c8c0890", +7979 => x"05088c08", +7980 => x"f4050888", +7981 => x"120c8c08", +7982 => x"90050857", +7983 => x"548c08f8", +7984 => x"05088c08", +7985 => x"fc050856", +7986 => x"54738c17", +7987 => x"0c749017", +7988 => x"0c0b0b0b", +7989 => x"80d1398c", +7990 => x"08900508", +7991 => x"54810b84", +7992 => x"150c8c08", +7993 => x"9005088c", +7994 => x"08f40508", +7995 => x"88120c8c", +7996 => x"08900508", +7997 => x"8c08d405", +7998 => x"5858548c", +7999 => x"08f80508", +8000 => x"8c08fc05", +8001 => x"08565473", +8002 => x"52745375", +8003 => x"510b0b80", +8004 => x"cfcb3f8c", +8005 => x"08d40508", +8006 => x"8c08d805", +8007 => x"08565473", +8008 => x"8c180c74", +8009 => x"90180c8c", +8010 => x"08900508", +8011 => x"548c1408", +8012 => x"f00a260b", +8013 => x"0b0b82bb", +8014 => x"388c0890", +8015 => x"05088c11", +8016 => x"08709013", +8017 => x"08075155", +8018 => x"5573802e", +8019 => x"0b0b0b82", +8020 => x"a2388c08", +8021 => x"9005088c", +8022 => x"08900508", +8023 => x"9011089f", +8024 => x"2a8c1208", +8025 => x"10707207", +8026 => x"8c150c90", +8027 => x"13081090", +8028 => x"150c8c08", +8029 => x"90050888", +8030 => x"1108ff05", +8031 => x"88120c53", +8032 => x"58585557", +8033 => x"0b0b0bff", +8034 => x"9e398c08", +8035 => x"9005088c", +8036 => x"08880508", +8037 => x"84110884", +8038 => x"130c8c08", +8039 => x"9005088c", +8040 => x"08f40508", +8041 => x"88120c8c", +8042 => x"08900508", +8043 => x"8c08ff94", +8044 => x"050c5256", +8045 => x"548c08e8", +8046 => x"05088c08", +8047 => x"ec050857", +8048 => x"55748c08", +8049 => x"ff8c050c", +8050 => x"758c08ff", +8051 => x"90050c8c", +8052 => x"08e00508", +8053 => x"8c08e405", +8054 => x"08565473", +8055 => x"8c08ff84", +8056 => x"050c748c", +8057 => x"08ff8805", +8058 => x"0c8c08ff", +8059 => x"9005088c", +8060 => x"08ff8805", +8061 => x"08701270", +8062 => x"8c08ff80", +8063 => x"050c5257", +8064 => x"55810b8c", +8065 => x"08fef805", +8066 => x"0c8c08ff", +8067 => x"8005088c", +8068 => x"08ff9005", +8069 => x"08565474", +8070 => x"74260b0b", +8071 => x"0b0b8938", +8072 => x"800b8c08", +8073 => x"fef8050c", +8074 => x"8c08ff8c", +8075 => x"05088c08", +8076 => x"ff840508", +8077 => x"7012708c", +8078 => x"08fefc05", +8079 => x"0c8c08fe", +8080 => x"fc05088c", +8081 => x"08fef805", +8082 => x"0811708c", +8083 => x"08fefc05", +8084 => x"0c535852", +8085 => x"55568c08", +8086 => x"fefc0508", +8087 => x"8c08ff80", +8088 => x"05088c08", +8089 => x"ff940508", +8090 => x"58565473", +8091 => x"8c170c74", +8092 => x"90170c8c", +8093 => x"08900508", +8094 => x"5483740c", +8095 => x"8c089005", +8096 => x"08548c14", +8097 => x"08f80a26", +8098 => x"0b0b0b0b", +8099 => x"87380b0b", +8100 => x"0b80cf39", +8101 => x"8c089005", +8102 => x"088c0890", +8103 => x"05088c11", +8104 => x"08800690", +8105 => x"12088106", +8106 => x"8c089005", +8107 => x"088c1108", +8108 => x"9f2b9012", +8109 => x"08812a70", +8110 => x"72078c14", +8111 => x"08812a70", +8112 => x"77078c1a", +8113 => x"0c757207", +8114 => x"901a0c8c", +8115 => x"08900508", +8116 => x"88110881", +8117 => x"0588120c", +8118 => x"51575c5f", +8119 => x"5f5c5a58", +8120 => x"555b8c08", +8121 => x"90050870", +8122 => x"8c08d005", +8123 => x"0c548c08", +8124 => x"d0050880", +8125 => x"0cae3d0d", +8126 => x"8c0c048c", +8127 => x"08028c0c", +8128 => x"7070800b", +8129 => x"8c08fc05", +8130 => x"0c8c0888", +8131 => x"05085170", +8132 => x"08822e09", +8133 => x"81060b0b", +8134 => x"0b0b8838", +8135 => x"810b8c08", +8136 => x"fc050c8c", +8137 => x"08fc0508", +8138 => x"70800c51", +8139 => x"50508c0c", +8140 => x"048c0802", +8141 => x"8c0c700b", +8142 => x"0b82f4b8", +8143 => x"70800c51", +8144 => x"508c0c04", +8145 => x"8c08028c", +8146 => x"0c707080", +8147 => x"0b8c08fc", +8148 => x"050c8c08", +8149 => x"88050851", +8150 => x"7008842e", +8151 => x"0981060b", +8152 => x"0b0b0b88", +8153 => x"38810b8c", +8154 => x"08fc050c", +8155 => x"8c08fc05", +8156 => x"0870800c", +8157 => x"5150508c", +8158 => x"0c048c08", +8159 => x"028c0c70", +8160 => x"70800b8c", +8161 => x"08fc050c", +8162 => x"8c088805", +8163 => x"08517008", +8164 => x"802e0b0b", +8165 => x"0b0b9738", +8166 => x"8c088805", +8167 => x"08517008", +8168 => x"812e0b0b", +8169 => x"0b0b8738", +8170 => x"0b0b0b0b", +8171 => x"8839810b", +8172 => x"8c08fc05", +8173 => x"0c8c08fc", +8174 => x"05087080", +8175 => x"0c515050", +8176 => x"8c0c048c", +8177 => x"08028c0c", +8178 => x"e73d0d8c", +8179 => x"08880508", +8180 => x"568c088c", +8181 => x"05088c08", +8182 => x"90050856", +8183 => x"54738c08", +8184 => x"ffb8050c", +8185 => x"748c08ff", +8186 => x"bc050c8c", +8187 => x"08940508", +8188 => x"8c089805", +8189 => x"08565473", +8190 => x"8c08ffb0", +8191 => x"050c748c", +8192 => x"08ffb405", +8193 => x"0c8c08ec", +8194 => x"0570538c", +8195 => x"08ffb805", +8196 => x"70535154", +8197 => x"0b0b80de", +8198 => x"c13f8c08", +8199 => x"d8057053", +8200 => x"8c08ffb0", +8201 => x"05705351", +8202 => x"540b0b80", +8203 => x"deac3f8c", +8204 => x"08c40570", +8205 => x"548c08d8", +8206 => x"0570548c", +8207 => x"08ec0570", +8208 => x"54515154", +8209 => x"0b0b0bee", +8210 => x"ea3f8008", +8211 => x"708c08c0", +8212 => x"050c8c08", +8213 => x"c0050853", +8214 => x"7652540b", +8215 => x"0b80ccb8", +8216 => x"3f75800c", +8217 => x"9b3d0d8c", +8218 => x"0c048c08", +8219 => x"028c0ce7", +8220 => x"3d0d8c08", +8221 => x"88050856", +8222 => x"8c088c05", +8223 => x"088c0890", +8224 => x"05085654", +8225 => x"738c08ff", +8226 => x"b8050c74", +8227 => x"8c08ffbc", +8228 => x"050c8c08", +8229 => x"9405088c", +8230 => x"08980508", +8231 => x"5654738c", +8232 => x"08ffb005", +8233 => x"0c748c08", +8234 => x"ffb4050c", +8235 => x"8c08ec05", +8236 => x"70538c08", +8237 => x"ffb80570", +8238 => x"5351540b", +8239 => x"0b80dd9a", +8240 => x"3f8c08d8", +8241 => x"0570538c", +8242 => x"08ffb005", +8243 => x"70535154", +8244 => x"0b0b80dd", +8245 => x"853f8c08", +8246 => x"dc050881", +8247 => x"328c08dc", +8248 => x"050c8c08", +8249 => x"c4057054", +8250 => x"8c08d805", +8251 => x"70548c08", +8252 => x"ec057054", +8253 => x"5151540b", +8254 => x"0b0bedb7", +8255 => x"3f800870", +8256 => x"8c08c005", +8257 => x"0c8c08c0", +8258 => x"05085376", +8259 => x"52540b0b", +8260 => x"80cb853f", +8261 => x"75800c9b", +8262 => x"3d0d8c0c", +8263 => x"048c0802", +8264 => x"8c0cff83", +8265 => x"3d0d8c08", +8266 => x"8c05088c", +8267 => x"08900508", +8268 => x"5856758c", +8269 => x"08ffb805", +8270 => x"0c768c08", +8271 => x"ffbc050c", +8272 => x"8c089405", +8273 => x"088c0898", +8274 => x"05085856", +8275 => x"758c08ff", +8276 => x"b0050c76", +8277 => x"8c08ffb4", +8278 => x"050c8c08", +8279 => x"ec057053", +8280 => x"8c08ffb8", +8281 => x"05705351", +8282 => x"560b0b80", +8283 => x"dbec3f8c", +8284 => x"08d80570", +8285 => x"538c08ff", +8286 => x"b0057053", +8287 => x"51560b0b", +8288 => x"80dbd73f", +8289 => x"8c08ec05", +8290 => x"8c08ffac", +8291 => x"050c8c08", +8292 => x"d8058c08", +8293 => x"ffa8050c", +8294 => x"8c08c405", +8295 => x"8c08ffa4", +8296 => x"050c8056", +8297 => x"8057758c", +8298 => x"08ff9805", +8299 => x"0c768c08", +8300 => x"ff9c050c", +8301 => x"80568057", +8302 => x"758c08ff", +8303 => x"90050c76", +8304 => x"8c08ff94", +8305 => x"050c8c08", +8306 => x"ffac0508", +8307 => x"510b0b0b", +8308 => x"9d823f80", +8309 => x"08567580", +8310 => x"2e0b0b0b", +8311 => x"80da388c", +8312 => x"08ffac05", +8313 => x"088c08fe", +8314 => x"c4050c80", +8315 => x"0b8c08fe", +8316 => x"c0050c8c", +8317 => x"08ffac05", +8318 => x"088c08ff", +8319 => x"a8050857", +8320 => x"57841708", +8321 => x"8417082e", +8322 => x"0b0b0b0b", +8323 => x"8938810b", +8324 => x"8c08fec0", +8325 => x"050c8c08", +8326 => x"fec40508", +8327 => x"8c08fec0", +8328 => x"05088412", +8329 => x"0c8c08ff", +8330 => x"ac05088c", +8331 => x"08ffa005", +8332 => x"0c560b0b", +8333 => x"0b9af139", +8334 => x"8c08ffa8", +8335 => x"0508510b", +8336 => x"0b0b9c90", +8337 => x"3f800856", +8338 => x"75802e0b", +8339 => x"0b0b80da", +8340 => x"388c08ff", +8341 => x"a805088c", +8342 => x"08febc05", +8343 => x"0c800b8c", +8344 => x"08feb805", +8345 => x"0c8c08ff", +8346 => x"ac05088c", +8347 => x"08ffa805", +8348 => x"08575784", +8349 => x"17088417", +8350 => x"082e0b0b", +8351 => x"0b0b8938", +8352 => x"810b8c08", +8353 => x"feb8050c", +8354 => x"8c08febc", +8355 => x"05088c08", +8356 => x"feb80508", +8357 => x"84120c8c", +8358 => x"08ffa805", +8359 => x"088c08ff", +8360 => x"a0050c57", +8361 => x"0b0b0b99", +8362 => x"ff398c08", +8363 => x"ffac0508", +8364 => x"510b0b0b", +8365 => x"9ae83f80", +8366 => x"08567580", +8367 => x"2e0b0b0b", +8368 => x"8189388c", +8369 => x"08ffa805", +8370 => x"08510b0b", +8371 => x"0b9a993f", +8372 => x"80085675", +8373 => x"802e0b0b", +8374 => x"0b0b9738", +8375 => x"0b0b0b99", +8376 => x"f43f8008", +8377 => x"708c08ff", +8378 => x"a0050c56", +8379 => x"0b0b0b99", +8380 => x"b7398c08", +8381 => x"ffac0508", +8382 => x"8c08feb4", +8383 => x"050c800b", +8384 => x"8c08feb0", +8385 => x"050c8c08", +8386 => x"ffac0508", +8387 => x"8c08ffa8", +8388 => x"05085757", +8389 => x"84170884", +8390 => x"17082e0b", +8391 => x"0b0b0b89", +8392 => x"38810b8c", +8393 => x"08feb005", +8394 => x"0c8c08fe", +8395 => x"b405088c", +8396 => x"08feb005", +8397 => x"0884120c", +8398 => x"8c08ffac", +8399 => x"05088c08", +8400 => x"ffa0050c", +8401 => x"560b0b0b", +8402 => x"98de398c", +8403 => x"08ffa805", +8404 => x"08510b0b", +8405 => x"0b99c73f", +8406 => x"80085675", +8407 => x"802e0b0b", +8408 => x"0b818938", +8409 => x"8c08ffac", +8410 => x"0508510b", +8411 => x"0b0b98f8", +8412 => x"3f800856", +8413 => x"75802e0b", +8414 => x"0b0b0b97", +8415 => x"380b0b0b", +8416 => x"98d33f80", +8417 => x"08708c08", +8418 => x"ffa0050c", +8419 => x"560b0b0b", +8420 => x"9896398c", +8421 => x"08ffa805", +8422 => x"088c08fe", +8423 => x"ac050c80", +8424 => x"0b8c08fe", +8425 => x"a8050c8c", +8426 => x"08ffac05", +8427 => x"088c08ff", +8428 => x"a8050857", +8429 => x"57841708", +8430 => x"8417082e", +8431 => x"0b0b0b0b", +8432 => x"8938810b", +8433 => x"8c08fea8", +8434 => x"050c8c08", +8435 => x"feac0508", +8436 => x"8c08fea8", +8437 => x"05088412", +8438 => x"0c8c08ff", +8439 => x"a805088c", +8440 => x"08ffa005", +8441 => x"0c570b0b", +8442 => x"0b97bd39", +8443 => x"8c08ffac", +8444 => x"0508510b", +8445 => x"0b0b97f0", +8446 => x"3f800856", +8447 => x"75802e0b", +8448 => x"0b0b80da", +8449 => x"388c08ff", +8450 => x"ac05088c", +8451 => x"08fea405", +8452 => x"0c800b8c", +8453 => x"08fea005", +8454 => x"0c8c08ff", +8455 => x"ac05088c", +8456 => x"08ffa805", +8457 => x"08575784", +8458 => x"17088417", +8459 => x"082e0b0b", +8460 => x"0b0b8938", +8461 => x"810b8c08", +8462 => x"fea0050c", +8463 => x"8c08fea4", +8464 => x"05088c08", +8465 => x"fea00508", +8466 => x"84120c8c", +8467 => x"08ffac05", +8468 => x"088c08ff", +8469 => x"a0050c56", +8470 => x"0b0b0b96", +8471 => x"cb398c08", +8472 => x"ffa80508", +8473 => x"510b0b0b", +8474 => x"96fe3f80", +8475 => x"08567580", +8476 => x"2e0b0b0b", +8477 => x"80da388c", +8478 => x"08ffa805", +8479 => x"088c08fe", +8480 => x"9c050c80", +8481 => x"0b8c08fe", +8482 => x"98050c8c", +8483 => x"08ffac05", +8484 => x"088c08ff", +8485 => x"a8050857", +8486 => x"57841708", +8487 => x"8417082e", +8488 => x"0b0b0b0b", +8489 => x"8938810b", +8490 => x"8c08fe98", +8491 => x"050c8c08", +8492 => x"fe9c0508", +8493 => x"8c08fe98", +8494 => x"05088412", +8495 => x"0c8c08ff", +8496 => x"a805088c", +8497 => x"08ffa005", +8498 => x"0c570b0b", +8499 => x"0b95d939", +8500 => x"8c08ffac", +8501 => x"05089011", +8502 => x"088c08ff", +8503 => x"8c050c8c", +8504 => x"08ffac05", +8505 => x"088c1108", +8506 => x"802a5959", +8507 => x"5680778c", +8508 => x"08ff8805", +8509 => x"0c8c08ff", +8510 => x"a8050890", +8511 => x"11088c08", +8512 => x"ff84050c", +8513 => x"8c08ffa8", +8514 => x"05088c11", +8515 => x"08802a5a", +8516 => x"5a515680", +8517 => x"778c08ff", +8518 => x"80050c8c", +8519 => x"08ff8405", +8520 => x"085a5680", +8521 => x"0b8c08ff", +8522 => x"8c050858", +8523 => x"58800b8c", +8524 => x"08fef005", +8525 => x"5b567554", +8526 => x"76557752", +8527 => x"78537951", +8528 => x"0b0b0bbb", +8529 => x"b23f8c08", +8530 => x"fef00508", +8531 => x"8c08fef4", +8532 => x"05085856", +8533 => x"758c08fe", +8534 => x"f8050c76", +8535 => x"8c08fefc", +8536 => x"050c8c08", +8537 => x"ff800508", +8538 => x"59800b8c", +8539 => x"08ff8c05", +8540 => x"08585880", +8541 => x"0b8c08fe", +8542 => x"e8055b56", +8543 => x"75547655", +8544 => x"77527853", +8545 => x"79510b0b", +8546 => x"0bbaec3f", +8547 => x"8c08fee8", +8548 => x"05088c08", +8549 => x"feec0508", +8550 => x"5856758c", +8551 => x"08fef005", +8552 => x"0c768c08", +8553 => x"fef4050c", +8554 => x"8c08ff84", +8555 => x"05085980", +8556 => x"0b8c08ff", +8557 => x"88050858", +8558 => x"58800b8c", +8559 => x"08fee005", +8560 => x"5b567554", +8561 => x"76557752", +8562 => x"78537951", +8563 => x"0b0b0bba", +8564 => x"a63f8c08", +8565 => x"fee00508", +8566 => x"8c08fee4", +8567 => x"05085856", +8568 => x"758c08fe", +8569 => x"e8050c76", +8570 => x"8c08feec", +8571 => x"050c8c08", +8572 => x"ff800508", +8573 => x"59800b8c", +8574 => x"08ff8805", +8575 => x"08585880", +8576 => x"0b8c08fe", +8577 => x"d8055b56", +8578 => x"75547655", +8579 => x"77527853", +8580 => x"79510b0b", +8581 => x"0bb9e03f", +8582 => x"8c08fed8", +8583 => x"05088c08", +8584 => x"fedc0508", +8585 => x"5856758c", +8586 => x"08fee005", +8587 => x"0c768c08", +8588 => x"fee4050c", +8589 => x"80568057", +8590 => x"758c08fe", +8591 => x"d8050c76", +8592 => x"8c08fedc", +8593 => x"050c8056", +8594 => x"8057758c", +8595 => x"08fed005", +8596 => x"0c768c08", +8597 => x"fed4050c", +8598 => x"8c08fef0", +8599 => x"05088c08", +8600 => x"fef40508", +8601 => x"5856758c", +8602 => x"08fe9005", +8603 => x"0c768c08", +8604 => x"fe94050c", +8605 => x"8c08fee8", +8606 => x"05088c08", +8607 => x"feec0508", +8608 => x"5856758c", +8609 => x"08fe8805", +8610 => x"0c768c08", +8611 => x"fe8c050c", +8612 => x"8c08fe94", +8613 => x"05088c08", +8614 => x"fe8c0508", +8615 => x"7012708c", +8616 => x"08fe8405", +8617 => x"0c525757", +8618 => x"810b8c08", +8619 => x"fdfc050c", +8620 => x"8c08fe84", +8621 => x"05088c08", +8622 => x"fe940508", +8623 => x"57577577", +8624 => x"260b0b0b", +8625 => x"0b893880", +8626 => x"0b8c08fd", +8627 => x"fc050c8c", +8628 => x"08fe9005", +8629 => x"088c08fe", +8630 => x"88050870", +8631 => x"12708c08", +8632 => x"fe80050c", +8633 => x"8c08fe80", +8634 => x"05088c08", +8635 => x"fdfc0508", +8636 => x"11708c08", +8637 => x"fe80050c", +8638 => x"53515257", +8639 => x"578c08fe", +8640 => x"8005088c", +8641 => x"08fe8405", +8642 => x"08585675", +8643 => x"8c08fec8", +8644 => x"050c768c", +8645 => x"08fecc05", +8646 => x"0c8c08fe", +8647 => x"f005088c", +8648 => x"08fec805", +8649 => x"08260b0b", +8650 => x"0b0bb038", +8651 => x"8c08fef0", +8652 => x"05088c08", +8653 => x"fec80508", +8654 => x"2e098106", +8655 => x"0b0b0b81", +8656 => x"d1388c08", +8657 => x"fef40508", +8658 => x"8c08fecc", +8659 => x"0508260b", +8660 => x"0b0b0b87", +8661 => x"380b0b0b", +8662 => x"81b8398c", +8663 => x"08fed805", +8664 => x"088c08fe", +8665 => x"dc050858", +8666 => x"56758c08", +8667 => x"fdf4050c", +8668 => x"768c08fd", +8669 => x"f8050c81", +8670 => x"56805775", +8671 => x"8c08fdec", +8672 => x"050c768c", +8673 => x"08fdf005", +8674 => x"0c8c08fd", +8675 => x"f805088c", +8676 => x"08fdf005", +8677 => x"08701270", +8678 => x"8c08fde8", +8679 => x"050c5257", +8680 => x"57810b8c", +8681 => x"08fde005", +8682 => x"0c8c08fd", +8683 => x"e805088c", +8684 => x"08fdf805", +8685 => x"08575775", +8686 => x"77260b0b", +8687 => x"0b0b8938", +8688 => x"800b8c08", +8689 => x"fde0050c", +8690 => x"8c08fdf4", +8691 => x"05088c08", +8692 => x"fdec0508", +8693 => x"7012708c", +8694 => x"08fde405", +8695 => x"0c8c08fd", +8696 => x"e405088c", +8697 => x"08fde005", +8698 => x"0811708c", +8699 => x"08fde405", +8700 => x"0c535152", +8701 => x"57578c08", +8702 => x"fde40508", +8703 => x"8c08fde8", +8704 => x"05085856", +8705 => x"758c08fe", +8706 => x"d8050c76", +8707 => x"8c08fedc", +8708 => x"050c8c08", +8709 => x"fecc0508", +8710 => x"57807780", +8711 => x"2b8c08fe", +8712 => x"f0050c56", +8713 => x"800b8c08", +8714 => x"fef4050c", +8715 => x"8c08fef8", +8716 => x"05088c08", +8717 => x"fefc0508", +8718 => x"5856758c", +8719 => x"08fdd805", +8720 => x"0c768c08", +8721 => x"fddc050c", +8722 => x"8c08fef0", +8723 => x"05088c08", +8724 => x"fef40508", +8725 => x"5856758c", +8726 => x"08fdd005", +8727 => x"0c768c08", +8728 => x"fdd4050c", +8729 => x"8c08fddc", +8730 => x"05088c08", +8731 => x"fdd40508", +8732 => x"7012708c", +8733 => x"08fdcc05", +8734 => x"0c525757", +8735 => x"810b8c08", +8736 => x"fdc4050c", +8737 => x"8c08fdcc", +8738 => x"05088c08", +8739 => x"fddc0508", +8740 => x"57577577", +8741 => x"260b0b0b", +8742 => x"0b893880", +8743 => x"0b8c08fd", +8744 => x"c4050c8c", +8745 => x"08fdd805", +8746 => x"088c08fd", +8747 => x"d0050870", +8748 => x"12708c08", +8749 => x"fdc8050c", +8750 => x"8c08fdc8", +8751 => x"05088c08", +8752 => x"fdc40508", +8753 => x"11708c08", +8754 => x"fdc8050c", +8755 => x"53515257", +8756 => x"578c08fd", +8757 => x"c805088c", +8758 => x"08fdcc05", +8759 => x"08585675", +8760 => x"8c08fed0", +8761 => x"050c768c", +8762 => x"08fed405", +8763 => x"0c8c08fe", +8764 => x"f805088c", +8765 => x"08fed005", +8766 => x"08260b0b", +8767 => x"0b0bb038", +8768 => x"8c08fef8", +8769 => x"05088c08", +8770 => x"fed00508", +8771 => x"2e098106", +8772 => x"0b0b0b81", +8773 => x"d1388c08", +8774 => x"fefc0508", +8775 => x"8c08fed4", +8776 => x"0508260b", +8777 => x"0b0b0b87", +8778 => x"380b0b0b", +8779 => x"81b8398c", +8780 => x"08fed805", +8781 => x"088c08fe", +8782 => x"dc050858", +8783 => x"56758c08", +8784 => x"fdbc050c", +8785 => x"768c08fd", +8786 => x"c0050c80", +8787 => x"56815775", +8788 => x"8c08fdb4", +8789 => x"050c768c", +8790 => x"08fdb805", +8791 => x"0c8c08fd", +8792 => x"c005088c", +8793 => x"08fdb805", +8794 => x"08701270", +8795 => x"8c08fdb0", +8796 => x"050c5257", +8797 => x"57810b8c", +8798 => x"08fda805", +8799 => x"0c8c08fd", +8800 => x"b005088c", +8801 => x"08fdc005", +8802 => x"08575775", +8803 => x"77260b0b", +8804 => x"0b0b8938", +8805 => x"800b8c08", +8806 => x"fda8050c", +8807 => x"8c08fdbc", +8808 => x"05088c08", +8809 => x"fdb40508", +8810 => x"7012708c", +8811 => x"08fdac05", +8812 => x"0c8c08fd", +8813 => x"ac05088c", +8814 => x"08fda805", +8815 => x"0811708c", +8816 => x"08fdac05", +8817 => x"0c535152", +8818 => x"57578c08", +8819 => x"fdac0508", +8820 => x"8c08fdb0", +8821 => x"05085856", +8822 => x"758c08fe", +8823 => x"d8050c76", +8824 => x"8c08fedc", +8825 => x"050c8c08", +8826 => x"fec80508", +8827 => x"802a708c", +8828 => x"08fda405", +8829 => x"0c578070", +8830 => x"8c08fda0", +8831 => x"050c568c", +8832 => x"08fda005", +8833 => x"088c08fd", +8834 => x"a4050858", +8835 => x"56758c08", +8836 => x"fda0050c", +8837 => x"768c08fd", +8838 => x"a4050c8c", +8839 => x"08fee005", +8840 => x"088c08fe", +8841 => x"e4050858", +8842 => x"56758c08", +8843 => x"fd98050c", +8844 => x"768c08fd", +8845 => x"9c050c8c", +8846 => x"08fda405", +8847 => x"088c08fd", +8848 => x"9c050870", +8849 => x"12708c08", +8850 => x"fd94050c", +8851 => x"52575781", +8852 => x"0b8c08fd", +8853 => x"8c050c8c", +8854 => x"08fd9405", +8855 => x"088c08fd", +8856 => x"a4050857", +8857 => x"57757726", +8858 => x"0b0b0b0b", +8859 => x"8938800b", +8860 => x"8c08fd8c", +8861 => x"050c8c08", +8862 => x"fda00508", +8863 => x"8c08fd98", +8864 => x"05087012", +8865 => x"708c08fd", +8866 => x"90050c8c", +8867 => x"08fd9005", +8868 => x"088c08fd", +8869 => x"8c050811", +8870 => x"708c08fd", +8871 => x"90050c53", +8872 => x"51525757", +8873 => x"8c08fed8", +8874 => x"05088c08", +8875 => x"fedc0508", +8876 => x"5856758c", +8877 => x"08fd8405", +8878 => x"0c768c08", +8879 => x"fd88050c", +8880 => x"8c08fd88", +8881 => x"05088c08", +8882 => x"fd940508", +8883 => x"7012708c", +8884 => x"08fd8005", +8885 => x"0c525757", +8886 => x"810b8c08", +8887 => x"fcf8050c", +8888 => x"8c08fd80", +8889 => x"05088c08", +8890 => x"fd880508", +8891 => x"57577577", +8892 => x"260b0b0b", +8893 => x"0b893880", +8894 => x"0b8c08fc", +8895 => x"f8050c8c", +8896 => x"08fd8405", +8897 => x"088c08fd", +8898 => x"90050870", +8899 => x"12708c08", +8900 => x"fcfc050c", +8901 => x"8c08fcfc", +8902 => x"05088c08", +8903 => x"fcf80508", +8904 => x"11708c08", +8905 => x"fcfc050c", +8906 => x"53515257", +8907 => x"578c08fc", +8908 => x"fc05088c", +8909 => x"08fd8005", +8910 => x"08585675", +8911 => x"8c08fed8", +8912 => x"050c768c", +8913 => x"08fedc05", +8914 => x"0c8c08fe", +8915 => x"d805088c", +8916 => x"08fedc05", +8917 => x"08585675", +8918 => x"8c08ff90", +8919 => x"050c768c", +8920 => x"08ff9405", +8921 => x"0c8c08fe", +8922 => x"d005088c", +8923 => x"08fed405", +8924 => x"08585675", +8925 => x"8c08ff98", +8926 => x"050c768c", +8927 => x"08ff9c05", +8928 => x"0c8c08ff", +8929 => x"a405088c", +8930 => x"08ffac05", +8931 => x"088c08ff", +8932 => x"a8050888", +8933 => x"12088812", +8934 => x"08058411", +8935 => x"88150c8c", +8936 => x"08ffa405", +8937 => x"088c08fc", +8938 => x"f4050c51", +8939 => x"58585880", +8940 => x"0b8c08fc", +8941 => x"f0050c8c", +8942 => x"08ffac05", +8943 => x"088c08ff", +8944 => x"a8050857", +8945 => x"57841708", +8946 => x"8417082e", +8947 => x"0b0b0b0b", +8948 => x"8938810b", +8949 => x"8c08fcf0", +8950 => x"050c8c08", +8951 => x"fcf40508", +8952 => x"8c08fcf0", +8953 => x"05088412", +8954 => x"0c578c08", +8955 => x"ff900508", +8956 => x"f80a260b", +8957 => x"0b0b0b87", +8958 => x"380b0b0b", +8959 => x"81ae398c", +8960 => x"08ffa405", +8961 => x"08881108", +8962 => x"81058812", +8963 => x"0c8c08ff", +8964 => x"90050880", +8965 => x"068c08ff", +8966 => x"94050881", +8967 => x"06705259", +8968 => x"51567580", +8969 => x"2e0b0b0b", +8970 => x"80cf388c", +8971 => x"08ff9805", +8972 => x"089f2b8c", +8973 => x"08ff9c05", +8974 => x"08812a70", +8975 => x"72078c08", +8976 => x"ff980508", +8977 => x"812a5959", +8978 => x"5959758c", +8979 => x"08ff9805", +8980 => x"0c768c08", +8981 => x"ff9c050c", +8982 => x"8c08ff98", +8983 => x"0508810a", +8984 => x"078c08ff", +8985 => x"9c050880", +8986 => x"07585675", +8987 => x"8c08ff98", +8988 => x"050c768c", +8989 => x"08ff9c05", +8990 => x"0c8c08ff", +8991 => x"9005089f", +8992 => x"2b8c08ff", +8993 => x"94050881", +8994 => x"2a707207", +8995 => x"8c08ff90", +8996 => x"0508812a", +8997 => x"59595959", +8998 => x"758c08ff", +8999 => x"90050c76", +9000 => x"8c08ff94", +9001 => x"050c0b0b", +9002 => x"0bfebf39", +9003 => x"8c08ff90", +9004 => x"0508f00a", +9005 => x"260b0b0b", +9006 => x"81a1388c", +9007 => x"08ffa405", +9008 => x"08881108", +9009 => x"ff058812", +9010 => x"0c8c08ff", +9011 => x"9405089f", +9012 => x"2a8c08ff", +9013 => x"90050810", +9014 => x"7072078c", +9015 => x"08ff9405", +9016 => x"08105b53", +9017 => x"5a5a5675", +9018 => x"8c08ff90", +9019 => x"050c768c", +9020 => x"08ff9405", +9021 => x"0c800b8c", +9022 => x"08ff9805", +9023 => x"08240b0b", +9024 => x"0b0b8738", +9025 => x"0b0b0b0b", +9026 => x"a1398c08", +9027 => x"ff900508", +9028 => x"80078c08", +9029 => x"ff940508", +9030 => x"81075856", +9031 => x"758c08ff", +9032 => x"90050c76", +9033 => x"8c08ff94", +9034 => x"050c8c08", +9035 => x"ff9c0508", +9036 => x"9f2a8c08", +9037 => x"ff980508", +9038 => x"10707207", +9039 => x"8c08ff9c", +9040 => x"0508105a", +9041 => x"58595975", +9042 => x"8c08ff98", +9043 => x"050c768c", +9044 => x"08ff9c05", +9045 => x"0c0b0b0b", +9046 => x"fed2398c", +9047 => x"08ff9005", +9048 => x"08800670", +9049 => x"8c08fce8", +9050 => x"050c8c08", +9051 => x"ff940508", +9052 => x"81ff0670", +9053 => x"8c08fcec", +9054 => x"050c5856", +9055 => x"8c08fce8", +9056 => x"05088c08", +9057 => x"fcec0508", +9058 => x"5856758c", +9059 => x"08fce805", +9060 => x"0c768c08", +9061 => x"fcec050c", +9062 => x"8c08fce8", +9063 => x"05085776", +9064 => x"0b0b0b83", +9065 => x"d0388c08", +9066 => x"fcec0508", +9067 => x"56758180", +9068 => x"2e098106", +9069 => x"0b0b0b83", +9070 => x"bc388c08", +9071 => x"ff900508", +9072 => x"982b8c08", +9073 => x"ff940508", +9074 => x"882a7072", +9075 => x"078c08ff", +9076 => x"90050888", +9077 => x"2a718106", +9078 => x"51595959", +9079 => x"5975802e", +9080 => x"0b0b0b81", +9081 => x"bf388c08", +9082 => x"ff900508", +9083 => x"8c08ff94", +9084 => x"05085856", +9085 => x"758c08fc", +9086 => x"e0050c76", +9087 => x"8c08fce4", +9088 => x"050c8056", +9089 => x"81805775", +9090 => x"8c08fcd8", +9091 => x"050c768c", +9092 => x"08fcdc05", +9093 => x"0c8c08fc", +9094 => x"e405088c", +9095 => x"08fcdc05", +9096 => x"08701270", +9097 => x"8c08fcd4", +9098 => x"050c5257", +9099 => x"57810b8c", +9100 => x"08fccc05", +9101 => x"0c8c08fc", +9102 => x"d405088c", +9103 => x"08fce405", +9104 => x"08575775", +9105 => x"77260b0b", +9106 => x"0b0b8938", +9107 => x"800b8c08", +9108 => x"fccc050c", +9109 => x"8c08fce0", +9110 => x"05088c08", +9111 => x"fcd80508", +9112 => x"7012708c", +9113 => x"08fcd005", +9114 => x"0c8c08fc", +9115 => x"d005088c", +9116 => x"08fccc05", +9117 => x"0811708c", +9118 => x"08fcd005", +9119 => x"0c535152", +9120 => x"57578c08", +9121 => x"fcd00508", +9122 => x"8c08fcd4", +9123 => x"05085856", +9124 => x"758c08ff", +9125 => x"90050c76", +9126 => x"8c08ff94", +9127 => x"050c0b0b", +9128 => x"0b81d239", +9129 => x"8c08ff98", +9130 => x"0508708c", +9131 => x"08ff9c05", +9132 => x"08075156", +9133 => x"75802e0b", +9134 => x"0b0b81b9", +9135 => x"388c08ff", +9136 => x"9005088c", +9137 => x"08ff9405", +9138 => x"08585675", +9139 => x"8c08fcc4", +9140 => x"050c768c", +9141 => x"08fcc805", +9142 => x"0c805681", +9143 => x"8057758c", +9144 => x"08fcbc05", +9145 => x"0c768c08", +9146 => x"fcc0050c", +9147 => x"8c08fcc8", +9148 => x"05088c08", +9149 => x"fcc00508", +9150 => x"7012708c", +9151 => x"08fcb805", +9152 => x"0c525757", +9153 => x"810b8c08", +9154 => x"fcb0050c", +9155 => x"8c08fcb8", +9156 => x"05088c08", +9157 => x"fcc80508", +9158 => x"57577577", +9159 => x"260b0b0b", +9160 => x"0b893880", +9161 => x"0b8c08fc", +9162 => x"b0050c8c", +9163 => x"08fcc405", +9164 => x"088c08fc", +9165 => x"bc050870", +9166 => x"12708c08", +9167 => x"fcb4050c", +9168 => x"8c08fcb4", +9169 => x"05088c08", +9170 => x"fcb00508", +9171 => x"11708c08", +9172 => x"fcb4050c", +9173 => x"53515257", +9174 => x"578c08fc", +9175 => x"b405088c", +9176 => x"08fcb805", +9177 => x"08585675", +9178 => x"8c08ff90", +9179 => x"050c768c", +9180 => x"08ff9405", +9181 => x"0c8c08ff", +9182 => x"a4050856", +9183 => x"8c08ff90", +9184 => x"05088c08", +9185 => x"ff940508", +9186 => x"5957768c", +9187 => x"170c7790", +9188 => x"170c8c08", +9189 => x"ffa40508", +9190 => x"5683760c", +9191 => x"8c08ffa4", +9192 => x"05088c08", +9193 => x"ffa0050c", +9194 => x"8c08ffa0", +9195 => x"0508708c", +9196 => x"08c0050c", +9197 => x"8c08c005", +9198 => x"08538c08", +9199 => x"88050852", +9200 => x"560b0b0b", +9201 => x"add23f8c", +9202 => x"08880508", +9203 => x"800c80ff", +9204 => x"3d0d8c0c", +9205 => x"048c0802", +9206 => x"8c0c700b", +9207 => x"0b82f4b8", +9208 => x"70800c51", +9209 => x"508c0c04", +9210 => x"8c08028c", +9211 => x"0c707080", +9212 => x"0b8c08fc", +9213 => x"050c8c08", +9214 => x"88050851", +9215 => x"7008822e", +9216 => x"0981060b", +9217 => x"0b0b0b88", +9218 => x"38810b8c", +9219 => x"08fc050c", +9220 => x"8c08fc05", +9221 => x"0870800c", +9222 => x"5150508c", +9223 => x"0c048c08", +9224 => x"028c0c70", +9225 => x"70800b8c", +9226 => x"08fc050c", +9227 => x"8c088805", +9228 => x"08517008", +9229 => x"842e0981", +9230 => x"060b0b0b", +9231 => x"0b883881", +9232 => x"0b8c08fc", +9233 => x"050c8c08", +9234 => x"fc050870", +9235 => x"800c5150", +9236 => x"508c0c04", +9237 => x"8c08028c", +9238 => x"0c707080", +9239 => x"0b8c08fc", +9240 => x"050c8c08", +9241 => x"88050851", +9242 => x"7008802e", +9243 => x"0b0b0b0b", +9244 => x"97388c08", +9245 => x"88050851", +9246 => x"7008812e", +9247 => x"0b0b0b0b", +9248 => x"87380b0b", +9249 => x"0b0b8839", +9250 => x"810b8c08", +9251 => x"fc050c8c", +9252 => x"08fc0508", +9253 => x"70800c51", +9254 => x"50508c0c", +9255 => x"048c0802", +9256 => x"8c0cffbc", +9257 => x"3d0d8c08", +9258 => x"8c05088c", +9259 => x"08900508", +9260 => x"5553728c", +9261 => x"08cc050c", +9262 => x"738c08d0", +9263 => x"050c8c08", +9264 => x"9405088c", +9265 => x"08980508", +9266 => x"5553728c", +9267 => x"08c4050c", +9268 => x"738c08c8", +9269 => x"050c8c08", +9270 => x"ec057053", +9271 => x"8c08cc05", +9272 => x"70535153", +9273 => x"0b0b0bbc", +9274 => x"f13f8c08", +9275 => x"d8057053", +9276 => x"8c08c405", +9277 => x"70535153", +9278 => x"0b0b0bbc", +9279 => x"dd3f8c08", +9280 => x"ec058c08", +9281 => x"c0050c8c", +9282 => x"08d8058c", +9283 => x"08ffbc05", +9284 => x"0c8c08c0", +9285 => x"0508510b", +9286 => x"0b0b9084", +9287 => x"3f800853", +9288 => x"72802e0b", +9289 => x"0b0b0b92", +9290 => x"388c08c0", +9291 => x"05088c08", +9292 => x"ffb8050c", +9293 => x"0b0b0b8e", +9294 => x"bb398c08", +9295 => x"ffbc0508", +9296 => x"510b0b0b", +9297 => x"8fda3f80", +9298 => x"08537280", +9299 => x"2e0b0b0b", +9300 => x"0b93388c", +9301 => x"08ffbc05", +9302 => x"088c08ff", +9303 => x"b8050c0b", +9304 => x"0b0b8e90", +9305 => x"398c08c0", +9306 => x"05088c08", +9307 => x"c005088c", +9308 => x"08ffbc05", +9309 => x"08841208", +9310 => x"84120832", +9311 => x"84140c8c", +9312 => x"08c00508", +9313 => x"54555555", +9314 => x"0b0b0b8e", +9315 => x"dd3f8008", +9316 => x"53720b0b", +9317 => x"0b0b9d38", +9318 => x"8c08c005", +9319 => x"08510b0b", +9320 => x"0b8e913f", +9321 => x"80085372", +9322 => x"0b0b0b0b", +9323 => x"87380b0b", +9324 => x"0b80c339", +9325 => x"8c08c005", +9326 => x"088c08ff", +9327 => x"bc050854", +9328 => x"54730873", +9329 => x"082e0981", +9330 => x"060b0b0b", +9331 => x"0b97380b", +9332 => x"0b0b8dcd", +9333 => x"3f800870", +9334 => x"8c08ffb8", +9335 => x"050c530b", +9336 => x"0b0b8d90", +9337 => x"398c08c0", +9338 => x"05088c08", +9339 => x"ffb8050c", +9340 => x"0b0b0b8c", +9341 => x"ff398c08", +9342 => x"ffbc0508", +9343 => x"510b0b0b", +9344 => x"8de83f80", +9345 => x"08537280", +9346 => x"2e0b0b0b", +9347 => x"0baf388c", +9348 => x"08c00508", +9349 => x"53805480", +9350 => x"55738c14", +9351 => x"0c749014", +9352 => x"0c8c08c0", +9353 => x"05085380", +9354 => x"0b88140c", +9355 => x"8c08c005", +9356 => x"088c08ff", +9357 => x"b8050c0b", +9358 => x"0b0b8cb8", +9359 => x"398c08ff", +9360 => x"bc050851", +9361 => x"0b0b0b8c", +9362 => x"eb3f8008", +9363 => x"5372802e", +9364 => x"0b0b0b0b", +9365 => x"9b388c08", +9366 => x"c0050853", +9367 => x"84730c8c", +9368 => x"08c00508", +9369 => x"8c08ffb8", +9370 => x"050c0b0b", +9371 => x"0b8c8539", +9372 => x"8c08c005", +9373 => x"088c08c0", +9374 => x"05088c08", +9375 => x"ffbc0508", +9376 => x"88120888", +9377 => x"12083188", +9378 => x"140c8c08", +9379 => x"c0050851", +9380 => x"55555590", +9381 => x"13088c14", +9382 => x"08545472", +9383 => x"8c08ffa8", +9384 => x"050c738c", +9385 => x"08ffac05", +9386 => x"0c8c08ff", +9387 => x"bc050853", +9388 => x"9013088c", +9389 => x"14085454", +9390 => x"728c08ff", +9391 => x"a0050c73", +9392 => x"8c08ffa4", +9393 => x"050c8c08", +9394 => x"ffa00508", +9395 => x"8c08ffa8", +9396 => x"0508260b", +9397 => x"0b0b0bb0", +9398 => x"388c08ff", +9399 => x"a005088c", +9400 => x"08ffa805", +9401 => x"082e0981", +9402 => x"060b0b0b", +9403 => x"81e9388c", +9404 => x"08ffa405", +9405 => x"088c08ff", +9406 => x"ac050826", +9407 => x"0b0b0b0b", +9408 => x"87380b0b", +9409 => x"0b81d039", +9410 => x"8c08ffa8", +9411 => x"05088c08", +9412 => x"ffac0508", +9413 => x"5553728c", +9414 => x"08ff9005", +9415 => x"0c738c08", +9416 => x"ff94050c", +9417 => x"8c08ff90", +9418 => x"05088c08", +9419 => x"ff940508", +9420 => x"5553728c", +9421 => x"08ff8805", +9422 => x"0c738c08", +9423 => x"ff8c050c", +9424 => x"8c08ff8c", +9425 => x"05088c08", +9426 => x"ff940508", +9427 => x"7012708c", +9428 => x"08ff8405", +9429 => x"0c525454", +9430 => x"810b8c08", +9431 => x"fefc050c", +9432 => x"8c08ff84", +9433 => x"05088c08", +9434 => x"ff8c0508", +9435 => x"54547274", +9436 => x"260b0b0b", +9437 => x"0b893880", +9438 => x"0b8c08fe", +9439 => x"fc050c8c", +9440 => x"08ff8805", +9441 => x"088c08ff", +9442 => x"90050870", +9443 => x"12708c08", +9444 => x"ff80050c", +9445 => x"8c08ff80", +9446 => x"05088c08", +9447 => x"fefc0508", +9448 => x"11708c08", +9449 => x"ff80050c", +9450 => x"53515254", +9451 => x"548c08ff", +9452 => x"8005088c", +9453 => x"08ff8405", +9454 => x"08555372", +9455 => x"8c08ffa8", +9456 => x"050c738c", +9457 => x"08ffac05", +9458 => x"0c8c08c0", +9459 => x"05088811", +9460 => x"08ff0588", +9461 => x"120c5388", +9462 => x"0a538054", +9463 => x"728c08ff", +9464 => x"b0050c73", +9465 => x"8c08ffb4", +9466 => x"050c8053", +9467 => x"8054728c", +9468 => x"08ff9805", +9469 => x"0c738c08", +9470 => x"ff9c050c", +9471 => x"8c08ffb0", +9472 => x"0508708c", +9473 => x"08ffb405", +9474 => x"08075153", +9475 => x"72802e0b", +9476 => x"0b0b849f", +9477 => x"388c08ff", +9478 => x"a005088c", +9479 => x"08ffa805", +9480 => x"08260b0b", +9481 => x"0b829838", +9482 => x"8c08ffa0", +9483 => x"05088c08", +9484 => x"ffa80508", +9485 => x"2e098106", +9486 => x"0b0b0b0b", +9487 => x"94388c08", +9488 => x"ffa40508", +9489 => x"8c08ffac", +9490 => x"0508260b", +9491 => x"0b0b81ef", +9492 => x"388c08ff", +9493 => x"9805088c", +9494 => x"08ffb005", +9495 => x"08078c08", +9496 => x"ff9c0508", +9497 => x"8c08ffb4", +9498 => x"05080755", +9499 => x"53728c08", +9500 => x"ff98050c", +9501 => x"738c08ff", +9502 => x"9c050c8c", +9503 => x"08ffa805", +9504 => x"088c08ff", +9505 => x"ac050855", +9506 => x"53728c08", +9507 => x"fef4050c", +9508 => x"738c08fe", +9509 => x"f8050c8c", +9510 => x"08ffa005", +9511 => x"088c08ff", +9512 => x"a4050855", +9513 => x"53728c08", +9514 => x"feec050c", +9515 => x"738c08fe", +9516 => x"f0050c8c", +9517 => x"08fef805", +9518 => x"088c08fe", +9519 => x"f0050871", +9520 => x"7131708c", +9521 => x"08fee805", +9522 => x"0c525454", +9523 => x"810b8c08", +9524 => x"fee0050c", +9525 => x"8c08fee8", +9526 => x"05088c08", +9527 => x"fef80508", +9528 => x"54547373", +9529 => x"260b0b0b", +9530 => x"0b893880", +9531 => x"0b8c08fe", +9532 => x"e0050c8c", +9533 => x"08fef405", +9534 => x"088c08fe", +9535 => x"ec050871", +9536 => x"7131708c", +9537 => x"08fee405", +9538 => x"0c8c08fe", +9539 => x"e4050870", +9540 => x"8c08fee0", +9541 => x"05083170", +9542 => x"8c08fee4", +9543 => x"050c5351", +9544 => x"5254548c", +9545 => x"08fee405", +9546 => x"088c08fe", +9547 => x"e8050855", +9548 => x"53728c08", +9549 => x"ffa8050c", +9550 => x"738c08ff", +9551 => x"ac050c8c", +9552 => x"08ffb005", +9553 => x"089f2b8c", +9554 => x"08ffb405", +9555 => x"08812a70", +9556 => x"72078c08", +9557 => x"ffb00508", +9558 => x"812a5656", +9559 => x"5656728c", +9560 => x"08ffb005", +9561 => x"0c738c08", +9562 => x"ffb4050c", +9563 => x"8c08ffa8", +9564 => x"05088c08", +9565 => x"ffac0508", +9566 => x"5553728c", +9567 => x"08fed805", +9568 => x"0c738c08", +9569 => x"fedc050c", +9570 => x"8c08fed8", +9571 => x"05088c08", +9572 => x"fedc0508", +9573 => x"5553728c", +9574 => x"08fed005", +9575 => x"0c738c08", +9576 => x"fed4050c", +9577 => x"8c08fed4", +9578 => x"05088c08", +9579 => x"fedc0508", +9580 => x"7012708c", +9581 => x"08fecc05", +9582 => x"0c525454", +9583 => x"810b8c08", +9584 => x"fec4050c", +9585 => x"8c08fecc", +9586 => x"05088c08", +9587 => x"fed40508", +9588 => x"54547274", +9589 => x"260b0b0b", +9590 => x"0b893880", +9591 => x"0b8c08fe", +9592 => x"c4050c8c", +9593 => x"08fed005", +9594 => x"088c08fe", +9595 => x"d8050870", +9596 => x"12708c08", +9597 => x"fec8050c", +9598 => x"8c08fec8", +9599 => x"05088c08", +9600 => x"fec40508", +9601 => x"11708c08", +9602 => x"fec8050c", +9603 => x"53515254", +9604 => x"548c08fe", +9605 => x"c805088c", +9606 => x"08fecc05", +9607 => x"08555372", +9608 => x"8c08ffa8", +9609 => x"050c738c", +9610 => x"08ffac05", +9611 => x"0c0b0b0b", +9612 => x"fbca398c", +9613 => x"08ff9805", +9614 => x"08800670", +9615 => x"8c08febc", +9616 => x"050c8c08", +9617 => x"ff9c0508", +9618 => x"81ff0670", +9619 => x"8c08fec0", +9620 => x"050c5454", +9621 => x"8c08febc", +9622 => x"05088c08", +9623 => x"fec00508", +9624 => x"5553728c", +9625 => x"08febc05", +9626 => x"0c738c08", +9627 => x"fec0050c", +9628 => x"8c08febc", +9629 => x"05085473", +9630 => x"0b0b0b83", +9631 => x"d0388c08", +9632 => x"fec00508", +9633 => x"53728180", +9634 => x"2e098106", +9635 => x"0b0b0b83", +9636 => x"bc388c08", +9637 => x"ff980508", +9638 => x"982b8c08", +9639 => x"ff9c0508", +9640 => x"882a7072", +9641 => x"078c08ff", +9642 => x"98050888", +9643 => x"2a718106", +9644 => x"51565656", +9645 => x"5672802e", +9646 => x"0b0b0b81", +9647 => x"bf388c08", +9648 => x"ff980508", +9649 => x"8c08ff9c", +9650 => x"05085553", +9651 => x"728c08fe", +9652 => x"b4050c73", +9653 => x"8c08feb8", +9654 => x"050c8053", +9655 => x"81805472", +9656 => x"8c08feac", +9657 => x"050c738c", +9658 => x"08feb005", +9659 => x"0c8c08fe", +9660 => x"b805088c", +9661 => x"08feb005", +9662 => x"08701270", +9663 => x"8c08fea8", +9664 => x"050c5254", +9665 => x"54810b8c", +9666 => x"08fea005", +9667 => x"0c8c08fe", +9668 => x"a805088c", +9669 => x"08feb805", +9670 => x"08545472", +9671 => x"74260b0b", +9672 => x"0b0b8938", +9673 => x"800b8c08", +9674 => x"fea0050c", +9675 => x"8c08feb4", +9676 => x"05088c08", +9677 => x"feac0508", +9678 => x"7012708c", +9679 => x"08fea405", +9680 => x"0c8c08fe", +9681 => x"a405088c", +9682 => x"08fea005", +9683 => x"0811708c", +9684 => x"08fea405", +9685 => x"0c535152", +9686 => x"54548c08", +9687 => x"fea40508", +9688 => x"8c08fea8", +9689 => x"05085553", +9690 => x"728c08ff", +9691 => x"98050c73", +9692 => x"8c08ff9c", +9693 => x"050c0b0b", +9694 => x"0b81d239", +9695 => x"8c08ffa8", +9696 => x"0508708c", +9697 => x"08ffac05", +9698 => x"08075153", +9699 => x"72802e0b", +9700 => x"0b0b81b9", +9701 => x"388c08ff", +9702 => x"9805088c", +9703 => x"08ff9c05", +9704 => x"08555372", +9705 => x"8c08fe98", +9706 => x"050c738c", +9707 => x"08fe9c05", +9708 => x"0c805381", +9709 => x"8054728c", +9710 => x"08fe9005", +9711 => x"0c738c08", +9712 => x"fe94050c", +9713 => x"8c08fe9c", +9714 => x"05088c08", +9715 => x"fe940508", +9716 => x"7012708c", +9717 => x"08fe8c05", +9718 => x"0c525454", +9719 => x"810b8c08", +9720 => x"fe84050c", +9721 => x"8c08fe8c", +9722 => x"05088c08", +9723 => x"fe9c0508", +9724 => x"54547274", +9725 => x"260b0b0b", +9726 => x"0b893880", +9727 => x"0b8c08fe", +9728 => x"84050c8c", +9729 => x"08fe9805", +9730 => x"088c08fe", +9731 => x"90050870", +9732 => x"12708c08", +9733 => x"fe88050c", +9734 => x"8c08fe88", +9735 => x"05088c08", +9736 => x"fe840508", +9737 => x"11708c08", +9738 => x"fe88050c", +9739 => x"53515254", +9740 => x"548c08fe", +9741 => x"8805088c", +9742 => x"08fe8c05", +9743 => x"08555372", +9744 => x"8c08ff98", +9745 => x"050c738c", +9746 => x"08ff9c05", +9747 => x"0c8c08c0", +9748 => x"0508558c", +9749 => x"08ff9805", +9750 => x"088c08ff", +9751 => x"9c050855", +9752 => x"53728c16", +9753 => x"0c739016", +9754 => x"0c8c08c0", +9755 => x"05088c08", +9756 => x"ffb8050c", +9757 => x"8c08ffb8", +9758 => x"0508708c", +9759 => x"08d4050c", +9760 => x"8c08d405", +9761 => x"08538c08", +9762 => x"88050852", +9763 => x"530b0b0b", +9764 => x"9c863f8c", +9765 => x"08880508", +9766 => x"800c80c6", +9767 => x"3d0d8c0c", +9768 => x"048c0802", +9769 => x"8c0c700b", +9770 => x"0b82f4b8", +9771 => x"70800c51", +9772 => x"508c0c04", +9773 => x"8c08028c", +9774 => x"0c707080", +9775 => x"0b8c08fc", +9776 => x"050c8c08", +9777 => x"88050851", +9778 => x"7008822e", +9779 => x"0981060b", +9780 => x"0b0b0b88", +9781 => x"38810b8c", +9782 => x"08fc050c", +9783 => x"8c08fc05", +9784 => x"0870800c", +9785 => x"5150508c", +9786 => x"0c048c08", +9787 => x"028c0c70", +9788 => x"70800b8c", +9789 => x"08fc050c", +9790 => x"8c088805", +9791 => x"08517008", +9792 => x"842e0981", +9793 => x"060b0b0b", +9794 => x"0b883881", +9795 => x"0b8c08fc", +9796 => x"050c8c08", +9797 => x"fc050870", +9798 => x"800c5150", +9799 => x"508c0c04", +9800 => x"8c08028c", +9801 => x"0c707080", +9802 => x"0b8c08fc", +9803 => x"050c8c08", +9804 => x"88050851", +9805 => x"7008802e", +9806 => x"0b0b0b0b", +9807 => x"97388c08", +9808 => x"88050851", +9809 => x"7008812e", +9810 => x"0b0b0b0b", +9811 => x"87380b0b", +9812 => x"0b0b8839", +9813 => x"810b8c08", +9814 => x"fc050c8c", +9815 => x"08fc0508", +9816 => x"70800c51", +9817 => x"50508c0c", +9818 => x"048c0802", +9819 => x"8c0cee3d", +9820 => x"0d8c0888", +9821 => x"05088c08", +9822 => x"8c050855", +9823 => x"53728c08", +9824 => x"d0050c73", +9825 => x"8c08d405", +9826 => x"0c8c0890", +9827 => x"05088c08", +9828 => x"94050855", +9829 => x"53728c08", +9830 => x"c8050c73", +9831 => x"8c08cc05", +9832 => x"0c8c08ec", +9833 => x"0570538c", +9834 => x"08d00570", +9835 => x"5351530b", +9836 => x"0b0baba6", +9837 => x"3f8c08d8", +9838 => x"0570538c", +9839 => x"08c80570", +9840 => x"5351530b", +9841 => x"0b0bab92", +9842 => x"3f8c08ec", +9843 => x"05705253", +9844 => x"0b0b0b80", +9845 => x"df3f8008", +9846 => x"53720b0b", +9847 => x"0b0b9e38", +9848 => x"8c08d805", +9849 => x"7052530b", +9850 => x"0b0b80c8", +9851 => x"3f800853", +9852 => x"720b0b0b", +9853 => x"0b87380b", +9854 => x"0b0b0b8e", +9855 => x"39810b8c", +9856 => x"08c4050c", +9857 => x"0b0b0b0b", +9858 => x"9e398c08", +9859 => x"d8057053", +9860 => x"8c08ec05", +9861 => x"70535153", +9862 => x"0b0b0bae", +9863 => x"c53f8008", +9864 => x"708c08c4", +9865 => x"050c538c", +9866 => x"08c40508", +9867 => x"800c943d", +9868 => x"0d8c0c04", +9869 => x"8c08028c", +9870 => x"0c707080", +9871 => x"0b8c08fc", +9872 => x"050c8c08", +9873 => x"88050851", +9874 => x"7008802e", +9875 => x"0b0b0b0b", +9876 => x"97388c08", +9877 => x"88050851", +9878 => x"7008812e", +9879 => x"0b0b0b0b", +9880 => x"87380b0b", +9881 => x"0b0b8839", +9882 => x"810b8c08", +9883 => x"fc050c8c", +9884 => x"08fc0508", +9885 => x"70800c51", +9886 => x"50508c0c", +9887 => x"048c0802", +9888 => x"8c0cee3d", +9889 => x"0d8c0888", +9890 => x"05088c08", +9891 => x"8c050855", +9892 => x"53728c08", +9893 => x"d0050c73", +9894 => x"8c08d405", +9895 => x"0c8c0890", +9896 => x"05088c08", +9897 => x"94050855", +9898 => x"53728c08", +9899 => x"c8050c73", +9900 => x"8c08cc05", +9901 => x"0c8c08ec", +9902 => x"0570538c", +9903 => x"08d00570", +9904 => x"5351530b", +9905 => x"0b0ba992", +9906 => x"3f8c08d8", +9907 => x"0570538c", +9908 => x"08c80570", +9909 => x"5351530b", +9910 => x"0b0ba8fe", +9911 => x"3f8c08ec", +9912 => x"05705253", +9913 => x"0b0b0b80", +9914 => x"df3f8008", +9915 => x"53720b0b", +9916 => x"0b0b9e38", +9917 => x"8c08d805", +9918 => x"7052530b", +9919 => x"0b0b80c8", +9920 => x"3f800853", +9921 => x"720b0b0b", +9922 => x"0b87380b", +9923 => x"0b0b0b8e", +9924 => x"39810b8c", +9925 => x"08c4050c", +9926 => x"0b0b0b0b", +9927 => x"9e398c08", +9928 => x"d8057053", +9929 => x"8c08ec05", +9930 => x"70535153", +9931 => x"0b0b0bac", +9932 => x"b13f8008", +9933 => x"708c08c4", +9934 => x"050c538c", +9935 => x"08c40508", +9936 => x"800c943d", +9937 => x"0d8c0c04", +9938 => x"8c08028c", +9939 => x"0c707080", +9940 => x"0b8c08fc", +9941 => x"050c8c08", +9942 => x"88050851", +9943 => x"7008802e", +9944 => x"0b0b0b0b", +9945 => x"97388c08", +9946 => x"88050851", +9947 => x"7008812e", +9948 => x"0b0b0b0b", +9949 => x"87380b0b", +9950 => x"0b0b8839", +9951 => x"810b8c08", +9952 => x"fc050c8c", +9953 => x"08fc0508", +9954 => x"70800c51", +9955 => x"50508c0c", +9956 => x"048c0802", +9957 => x"8c0cee3d", +9958 => x"0d8c0888", +9959 => x"05088c08", +9960 => x"8c050855", +9961 => x"53728c08", +9962 => x"d0050c73", +9963 => x"8c08d405", +9964 => x"0c8c0890", +9965 => x"05088c08", +9966 => x"94050855", +9967 => x"53728c08", +9968 => x"c8050c73", +9969 => x"8c08cc05", +9970 => x"0c8c08ec", +9971 => x"0570538c", +9972 => x"08d00570", +9973 => x"5351530b", +9974 => x"0b0ba6fe", +9975 => x"3f8c08d8", +9976 => x"0570538c", +9977 => x"08c80570", +9978 => x"5351530b", +9979 => x"0b0ba6ea", +9980 => x"3f8c08ec", +9981 => x"05705253", +9982 => x"0b0b0b80", +9983 => x"df3f8008", +9984 => x"53720b0b", +9985 => x"0b0b9e38", +9986 => x"8c08d805", +9987 => x"7052530b", +9988 => x"0b0b80c8", +9989 => x"3f800853", +9990 => x"720b0b0b", +9991 => x"0b87380b", +9992 => x"0b0b0b8e", +9993 => x"39ff0b8c", +9994 => x"08c4050c", +9995 => x"0b0b0b0b", +9996 => x"9e398c08", +9997 => x"d8057053", +9998 => x"8c08ec05", +9999 => x"70535153", +10000 => x"0b0b0baa", +10001 => x"9d3f8008", +10002 => x"708c08c4", +10003 => x"050c538c", +10004 => x"08c40508", +10005 => x"800c943d", +10006 => x"0d8c0c04", +10007 => x"8c08028c", +10008 => x"0c707080", +10009 => x"0b8c08fc", +10010 => x"050c8c08", +10011 => x"88050851", +10012 => x"7008802e", +10013 => x"0b0b0b0b", +10014 => x"97388c08", +10015 => x"88050851", +10016 => x"7008812e", +10017 => x"0b0b0b0b", +10018 => x"87380b0b", +10019 => x"0b0b8839", +10020 => x"810b8c08", +10021 => x"fc050c8c", +10022 => x"08fc0508", +10023 => x"70800c51", +10024 => x"50508c0c", +10025 => x"048c0802", +10026 => x"8c0cee3d", +10027 => x"0d8c0888", +10028 => x"05088c08", +10029 => x"8c050855", +10030 => x"53728c08", +10031 => x"d0050c73", +10032 => x"8c08d405", +10033 => x"0c8c0890", +10034 => x"05088c08", +10035 => x"94050855", +10036 => x"53728c08", +10037 => x"c8050c73", +10038 => x"8c08cc05", +10039 => x"0c8c08ec", +10040 => x"0570538c", +10041 => x"08d00570", +10042 => x"5351530b", +10043 => x"0b0ba4ea", +10044 => x"3f8c08d8", +10045 => x"0570538c", +10046 => x"08c80570", +10047 => x"5351530b", +10048 => x"0b0ba4d6", +10049 => x"3f8c08ec", +10050 => x"05705253", +10051 => x"0b0b0b80", +10052 => x"df3f8008", +10053 => x"53720b0b", +10054 => x"0b0b9e38", +10055 => x"8c08d805", +10056 => x"7052530b", +10057 => x"0b0b80c8", +10058 => x"3f800853", +10059 => x"720b0b0b", +10060 => x"0b87380b", +10061 => x"0b0b0b8e", +10062 => x"39810b8c", +10063 => x"08c4050c", +10064 => x"0b0b0b0b", +10065 => x"9e398c08", +10066 => x"d8057053", +10067 => x"8c08ec05", +10068 => x"70535153", +10069 => x"0b0b0ba8", +10070 => x"893f8008", +10071 => x"708c08c4", +10072 => x"050c538c", +10073 => x"08c40508", +10074 => x"800c943d", +10075 => x"0d8c0c04", +10076 => x"8c08028c", +10077 => x"0c707080", +10078 => x"0b8c08fc", +10079 => x"050c8c08", +10080 => x"88050851", +10081 => x"7008802e", +10082 => x"0b0b0b0b", +10083 => x"97388c08", +10084 => x"88050851", +10085 => x"7008812e", +10086 => x"0b0b0b0b", +10087 => x"87380b0b", +10088 => x"0b0b8839", +10089 => x"810b8c08", +10090 => x"fc050c8c", +10091 => x"08fc0508", +10092 => x"70800c51", +10093 => x"50508c0c", +10094 => x"048c0802", +10095 => x"8c0cee3d", +10096 => x"0d8c0888", +10097 => x"05088c08", +10098 => x"8c050855", +10099 => x"53728c08", +10100 => x"d0050c73", +10101 => x"8c08d405", +10102 => x"0c8c0890", +10103 => x"05088c08", +10104 => x"94050855", +10105 => x"53728c08", +10106 => x"c8050c73", +10107 => x"8c08cc05", +10108 => x"0c8c08ec", +10109 => x"0570538c", +10110 => x"08d00570", +10111 => x"5351530b", +10112 => x"0b0ba2d6", +10113 => x"3f8c08d8", +10114 => x"0570538c", +10115 => x"08c80570", +10116 => x"5351530b", +10117 => x"0b0ba2c2", +10118 => x"3f8c08ec", +10119 => x"05705253", +10120 => x"0b0b0b80", +10121 => x"df3f8008", +10122 => x"53720b0b", +10123 => x"0b0b9e38", +10124 => x"8c08d805", +10125 => x"7052530b", +10126 => x"0b0b80c8", +10127 => x"3f800853", +10128 => x"720b0b0b", +10129 => x"0b87380b", +10130 => x"0b0b0b8e", +10131 => x"39810b8c", +10132 => x"08c4050c", +10133 => x"0b0b0b0b", +10134 => x"9e398c08", +10135 => x"d8057053", +10136 => x"8c08ec05", +10137 => x"70535153", +10138 => x"0b0b0ba5", +10139 => x"f53f8008", +10140 => x"708c08c4", +10141 => x"050c538c", +10142 => x"08c40508", +10143 => x"800c943d", +10144 => x"0d8c0c04", +10145 => x"8c08028c", +10146 => x"0c707080", +10147 => x"0b8c08fc", +10148 => x"050c8c08", +10149 => x"88050851", +10150 => x"7008802e", +10151 => x"0b0b0b0b", +10152 => x"97388c08", +10153 => x"88050851", +10154 => x"7008812e", +10155 => x"0b0b0b0b", +10156 => x"87380b0b", +10157 => x"0b0b8839", +10158 => x"810b8c08", +10159 => x"fc050c8c", +10160 => x"08fc0508", +10161 => x"70800c51", +10162 => x"50508c0c", +10163 => x"048c0802", +10164 => x"8c0cf63d", +10165 => x"0d830b8c", +10166 => x"08ec050c", +10167 => x"800b8c08", +10168 => x"e8050c8c", +10169 => x"088c0508", +10170 => x"80250b0b", +10171 => x"0b0b8838", +10172 => x"810b8c08", +10173 => x"e8050c8c", +10174 => x"08e80508", +10175 => x"8c08f005", +10176 => x"0c8c088c", +10177 => x"05080b0b", +10178 => x"0b0b8e38", +10179 => x"820b8c08", +10180 => x"ec050c0b", +10181 => x"0b0b81b5", +10182 => x"39bc0b8c", +10183 => x"08f4050c", +10184 => x"8c08f005", +10185 => x"08802e0b", +10186 => x"0b0b80c9", +10187 => x"388c088c", +10188 => x"0508810a", +10189 => x"2e098106", +10190 => x"0b0b0b0b", +10191 => x"9b388f83", +10192 => x"0a53800b", +10193 => x"8c088805", +10194 => x"08565472", +10195 => x"750c7384", +10196 => x"160c0b0b", +10197 => x"0b818939", +10198 => x"8c088c05", +10199 => x"0830708c", +10200 => x"08fc050c", +10201 => x"709f2c70", +10202 => x"8c08f805", +10203 => x"0c51530b", +10204 => x"0b0b0b97", +10205 => x"398c088c", +10206 => x"0508708c", +10207 => x"08fc050c", +10208 => x"709f2c70", +10209 => x"8c08f805", +10210 => x"0c51538c", +10211 => x"08f80508", +10212 => x"f00a260b", +10213 => x"0b0b0bb5", +10214 => x"388c08fc", +10215 => x"05089f2a", +10216 => x"8c08f805", +10217 => x"08107072", +10218 => x"078c08f8", +10219 => x"050c8c08", +10220 => x"fc050810", +10221 => x"8c08fc05", +10222 => x"0c8c08f4", +10223 => x"0508ff05", +10224 => x"8c08f405", +10225 => x"0c54540b", +10226 => x"0b0bffbf", +10227 => x"398c08ec", +10228 => x"0570538c", +10229 => x"08880508", +10230 => x"52530b0b", +10231 => x"0b8db93f", +10232 => x"8c088805", +10233 => x"08800c8c", +10234 => x"3d0d8c0c", +10235 => x"048c0802", +10236 => x"8c0cec3d", +10237 => x"0d8c0888", +10238 => x"05088c08", +10239 => x"8c050857", +10240 => x"55748c08", +10241 => x"e0050c75", +10242 => x"8c08e405", +10243 => x"0c8c08ec", +10244 => x"0570538c", +10245 => x"08e00570", +10246 => x"5351550b", +10247 => x"0b0b9eba", +10248 => x"3f8c08ec", +10249 => x"05705255", +10250 => x"0b0b0b83", +10251 => x"d93f8008", +10252 => x"5574802e", +10253 => x"0b0b0b0b", +10254 => x"8e38800b", +10255 => x"8c08d405", +10256 => x"0c0b0b0b", +10257 => x"82b4398c", +10258 => x"08ec0570", +10259 => x"52550b0b", +10260 => x"0b82ea3f", +10261 => x"80085574", +10262 => x"802e0b0b", +10263 => x"0b0b8e38", +10264 => x"800b8c08", +10265 => x"d4050c0b", +10266 => x"0b0b828e", +10267 => x"398c08ec", +10268 => x"05705255", +10269 => x"0b0b0b82", +10270 => x"8e3f8008", +10271 => x"5574802e", +10272 => x"0b0b0b0b", +10273 => x"b4388c08", +10274 => x"f0050880", +10275 => x"2e0b0b0b", +10276 => x"0b8f3881", +10277 => x"0a0b8c08", +10278 => x"d0050c0b", +10279 => x"0b0b0b89", +10280 => x"39fe0a0b", +10281 => x"8c08d005", +10282 => x"0c8c08d0", +10283 => x"05088c08", +10284 => x"d4050c0b", +10285 => x"0b0b81c2", +10286 => x"398c08f4", +10287 => x"05088025", +10288 => x"0b0b0b0b", +10289 => x"8e38800b", +10290 => x"8c08d405", +10291 => x"0c0b0b0b", +10292 => x"81a8399e", +10293 => x"0b8c08f4", +10294 => x"0508250b", +10295 => x"0b0b0bb4", +10296 => x"388c08f0", +10297 => x"0508802e", +10298 => x"0b0b0b0b", +10299 => x"8f38810a", +10300 => x"0b8c08cc", +10301 => x"050c0b0b", +10302 => x"0b0b8939", +10303 => x"fe0a0b8c", +10304 => x"08cc050c", +10305 => x"8c08cc05", +10306 => x"088c08d4", +10307 => x"050c0b0b", +10308 => x"0b80e739", +10309 => x"bc0b8c08", +10310 => x"f4050831", +10311 => x"8c08d805", +10312 => x"71565855", +10313 => x"8c08f805", +10314 => x"088c08fc", +10315 => x"05085755", +10316 => x"74527553", +10317 => x"76510b0b", +10318 => x"0b88d53f", +10319 => x"8c08d805", +10320 => x"088c08dc", +10321 => x"0508708c", +10322 => x"08e8050c", +10323 => x"8c08e805", +10324 => x"088c08c8", +10325 => x"050c5755", +10326 => x"8c08f005", +10327 => x"08802e0b", +10328 => x"0b0b0b8c", +10329 => x"388c08c8", +10330 => x"0508308c", +10331 => x"08c8050c", +10332 => x"8c08c805", +10333 => x"088c08d4", +10334 => x"050c8c08", +10335 => x"d4050880", +10336 => x"0c963d0d", +10337 => x"8c0c048c", +10338 => x"08028c0c", +10339 => x"7070800b", +10340 => x"8c08fc05", +10341 => x"0c8c0888", +10342 => x"05085170", +10343 => x"08842e09", +10344 => x"81060b0b", +10345 => x"0b0b8838", +10346 => x"810b8c08", +10347 => x"fc050c8c", +10348 => x"08fc0508", +10349 => x"70800c51", +10350 => x"50508c0c", +10351 => x"048c0802", +10352 => x"8c0c7070", +10353 => x"800b8c08", +10354 => x"fc050c8c", +10355 => x"08880508", +10356 => x"51700880", +10357 => x"2e0b0b0b", +10358 => x"0b97388c", +10359 => x"08880508", +10360 => x"51700881", +10361 => x"2e0b0b0b", +10362 => x"0b87380b", +10363 => x"0b0b0b88", +10364 => x"39810b8c", +10365 => x"08fc050c", +10366 => x"8c08fc05", +10367 => x"0870800c", +10368 => x"5150508c", +10369 => x"0c048c08", +10370 => x"028c0c70", +10371 => x"70800b8c", +10372 => x"08fc050c", +10373 => x"8c088805", +10374 => x"08517008", +10375 => x"822e0981", +10376 => x"060b0b0b", +10377 => x"0b883881", +10378 => x"0b8c08fc", +10379 => x"050c8c08", +10380 => x"fc050870", +10381 => x"800c5150", +10382 => x"508c0c04", +10383 => x"8c08028c", +10384 => x"0c707070", +10385 => x"7080538c", +10386 => x"088c0508", +10387 => x"528c0888", +10388 => x"0508510b", +10389 => x"0bfdccbf", +10390 => x"3f800870", +10391 => x"800c5450", +10392 => x"5050508c", +10393 => x"0c048c08", +10394 => x"028c0c70", +10395 => x"70707081", +10396 => x"538c088c", +10397 => x"0508528c", +10398 => x"08880508", +10399 => x"510b0bfd", +10400 => x"cc953f80", +10401 => x"0870800c", +10402 => x"54505050", +10403 => x"508c0c04", +10404 => x"8c08028c", +10405 => x"0c707080", +10406 => x"0b8c08fc", +10407 => x"050c8c08", +10408 => x"88050881", +10409 => x"06ff1170", +10410 => x"09708c08", +10411 => x"8c050806", +10412 => x"8c08fc05", +10413 => x"08118c08", +10414 => x"fc050c8c", +10415 => x"08880508", +10416 => x"812a8c08", +10417 => x"88050c8c", +10418 => x"088c0508", +10419 => x"108c088c", +10420 => x"050c5151", +10421 => x"51518c08", +10422 => x"88050880", +10423 => x"2e0b0b0b", +10424 => x"0b87380b", +10425 => x"0b0bffb6", +10426 => x"398c08fc", +10427 => x"05087080", +10428 => x"0c515050", +10429 => x"8c0c048c", +10430 => x"08028c0c", +10431 => x"eb3d0d80", +10432 => x"0b8c08f0", +10433 => x"050c800b", +10434 => x"8c08f405", +10435 => x"0c8c088c", +10436 => x"05088c08", +10437 => x"90050856", +10438 => x"54738c08", +10439 => x"f0050c74", +10440 => x"8c08f405", +10441 => x"0c8c08f8", +10442 => x"058c08f0", +10443 => x"05565688", +10444 => x"70547553", +10445 => x"7652540b", +10446 => x"0bfdcccf", +10447 => x"3f800b8c", +10448 => x"08e8050c", +10449 => x"800b8c08", +10450 => x"ec050c8c", +10451 => x"08940508", +10452 => x"8c089805", +10453 => x"08565473", +10454 => x"8c08e805", +10455 => x"0c748c08", +10456 => x"ec050c8c", +10457 => x"08f0058c", +10458 => x"08e80556", +10459 => x"56887054", +10460 => x"75537652", +10461 => x"540b0bfd", +10462 => x"cc913f80", +10463 => x"0b8c08e8", +10464 => x"050c800b", +10465 => x"8c08ec05", +10466 => x"0c8c08fc", +10467 => x"050883ff", +10468 => x"ff068c08", +10469 => x"cc050c8c", +10470 => x"08fc0508", +10471 => x"902a8c08", +10472 => x"c4050c8c", +10473 => x"08f40508", +10474 => x"83ffff06", +10475 => x"8c08c805", +10476 => x"0c8c08f4", +10477 => x"0508902a", +10478 => x"8c08c005", +10479 => x"0c8c08cc", +10480 => x"05088c08", +10481 => x"c8050829", +10482 => x"708c08dc", +10483 => x"050c8c08", +10484 => x"cc05088c", +10485 => x"08c00508", +10486 => x"29708c08", +10487 => x"d8050c8c", +10488 => x"08c40508", +10489 => x"8c08c805", +10490 => x"0829708c", +10491 => x"08d4050c", +10492 => x"8c08c405", +10493 => x"088c08c0", +10494 => x"05082970", +10495 => x"8c08d005", +10496 => x"0c8c08dc", +10497 => x"0508902a", +10498 => x"8c08d805", +10499 => x"08118c08", +10500 => x"d8050c8c", +10501 => x"08d80508", +10502 => x"8c08d405", +10503 => x"08058c08", +10504 => x"d8050c51", +10505 => x"51515154", +10506 => x"8c08d805", +10507 => x"088c08d4", +10508 => x"0508270b", +10509 => x"0b0b0b8f", +10510 => x"388c08d0", +10511 => x"05088480", +10512 => x"80058c08", +10513 => x"d0050c8c", +10514 => x"08d80508", +10515 => x"902a8c08", +10516 => x"d0050811", +10517 => x"8c08e005", +10518 => x"0c8c08d8", +10519 => x"050883ff", +10520 => x"ff067090", +10521 => x"2b8c08dc", +10522 => x"050883ff", +10523 => x"ff067012", +10524 => x"8c08e405", +10525 => x"0c525751", +10526 => x"548c08e0", +10527 => x"05088c08", +10528 => x"e4050856", +10529 => x"54738c08", +10530 => x"e8050c74", +10531 => x"8c08ec05", +10532 => x"0c8c08fc", +10533 => x"05088c08", +10534 => x"f0050829", +10535 => x"8c08f805", +10536 => x"088c08f4", +10537 => x"05082970", +10538 => x"128c08e8", +10539 => x"0508118c", +10540 => x"08e8050c", +10541 => x"5155558c", +10542 => x"08e80508", +10543 => x"8c08ec05", +10544 => x"088c0888", +10545 => x"05085856", +10546 => x"5473760c", +10547 => x"7484170c", +10548 => x"8c088805", +10549 => x"08800c97", +10550 => x"3d0d8c0c", +10551 => x"048c0802", +10552 => x"8c0cf63d", +10553 => x"0d800b8c", +10554 => x"08f0050c", +10555 => x"800b8c08", +10556 => x"f4050c8c", +10557 => x"088c0508", +10558 => x"8c089005", +10559 => x"08565473", +10560 => x"8c08f005", +10561 => x"0c748c08", +10562 => x"f4050c8c", +10563 => x"08f8058c", +10564 => x"08f00556", +10565 => x"56887054", +10566 => x"75537652", +10567 => x"540b0bfd", +10568 => x"c8e93f80", +10569 => x"0b8c08f0", +10570 => x"050c800b", +10571 => x"8c08f405", +10572 => x"0c8c08f8", +10573 => x"0508308c", +10574 => x"08ec050c", +10575 => x"8c08fc05", +10576 => x"08802e0b", +10577 => x"0b0b0b8d", +10578 => x"388c08ec", +10579 => x"0508ff05", +10580 => x"8c08ec05", +10581 => x"0c8c08ec", +10582 => x"05088c08", +10583 => x"f0050c8c", +10584 => x"08fc0508", +10585 => x"308c08f4", +10586 => x"050c8c08", +10587 => x"f005088c", +10588 => x"08f40508", +10589 => x"8c088805", +10590 => x"08585654", +10591 => x"73760c74", +10592 => x"84170c8c", +10593 => x"08880508", +10594 => x"800c8c3d", +10595 => x"0d8c0c04", +10596 => x"8c08028c", +10597 => x"0cf53d0d", +10598 => x"8c089405", +10599 => x"080b0b0b", +10600 => x"0ba0388c", +10601 => x"088c0508", +10602 => x"8c089005", +10603 => x"088c0888", +10604 => x"05085856", +10605 => x"5473760c", +10606 => x"7484170c", +10607 => x"0b0b0b81", +10608 => x"ca39800b", +10609 => x"8c08f005", +10610 => x"0c800b8c", +10611 => x"08f4050c", +10612 => x"8c088c05", +10613 => x"088c0890", +10614 => x"05085654", +10615 => x"738c08f0", +10616 => x"050c748c", +10617 => x"08f4050c", +10618 => x"8c08f805", +10619 => x"8c08f005", +10620 => x"56568870", +10621 => x"54755376", +10622 => x"52540b0b", +10623 => x"fdc78c3f", +10624 => x"a00b8c08", +10625 => x"94050831", +10626 => x"8c08ec05", +10627 => x"0c8c08ec", +10628 => x"05088024", +10629 => x"0b0b0b0b", +10630 => x"a138800b", +10631 => x"8c08f005", +10632 => x"0c8c08ec", +10633 => x"0508308c", +10634 => x"08f80508", +10635 => x"712a8c08", +10636 => x"f4050c54", +10637 => x"0b0b0b0b", +10638 => x"b9398c08", +10639 => x"f805088c", +10640 => x"08ec0508", +10641 => x"2b8c08e8", +10642 => x"050c8c08", +10643 => x"f805088c", +10644 => x"08940508", +10645 => x"2a8c08f0", +10646 => x"050c8c08", +10647 => x"fc05088c", +10648 => x"08940508", +10649 => x"2a708c08", +10650 => x"e8050807", +10651 => x"8c08f405", +10652 => x"0c548c08", +10653 => x"f005088c", +10654 => x"08f40508", +10655 => x"8c088805", +10656 => x"08585654", +10657 => x"73760c74", +10658 => x"84170c8c", +10659 => x"08880508", +10660 => x"800c8d3d", +10661 => x"0d8c0c04", +10662 => x"8c08028c", +10663 => x"0cc73d0d", +10664 => x"8c088c05", +10665 => x"08559015", +10666 => x"088c1608", +10667 => x"5656748c", +10668 => x"08f0050c", +10669 => x"758c08f4", +10670 => x"050c8c08", +10671 => x"8c050884", +10672 => x"11088c08", +10673 => x"ec050c55", +10674 => x"800b8c08", +10675 => x"e8050c8c", +10676 => x"088c0508", +10677 => x"510b0b0b", +10678 => x"90b73f80", +10679 => x"08557480", +10680 => x"2e0b0b0b", +10681 => x"0bad388f", +10682 => x"ff0b8c08", +10683 => x"e8050c8c", +10684 => x"08f00508", +10685 => x"a0808007", +10686 => x"8c08f405", +10687 => x"08800757", +10688 => x"55748c08", +10689 => x"f0050c75", +10690 => x"8c08f405", +10691 => x"0c0b0b0b", +10692 => x"8df4398c", +10693 => x"088c0508", +10694 => x"510b0b0b", +10695 => x"8fbd3f80", +10696 => x"08557480", +10697 => x"2e0b0b0b", +10698 => x"0b9f388f", +10699 => x"ff0b8c08", +10700 => x"e8050c80", +10701 => x"55805674", +10702 => x"8c08f005", +10703 => x"0c758c08", +10704 => x"f4050c0b", +10705 => x"0b0b8dbe", +10706 => x"398c088c", +10707 => x"0508510b", +10708 => x"0b0b8ed1", +10709 => x"3f800855", +10710 => x"74802e0b", +10711 => x"0b0b0b9e", +10712 => x"38800b8c", +10713 => x"08e8050c", +10714 => x"80558056", +10715 => x"748c08f0", +10716 => x"050c758c", +10717 => x"08f4050c", +10718 => x"0b0b0b8d", +10719 => x"89398c08", +10720 => x"f0050870", +10721 => x"8c08f405", +10722 => x"08075155", +10723 => x"740b0b0b", +10724 => x"0b8e3880", +10725 => x"0b8c08e8", +10726 => x"050c0b0b", +10727 => x"0b8ce739", +10728 => x"8c088c05", +10729 => x"08558815", +10730 => x"08f88225", +10731 => x"0b0b0b87", +10732 => x"af388c08", +10733 => x"8c0508f8", +10734 => x"820b8812", +10735 => x"08318c08", +10736 => x"e4050c55", +10737 => x"800b8c08", +10738 => x"e8050cb8", +10739 => x"0b8c08e4", +10740 => x"0508250b", +10741 => x"0b0b0b97", +10742 => x"38805580", +10743 => x"56748c08", +10744 => x"f0050c75", +10745 => x"8c08f405", +10746 => x"0c0b0b0b", +10747 => x"82b03980", +10748 => x"0b8c08e0", +10749 => x"050c8c08", +10750 => x"d8055780", +10751 => x"55810b8c", +10752 => x"08e40508", +10753 => x"55567452", +10754 => x"75537651", +10755 => x"0b0bfdbc", +10756 => x"ab3f8c08", +10757 => x"d805088c", +10758 => x"08dc0508", +10759 => x"5755748c", +10760 => x"08d0050c", +10761 => x"758c08d4", +10762 => x"050cff56", +10763 => x"ff57758c", +10764 => x"08c8050c", +10765 => x"768c08cc", +10766 => x"050c8c08", +10767 => x"d405088c", +10768 => x"08cc0508", +10769 => x"7012708c", +10770 => x"08c4050c", +10771 => x"52565781", +10772 => x"0b8c08ff", +10773 => x"bc050c8c", +10774 => x"08c40508", +10775 => x"8c08d405", +10776 => x"08585676", +10777 => x"76260b0b", +10778 => x"0b0b8938", +10779 => x"800b8c08", +10780 => x"ffbc050c", +10781 => x"8c08d005", +10782 => x"088c08c8", +10783 => x"05087012", +10784 => x"708c08c0", +10785 => x"050c8c08", +10786 => x"c005088c", +10787 => x"08ffbc05", +10788 => x"0811708c", +10789 => x"08c0050c", +10790 => x"8c08c005", +10791 => x"08708c08", +10792 => x"f0050806", +10793 => x"8c08c405", +10794 => x"08708c08", +10795 => x"f4050806", +10796 => x"72707207", +10797 => x"51525752", +10798 => x"5252525a", +10799 => x"52575576", +10800 => x"802e0b0b", +10801 => x"0b0b8838", +10802 => x"810b8c08", +10803 => x"e0050c8c", +10804 => x"08d8058c", +10805 => x"08e40508", +10806 => x"55578c08", +10807 => x"f005088c", +10808 => x"08f40508", +10809 => x"57557452", +10810 => x"75537651", +10811 => x"0b0b0bf9", +10812 => x"9f3f8c08", +10813 => x"d805088c", +10814 => x"08dc0508", +10815 => x"8c08e005", +10816 => x"089f2c8c", +10817 => x"08e00508", +10818 => x"71707507", +10819 => x"8c08f005", +10820 => x"0c737207", +10821 => x"8c08f405", +10822 => x"0c59595b", +10823 => x"59578c08", +10824 => x"f0050880", +10825 => x"06708c08", +10826 => x"ffb4050c", +10827 => x"8c08f405", +10828 => x"0881ff06", +10829 => x"708c08ff", +10830 => x"b8050c57", +10831 => x"558c08ff", +10832 => x"b405088c", +10833 => x"08ffb805", +10834 => x"08575574", +10835 => x"8c08ffb4", +10836 => x"050c758c", +10837 => x"08ffb805", +10838 => x"0c8c08ff", +10839 => x"b4050856", +10840 => x"750b0b0b", +10841 => x"81f8388c", +10842 => x"08ffb805", +10843 => x"08577681", +10844 => x"802e0981", +10845 => x"060b0b0b", +10846 => x"81e4388c", +10847 => x"08f00508", +10848 => x"982b8c08", +10849 => x"f4050888", +10850 => x"2a707207", +10851 => x"8c08f005", +10852 => x"08882a71", +10853 => x"81065158", +10854 => x"58585874", +10855 => x"802e0b0b", +10856 => x"0b82ef38", +10857 => x"8c08f005", +10858 => x"088c08f4", +10859 => x"05085755", +10860 => x"748c08ff", +10861 => x"ac050c75", +10862 => x"8c08ffb0", +10863 => x"050c8056", +10864 => x"81805775", +10865 => x"8c08ffa4", +10866 => x"050c768c", +10867 => x"08ffa805", +10868 => x"0c8c08ff", +10869 => x"b005088c", +10870 => x"08ffa805", +10871 => x"08701270", +10872 => x"8c08ffa0", +10873 => x"050c5256", +10874 => x"57810b8c", +10875 => x"08ff9805", +10876 => x"0c8c08ff", +10877 => x"a005088c", +10878 => x"08ffb005", +10879 => x"08585676", +10880 => x"76260b0b", +10881 => x"0b0b8938", +10882 => x"800b8c08", +10883 => x"ff98050c", +10884 => x"8c08ffac", +10885 => x"05088c08", +10886 => x"ffa40508", +10887 => x"7012708c", +10888 => x"08ff9c05", +10889 => x"0c8c08ff", +10890 => x"9c05088c", +10891 => x"08ff9805", +10892 => x"0811708c", +10893 => x"08ff9c05", +10894 => x"0c525a52", +10895 => x"57558c08", +10896 => x"ff9c0508", +10897 => x"8c08ffa0", +10898 => x"05085755", +10899 => x"748c08f0", +10900 => x"050c758c", +10901 => x"08f4050c", +10902 => x"0b0b0b81", +10903 => x"b5398c08", +10904 => x"f005088c", +10905 => x"08f40508", +10906 => x"5856758c", +10907 => x"08ff9005", +10908 => x"0c768c08", +10909 => x"ff94050c", +10910 => x"805580ff", +10911 => x"56748c08", +10912 => x"ff88050c", +10913 => x"758c08ff", +10914 => x"8c050c8c", +10915 => x"08ff9405", +10916 => x"088c08ff", +10917 => x"8c050870", +10918 => x"12708c08", +10919 => x"ff84050c", +10920 => x"52585681", +10921 => x"0b8c08fe", +10922 => x"fc050c8c", +10923 => x"08ff8405", +10924 => x"088c08ff", +10925 => x"94050857", +10926 => x"55757526", +10927 => x"0b0b0b0b", +10928 => x"8938800b", +10929 => x"8c08fefc", +10930 => x"050c8c08", +10931 => x"ff900508", +10932 => x"8c08ff88", +10933 => x"05087012", +10934 => x"708c08ff", +10935 => x"80050c8c", +10936 => x"08ff8005", +10937 => x"088c08fe", +10938 => x"fc050811", +10939 => x"708c08ff", +10940 => x"80050c53", +10941 => x"59525657", +10942 => x"8c08ff80", +10943 => x"05088c08", +10944 => x"ff840508", +10945 => x"5755748c", +10946 => x"08f0050c", +10947 => x"758c08f4", +10948 => x"050c8c08", +10949 => x"f00508f0", +10950 => x"0a260b0b", +10951 => x"0b0b8738", +10952 => x"0b0b0b0b", +10953 => x"8d398c08", +10954 => x"e8050881", +10955 => x"058c08e8", +10956 => x"050c8c08", +10957 => x"f0050898", +10958 => x"2b8c08f4", +10959 => x"0508882a", +10960 => x"7072078c", +10961 => x"08f00508", +10962 => x"882a5858", +10963 => x"5858748c", +10964 => x"08f0050c", +10965 => x"758c08f4", +10966 => x"050c0b0b", +10967 => x"0b85a739", +10968 => x"8c088c05", +10969 => x"085587ff", +10970 => x"0b881608", +10971 => x"250b0b0b", +10972 => x"0b9f388f", +10973 => x"ff0b8c08", +10974 => x"e8050c80", +10975 => x"55805674", +10976 => x"8c08f005", +10977 => x"0c758c08", +10978 => x"f4050c0b", +10979 => x"0b0b84f6", +10980 => x"398c088c", +10981 => x"05088811", +10982 => x"0887ff05", +10983 => x"8c08e805", +10984 => x"0c8c08f0", +10985 => x"05088006", +10986 => x"708c08fe", +10987 => x"f4050c8c", +10988 => x"08f40508", +10989 => x"81ff0670", +10990 => x"8c08fef8", +10991 => x"050c5957", +10992 => x"558c08fe", +10993 => x"f405088c", +10994 => x"08fef805", +10995 => x"08575574", +10996 => x"8c08fef4", +10997 => x"050c758c", +10998 => x"08fef805", +10999 => x"0c8c08fe", +11000 => x"f4050856", +11001 => x"750b0b0b", +11002 => x"81f8388c", +11003 => x"08fef805", +11004 => x"08577681", +11005 => x"802e0981", +11006 => x"060b0b0b", +11007 => x"81e4388c", +11008 => x"08f00508", +11009 => x"982b8c08", +11010 => x"f4050888", +11011 => x"2a707207", +11012 => x"8c08f005", +11013 => x"08882a71", +11014 => x"81065158", +11015 => x"58585874", +11016 => x"802e0b0b", +11017 => x"0b82ef38", +11018 => x"8c08f005", +11019 => x"088c08f4", +11020 => x"05085755", +11021 => x"748c08fe", +11022 => x"ec050c75", +11023 => x"8c08fef0", +11024 => x"050c8056", +11025 => x"81805775", +11026 => x"8c08fee4", +11027 => x"050c768c", +11028 => x"08fee805", +11029 => x"0c8c08fe", +11030 => x"f005088c", +11031 => x"08fee805", +11032 => x"08701270", +11033 => x"8c08fee0", +11034 => x"050c5256", +11035 => x"57810b8c", +11036 => x"08fed805", +11037 => x"0c8c08fe", +11038 => x"e005088c", +11039 => x"08fef005", +11040 => x"08585676", +11041 => x"76260b0b", +11042 => x"0b0b8938", +11043 => x"800b8c08", +11044 => x"fed8050c", +11045 => x"8c08feec", +11046 => x"05088c08", +11047 => x"fee40508", +11048 => x"7012708c", +11049 => x"08fedc05", +11050 => x"0c8c08fe", +11051 => x"dc05088c", +11052 => x"08fed805", +11053 => x"0811708c", +11054 => x"08fedc05", +11055 => x"0c525a52", +11056 => x"57558c08", +11057 => x"fedc0508", +11058 => x"8c08fee0", +11059 => x"05085755", +11060 => x"748c08f0", +11061 => x"050c758c", +11062 => x"08f4050c", +11063 => x"0b0b0b81", +11064 => x"b5398c08", +11065 => x"f005088c", +11066 => x"08f40508", +11067 => x"5856758c", +11068 => x"08fed005", +11069 => x"0c768c08", +11070 => x"fed4050c", +11071 => x"805580ff", +11072 => x"56748c08", +11073 => x"fec8050c", +11074 => x"758c08fe", +11075 => x"cc050c8c", +11076 => x"08fed405", +11077 => x"088c08fe", +11078 => x"cc050870", +11079 => x"12708c08", +11080 => x"fec4050c", +11081 => x"52585681", +11082 => x"0b8c08fe", +11083 => x"bc050c8c", +11084 => x"08fec405", +11085 => x"088c08fe", +11086 => x"d4050857", +11087 => x"55757526", +11088 => x"0b0b0b0b", +11089 => x"8938800b", +11090 => x"8c08febc", +11091 => x"050c8c08", +11092 => x"fed00508", +11093 => x"8c08fec8", +11094 => x"05087012", +11095 => x"708c08fe", +11096 => x"c0050c8c", +11097 => x"08fec005", +11098 => x"088c08fe", +11099 => x"bc050811", +11100 => x"708c08fe", +11101 => x"c0050c53", +11102 => x"59525657", +11103 => x"8c08fec0", +11104 => x"05088c08", +11105 => x"fec40508", +11106 => x"5755748c", +11107 => x"08f0050c", +11108 => x"758c08f4", +11109 => x"050c8c08", +11110 => x"f00508f8", +11111 => x"0a260b0b", +11112 => x"0b0b8738", +11113 => x"0b0b0b0b", +11114 => x"b5398c08", +11115 => x"f005089f", +11116 => x"2b8c08f4", +11117 => x"0508812a", +11118 => x"7072078c", +11119 => x"08f00508", +11120 => x"812a5858", +11121 => x"5858748c", +11122 => x"08f0050c", +11123 => x"758c08f4", +11124 => x"050c8c08", +11125 => x"e8050881", +11126 => x"058c08e8", +11127 => x"050c8c08", +11128 => x"f0050898", +11129 => x"2b8c08f4", +11130 => x"0508882a", +11131 => x"7072078c", +11132 => x"08f00508", +11133 => x"882a5858", +11134 => x"5858748c", +11135 => x"08f0050c", +11136 => x"758c08f4", +11137 => x"050c8c08", +11138 => x"f00508bf", +11139 => x"ffff068c", +11140 => x"08f8050c", +11141 => x"8c08f405", +11142 => x"08ff068c", +11143 => x"08fc050c", +11144 => x"8c08e805", +11145 => x"08568070", +11146 => x"8006778f", +11147 => x"ff067094", +11148 => x"2b535a58", +11149 => x"55800b8c", +11150 => x"08f80508", +11151 => x"76078c08", +11152 => x"f8050c70", +11153 => x"8c08fc05", +11154 => x"08078c08", +11155 => x"fc050c8c", +11156 => x"08ec0508", +11157 => x"51568070", +11158 => x"80067781", +11159 => x"06709f2b", +11160 => x"535a5855", +11161 => x"800b8c08", +11162 => x"f8050876", +11163 => x"078c08f8", +11164 => x"050c708c", +11165 => x"08fc0508", +11166 => x"078c08fc", +11167 => x"050c568c", +11168 => x"08f80508", +11169 => x"8c08fc05", +11170 => x"088c0888", +11171 => x"05085957", +11172 => x"5574770c", +11173 => x"7584180c", +11174 => x"8c088805", +11175 => x"08800cbb", +11176 => x"3d0d8c0c", +11177 => x"048c0802", +11178 => x"8c0c7070", +11179 => x"800b8c08", +11180 => x"fc050c8c", +11181 => x"08880508", +11182 => x"51700882", +11183 => x"2e098106", +11184 => x"0b0b0b0b", +11185 => x"8838810b", +11186 => x"8c08fc05", +11187 => x"0c8c08fc", +11188 => x"05087080", +11189 => x"0c515050", +11190 => x"8c0c048c", +11191 => x"08028c0c", +11192 => x"7070800b", +11193 => x"8c08fc05", +11194 => x"0c8c0888", +11195 => x"05085170", +11196 => x"08842e09", +11197 => x"81060b0b", +11198 => x"0b0b8838", +11199 => x"810b8c08", +11200 => x"fc050c8c", +11201 => x"08fc0508", +11202 => x"70800c51", +11203 => x"50508c0c", +11204 => x"048c0802", +11205 => x"8c0c7070", +11206 => x"800b8c08", +11207 => x"fc050c8c", +11208 => x"08880508", +11209 => x"51700880", +11210 => x"2e0b0b0b", +11211 => x"0b97388c", +11212 => x"08880508", +11213 => x"51700881", +11214 => x"2e0b0b0b", +11215 => x"0b87380b", +11216 => x"0b0b0b88", +11217 => x"39810b8c", +11218 => x"08fc050c", +11219 => x"8c08fc05", +11220 => x"0870800c", +11221 => x"5150508c", +11222 => x"0c048c08", +11223 => x"028c0cf8", +11224 => x"3d0d8c08", +11225 => x"88050870", +11226 => x"08bfffff", +11227 => x"068c08f8", +11228 => x"050c8411", +11229 => x"08ff068c", +11230 => x"08fc050c", +11231 => x"8c088805", +11232 => x"08700894", +11233 => x"2a545451", +11234 => x"80728fff", +11235 => x"068c08f4", +11236 => x"050c8c08", +11237 => x"88050870", +11238 => x"089f2a54", +11239 => x"54518072", +11240 => x"81068c08", +11241 => x"f0050c8c", +11242 => x"088c0508", +11243 => x"8c08f005", +11244 => x"0884120c", +11245 => x"51518c08", +11246 => x"f405080b", +11247 => x"0b0b81cf", +11248 => x"388c08f8", +11249 => x"0508708c", +11250 => x"08fc0508", +11251 => x"07515170", +11252 => x"0b0b0b0b", +11253 => x"90388c08", +11254 => x"8c050851", +11255 => x"82710c0b", +11256 => x"0b0b82f8", +11257 => x"398c088c", +11258 => x"05088c08", +11259 => x"f40508f8", +11260 => x"82058812", +11261 => x"0c8c08fc", +11262 => x"0508982a", +11263 => x"8c08f805", +11264 => x"08882b70", +11265 => x"72078c08", +11266 => x"fc050888", +11267 => x"2b565355", +11268 => x"5551708c", +11269 => x"08f8050c", +11270 => x"718c08fc", +11271 => x"050c8c08", +11272 => x"8c050851", +11273 => x"83710c8c", +11274 => x"08f80508", +11275 => x"f00a260b", +11276 => x"0b0b0bbb", +11277 => x"388c08fc", +11278 => x"05089f2a", +11279 => x"8c08f805", +11280 => x"08107072", +11281 => x"078c08fc", +11282 => x"05081055", +11283 => x"53545470", +11284 => x"8c08f805", +11285 => x"0c718c08", +11286 => x"fc050c8c", +11287 => x"088c0508", +11288 => x"881108ff", +11289 => x"0588120c", +11290 => x"510b0b0b", +11291 => x"ffb9398c", +11292 => x"088c0508", +11293 => x"538c08f8", +11294 => x"05088c08", +11295 => x"fc050853", +11296 => x"51708c14", +11297 => x"0c719014", +11298 => x"0c0b0b0b", +11299 => x"81ce398c", +11300 => x"08f40508", +11301 => x"8fff2e09", +11302 => x"81060b0b", +11303 => x"0b80f438", +11304 => x"8c08f805", +11305 => x"08708c08", +11306 => x"fc050807", +11307 => x"5151700b", +11308 => x"0b0b0b90", +11309 => x"388c088c", +11310 => x"05085184", +11311 => x"710c0b0b", +11312 => x"0b819939", +11313 => x"8c08f805", +11314 => x"08932a52", +11315 => x"80728106", +11316 => x"51517080", +11317 => x"2e0b0b0b", +11318 => x"0b90388c", +11319 => x"088c0508", +11320 => x"5181710c", +11321 => x"0b0b0b0b", +11322 => x"8a398c08", +11323 => x"8c050851", +11324 => x"80710c8c", +11325 => x"088c0508", +11326 => x"538c08f8", +11327 => x"05088c08", +11328 => x"fc050853", +11329 => x"51708c14", +11330 => x"0c719014", +11331 => x"0c0b0b0b", +11332 => x"80ca398c", +11333 => x"088c0508", +11334 => x"8c08f405", +11335 => x"08f88105", +11336 => x"88120c8c", +11337 => x"088c0508", +11338 => x"51518371", +11339 => x"0c8c088c", +11340 => x"05088c08", +11341 => x"fc050898", +11342 => x"2a8c08f8", +11343 => x"0508882b", +11344 => x"7072078c", +11345 => x"08fc0508", +11346 => x"882b7188", +11347 => x"0a078c16", +11348 => x"0c708007", +11349 => x"90160c56", +11350 => x"54555555", +11351 => x"8a3d0d8c", +11352 => x"0c048c08", +11353 => x"028c0cf0", +11354 => x"3d0d8c08", +11355 => x"88050851", +11356 => x"0b0b0b89", +11357 => x"993f8008", +11358 => x"52710b0b", +11359 => x"0b0b9d38", +11360 => x"8c088c05", +11361 => x"08510b0b", +11362 => x"0b89833f", +11363 => x"80085271", +11364 => x"0b0b0b0b", +11365 => x"87380b0b", +11366 => x"0b0b8e39", +11367 => x"810b8c08", +11368 => x"fc050c0b", +11369 => x"0b0b87ed", +11370 => x"398c0888", +11371 => x"0508510b", +11372 => x"0b0b88a4", +11373 => x"3f800852", +11374 => x"71802e0b", +11375 => x"0b0b0bb9", +11376 => x"388c088c", +11377 => x"0508510b", +11378 => x"0b0b888c", +11379 => x"3f800852", +11380 => x"71802e0b", +11381 => x"0b0b0ba1", +11382 => x"388c088c", +11383 => x"05088c08", +11384 => x"88050884", +11385 => x"12088412", +11386 => x"0831708c", +11387 => x"08fc050c", +11388 => x"5254520b", +11389 => x"0b0b879d", +11390 => x"398c0888", +11391 => x"0508510b", +11392 => x"0b0b87d4", +11393 => x"3f800852", +11394 => x"71802e0b", +11395 => x"0b0b0bb6", +11396 => x"388c0888", +11397 => x"05085284", +11398 => x"1208802e", +11399 => x"0b0b0b0b", +11400 => x"8e38ff0b", +11401 => x"8c08f805", +11402 => x"0c0b0b0b", +11403 => x"0b883981", +11404 => x"0b8c08f8", +11405 => x"050c8c08", +11406 => x"f805088c", +11407 => x"08fc050c", +11408 => x"0b0b0b86", +11409 => x"d0398c08", +11410 => x"8c050851", +11411 => x"0b0b0b87", +11412 => x"873f8008", +11413 => x"5271802e", +11414 => x"0b0b0b0b", +11415 => x"b6388c08", +11416 => x"8c050852", +11417 => x"84120880", +11418 => x"2e0b0b0b", +11419 => x"0b8e3881", +11420 => x"0b8c08f4", +11421 => x"050c0b0b", +11422 => x"0b0b8839", +11423 => x"ff0b8c08", +11424 => x"f4050c8c", +11425 => x"08f40508", +11426 => x"8c08fc05", +11427 => x"0c0b0b0b", +11428 => x"8683398c", +11429 => x"08880508", +11430 => x"510b0b0b", +11431 => x"86843f80", +11432 => x"08527180", +11433 => x"2e0b0b0b", +11434 => x"0ba6388c", +11435 => x"088c0508", +11436 => x"510b0b0b", +11437 => x"85ec3f80", +11438 => x"08527180", +11439 => x"2e0b0b0b", +11440 => x"0b8e3880", +11441 => x"0b8c08fc", +11442 => x"050c0b0b", +11443 => x"0b85c639", +11444 => x"8c088805", +11445 => x"08510b0b", +11446 => x"0b85c73f", +11447 => x"80085271", +11448 => x"802e0b0b", +11449 => x"0b0bb638", +11450 => x"8c088c05", +11451 => x"08528412", +11452 => x"08802e0b", +11453 => x"0b0b0b8e", +11454 => x"38810b8c", +11455 => x"08f0050c", +11456 => x"0b0b0b0b", +11457 => x"8839ff0b", +11458 => x"8c08f005", +11459 => x"0c8c08f0", +11460 => x"05088c08", +11461 => x"fc050c0b", +11462 => x"0b0b84f9", +11463 => x"398c088c", +11464 => x"0508510b", +11465 => x"0b0b84fa", +11466 => x"3f800852", +11467 => x"71802e0b", +11468 => x"0b0b0bb6", +11469 => x"388c0888", +11470 => x"05085284", +11471 => x"1208802e", +11472 => x"0b0b0b0b", +11473 => x"8e38ff0b", +11474 => x"8c08ec05", +11475 => x"0c0b0b0b", +11476 => x"0b883981", +11477 => x"0b8c08ec", +11478 => x"050c8c08", +11479 => x"ec05088c", +11480 => x"08fc050c", +11481 => x"0b0b0b84", +11482 => x"ac398c08", +11483 => x"8805088c", +11484 => x"088c0508", +11485 => x"53538413", +11486 => x"08841308", +11487 => x"2e0b0b0b", +11488 => x"0bb6388c", +11489 => x"08880508", +11490 => x"52841208", +11491 => x"802e0b0b", +11492 => x"0b0b8e38", +11493 => x"ff0b8c08", +11494 => x"e8050c0b", +11495 => x"0b0b0b88", +11496 => x"39810b8c", +11497 => x"08e8050c", +11498 => x"8c08e805", +11499 => x"088c08fc", +11500 => x"050c0b0b", +11501 => x"0b83de39", +11502 => x"8c088805", +11503 => x"088c088c", +11504 => x"05085353", +11505 => x"88120888", +11506 => x"1408250b", +11507 => x"0b0b0bb6", +11508 => x"388c0888", +11509 => x"05085284", +11510 => x"1208802e", +11511 => x"0b0b0b0b", +11512 => x"8e38ff0b", +11513 => x"8c08e405", +11514 => x"0c0b0b0b", +11515 => x"0b883981", +11516 => x"0b8c08e4", +11517 => x"050c8c08", +11518 => x"e405088c", +11519 => x"08fc050c", +11520 => x"0b0b0b83", +11521 => x"90398c08", +11522 => x"8805088c", +11523 => x"088c0508", +11524 => x"53538813", +11525 => x"08881308", +11526 => x"250b0b0b", +11527 => x"0bb6388c", +11528 => x"08880508", +11529 => x"52841208", +11530 => x"802e0b0b", +11531 => x"0b0b8e38", +11532 => x"810b8c08", +11533 => x"e0050c0b", +11534 => x"0b0b0b88", +11535 => x"39ff0b8c", +11536 => x"08e0050c", +11537 => x"8c08e005", +11538 => x"088c08fc", +11539 => x"050c0b0b", +11540 => x"0b82c239", +11541 => x"8c088805", +11542 => x"088c08dc", +11543 => x"050c8c08", +11544 => x"8c05088c", +11545 => x"08d8050c", +11546 => x"8c08dc05", +11547 => x"088c08d8", +11548 => x"05085452", +11549 => x"8c12088c", +11550 => x"1408260b", +11551 => x"0b0b0bbc", +11552 => x"388c08dc", +11553 => x"05088c08", +11554 => x"d8050854", +11555 => x"528c1208", +11556 => x"8c14082e", +11557 => x"0981060b", +11558 => x"0b0b80d5", +11559 => x"388c08dc", +11560 => x"05088c08", +11561 => x"d8050854", +11562 => x"52901208", +11563 => x"90140826", +11564 => x"0b0b0b0b", +11565 => x"87380b0b", +11566 => x"0b0bb639", +11567 => x"8c088805", +11568 => x"08528412", +11569 => x"08802e0b", +11570 => x"0b0b0b8e", +11571 => x"38ff0b8c", +11572 => x"08d4050c", +11573 => x"0b0b0b0b", +11574 => x"8839810b", +11575 => x"8c08d405", +11576 => x"0c8c08d4", +11577 => x"05088c08", +11578 => x"fc050c0b", +11579 => x"0b0b81a5", +11580 => x"398c088c", +11581 => x"05088c08", +11582 => x"d0050c8c", +11583 => x"08880508", +11584 => x"8c08cc05", +11585 => x"0c8c08d0", +11586 => x"05088c08", +11587 => x"cc050854", +11588 => x"528c1208", +11589 => x"8c140826", +11590 => x"0b0b0b0b", +11591 => x"bc388c08", +11592 => x"d005088c", +11593 => x"08cc0508", +11594 => x"54528c12", +11595 => x"088c1408", +11596 => x"2e098106", +11597 => x"0b0b0b80", +11598 => x"d5388c08", +11599 => x"d005088c", +11600 => x"08cc0508", +11601 => x"54529012", +11602 => x"08901408", +11603 => x"260b0b0b", +11604 => x"0b87380b", +11605 => x"0b0b0bb6", +11606 => x"398c0888", +11607 => x"05085284", +11608 => x"1208802e", +11609 => x"0b0b0b0b", +11610 => x"8e38810b", +11611 => x"8c08c805", +11612 => x"0c0b0b0b", +11613 => x"0b8839ff", +11614 => x"0b8c08c8", +11615 => x"050c8c08", +11616 => x"c805088c", +11617 => x"08fc050c", +11618 => x"0b0b0b0b", +11619 => x"8839800b", +11620 => x"8c08fc05", +11621 => x"0c8c08fc", +11622 => x"0508800c", +11623 => x"923d0d8c", +11624 => x"0c048c08", +11625 => x"028c0c70", +11626 => x"70800b8c", +11627 => x"08fc050c", +11628 => x"8c088805", +11629 => x"08517008", +11630 => x"822e0981", +11631 => x"060b0b0b", +11632 => x"0b883881", +11633 => x"0b8c08fc", +11634 => x"050c8c08", +11635 => x"fc050870", +11636 => x"800c5150", +11637 => x"508c0c04", +11638 => x"8c08028c", +11639 => x"0c707080", +11640 => x"0b8c08fc", +11641 => x"050c8c08", +11642 => x"88050851", +11643 => x"7008842e", +11644 => x"0981060b", +11645 => x"0b0b0b88", +11646 => x"38810b8c", +11647 => x"08fc050c", +11648 => x"8c08fc05", +11649 => x"0870800c", +11650 => x"5150508c", +11651 => x"0c048c08", +11652 => x"028c0c70", +11653 => x"70800b8c", +11654 => x"08fc050c", +11655 => x"8c088805", +11656 => x"08517008", +11657 => x"802e0b0b", +11658 => x"0b0b9738", +11659 => x"8c088805", +11660 => x"08517008", +11661 => x"812e0b0b", +11662 => x"0b0b8738", +11663 => x"0b0b0b0b", +11664 => x"8839810b", +11665 => x"8c08fc05", +11666 => x"0c8c08fc", +11667 => x"05087080", +11668 => x"0c515050", +11669 => x"8c0c0470", +11670 => x"700b0b83", +11671 => x"84d80bfc", +11672 => x"05700852", +11673 => x"5270ff2e", +11674 => x"0b0b0b0b", +11675 => x"9538702d", +11676 => x"fc127008", +11677 => x"525270ff", +11678 => x"2e098106", +11679 => x"0b0b0b0b", +11680 => x"ed385050", +11681 => x"04040b0b", +11682 => x"fd9e993f", +11683 => x"04000000", +11684 => x"00000040", +11685 => x"48656c6c", +11686 => x"6f20776f", +11687 => x"726c6421", +11688 => x"0a000000", +11689 => x"20202020", +11690 => x"20202020", +11691 => x"20202020", +11692 => x"20202020", +11693 => x"30303030", +11694 => x"30303030", +11695 => x"30303030", +11696 => x"30303030", +11697 => x"0000164c", +11698 => x"000010d6", +11699 => x"000010d6", +11700 => x"0000163f", +11701 => x"000010d6", +11702 => x"000010d6", +11703 => x"000010d6", +11704 => x"000010d6", +11705 => x"000010d6", +11706 => x"000010d6", +11707 => x"000010a4", +11708 => x"000015c6", +11709 => x"000010d6", +11710 => x"000010b9", +11711 => x"000012d9", +11712 => x"000010d6", +11713 => x"000015fe", +11714 => x"000015d5", +11715 => x"000015d5", +11716 => x"000015d5", +11717 => x"000015d5", +11718 => x"000015d5", +11719 => x"000015d5", +11720 => x"000015d5", +11721 => x"000015d5", +11722 => x"000015d5", +11723 => x"000010d6", +11724 => x"000010d6", +11725 => x"000010d6", +11726 => x"000010d6", +11727 => x"000010d6", +11728 => x"000010d6", +11729 => x"000010d6", +11730 => x"000010d6", +11731 => x"000010d6", +11732 => x"00001476", +11733 => x"00001060", +11734 => x"000013e5", +11735 => x"000010d6", +11736 => x"000013e5", +11737 => x"000010d6", +11738 => x"000010d6", +11739 => x"000010d6", +11740 => x"000010d6", +11741 => x"0000160c", +11742 => x"000010d6", +11743 => x"000010d6", +11744 => x"00001024", +11745 => x"000010d6", +11746 => x"000010d6", +11747 => x"000010d6", +11748 => x"0000152a", +11749 => x"000010d6", +11750 => x"00000ce0", +11751 => x"000010d6", +11752 => x"000010d6", +11753 => x"000014d2", +11754 => x"000010d6", +11755 => x"000010d6", +11756 => x"000010d6", +11757 => x"000010d6", +11758 => x"000010d6", +11759 => x"000010d6", +11760 => x"000010d6", +11761 => x"000010d6", +11762 => x"000010d6", +11763 => x"000010d6", +11764 => x"00001476", +11765 => x"00001064", +11766 => x"000013e5", +11767 => x"000013e5", +11768 => x"000013e5", +11769 => x"000013d7", +11770 => x"00001064", +11771 => x"000010d6", +11772 => x"000010d6", +11773 => x"000012b5", +11774 => x"000010d6", +11775 => x"00001592", +11776 => x"00001028", +11777 => x"0000132c", +11778 => x"000010c9", +11779 => x"000010d6", +11780 => x"0000152a", +11781 => x"000010d6", +11782 => x"00000ce4", +11783 => x"000010d6", +11784 => x"000010d6", +11785 => x"00001619", +11786 => x"62756720", +11787 => x"696e2076", +11788 => x"66707269", +11789 => x"6e74663a", +11790 => x"20626164", +11791 => x"20626173", +11792 => x"65000000", +11793 => x"30313233", +11794 => x"34353637", +11795 => x"38396162", +11796 => x"63646566", +11797 => x"00000000", +11798 => x"496e6600", +11799 => x"30313233", +11800 => x"34353637", +11801 => x"38394142", +11802 => x"43444546", +11803 => x"00000000", +11804 => x"30000000", +11805 => x"2e000000", +11806 => x"4e614e00", +11807 => x"286e756c", +11808 => x"6c290000", +11809 => x"432d5554", +11810 => x"462d3800", +11811 => x"432d534a", +11812 => x"49530000", +11813 => x"432d4555", +11814 => x"434a5000", +11815 => x"432d4a49", +11816 => x"53000000", +11817 => x"496e6669", +11818 => x"6e697479", +11819 => x"00000000", +11820 => x"000037a9", +11821 => x"000037a9", +11822 => x"0000378d", +11823 => x"000031e6", +11824 => x"00003792", +11825 => x"000031eb", +11826 => x"43000000", +11827 => x"49534f2d", +11828 => x"38383539", +11829 => x"2d310000", +11830 => x"0000b874", +11831 => x"0000b86c", +11832 => x"0000b86c", +11833 => x"0000b86c", +11834 => x"0000b86c", +11835 => x"0000b86c", +11836 => x"0000b86c", +11837 => x"0000b86c", +11838 => x"0000b86c", +11839 => x"0000b86c", +11840 => x"ffffffff", +11841 => x"ffffffff", +11842 => x"3c9cd2b2", +11843 => x"97d889bc", +11844 => x"3949f623", +11845 => x"d5a8a733", +11846 => x"32a50ffd", +11847 => x"44f4a73d", +11848 => x"255bba08", +11849 => x"cf8c979d", +11850 => x"0ac80628", +11851 => x"64ac6f43", +11852 => x"4341c379", +11853 => x"37e08000", +11854 => x"4693b8b5", +11855 => x"b5056e17", +11856 => x"4d384f03", +11857 => x"e93ff9f5", +11858 => x"5a827748", +11859 => x"f9301d32", +11860 => x"75154fdd", +11861 => x"7f73bf3c", +11862 => x"3ff00000", +11863 => x"00000000", +11864 => x"40240000", +11865 => x"00000000", +11866 => x"40590000", +11867 => x"00000000", +11868 => x"408f4000", +11869 => x"00000000", +11870 => x"40c38800", +11871 => x"00000000", +11872 => x"40f86a00", +11873 => x"00000000", +11874 => x"412e8480", +11875 => x"00000000", +11876 => x"416312d0", +11877 => x"00000000", +11878 => x"4197d784", +11879 => x"00000000", +11880 => x"41cdcd65", +11881 => x"00000000", +11882 => x"4202a05f", +11883 => x"20000000", +11884 => x"42374876", +11885 => x"e8000000", +11886 => x"426d1a94", +11887 => x"a2000000", +11888 => x"42a2309c", +11889 => x"e5400000", +11890 => x"42d6bcc4", +11891 => x"1e900000", +11892 => x"430c6bf5", +11893 => x"26340000", +11894 => x"4341c379", +11895 => x"37e08000", +11896 => x"43763457", +11897 => x"85d8a000", +11898 => x"43abc16d", +11899 => x"674ec800", +11900 => x"43e158e4", +11901 => x"60913d00", +11902 => x"4415af1d", +11903 => x"78b58c40", +11904 => x"444b1ae4", +11905 => x"d6e2ef50", +11906 => x"4480f0cf", +11907 => x"064dd592", +11908 => x"44b52d02", +11909 => x"c7e14af6", +11910 => x"44ea7843", +11911 => x"79d99db4", +11912 => x"00000005", +11913 => x"00000019", +11914 => x"0000007d", +11915 => x"64756d6d", +11916 => x"792e6578", +11917 => x"65000000", +11918 => x"00000000", +11919 => x"00000000", +11920 => x"00000000", +11921 => x"00000000", +11922 => x"00000000", +11923 => x"00ffffff", +11924 => x"ff00ffff", +11925 => x"ffff00ff", +11926 => x"ffffff00", +11927 => x"00000000", +11928 => x"00000000", +11929 => x"00000000", +11930 => x"0000c260", +11931 => x"0000ba70", +11932 => x"00000000", +11933 => x"0000bcd8", +11934 => x"0000bd34", +11935 => x"0000bd90", +11936 => x"00000000", +11937 => x"00000000", +11938 => x"00000000", +11939 => x"00000000", +11940 => x"00000000", +11941 => x"00000000", +11942 => x"00000000", +11943 => x"00000000", +11944 => x"00000000", +11945 => x"0000b8c8", +11946 => x"00000000", +11947 => x"00000000", +11948 => x"00000000", +11949 => x"00000000", +11950 => x"00000000", +11951 => x"00000000", +11952 => x"00000000", +11953 => x"00000000", +11954 => x"00000000", +11955 => x"00000000", +11956 => x"00000000", +11957 => x"00000000", +11958 => x"00000000", +11959 => x"00000000", +11960 => x"00000000", +11961 => x"00000000", +11962 => x"00000000", +11963 => x"00000000", +11964 => x"00000000", +11965 => x"00000000", +11966 => x"00000000", +11967 => x"00000000", +11968 => x"00000000", +11969 => x"00000000", +11970 => x"00000000", +11971 => x"00000000", +11972 => x"00000000", +11973 => x"00000000", +11974 => x"00000001", +11975 => x"330eabcd", +11976 => x"1234e66d", +11977 => x"deec0005", +11978 => x"000b0000", +11979 => x"00000000", +11980 => x"00000000", +11981 => x"00000000", +11982 => x"00000000", +11983 => x"00000000", +11984 => x"00000000", +11985 => x"00000000", +11986 => x"00000000", +11987 => x"00000000", +11988 => x"00000000", +11989 => x"00000000", +11990 => x"00000000", +11991 => x"00000000", +11992 => x"00000000", +11993 => x"00000000", +11994 => x"00000000", +11995 => x"00000000", +11996 => x"00000000", +11997 => x"00000000", +11998 => x"00000000", +11999 => x"00000000", +12000 => x"00000000", +12001 => x"00000000", +12002 => x"00000000", +12003 => x"00000000", +12004 => x"00000000", +12005 => x"00000000", +12006 => x"00000000", +12007 => x"00000000", +12008 => x"00000000", +12009 => x"00000000", +12010 => x"00000000", +12011 => x"00000000", +12012 => x"00000000", +12013 => x"00000000", +12014 => x"00000000", +12015 => x"00000000", +12016 => x"00000000", +12017 => x"00000000", +12018 => x"00000000", +12019 => x"00000000", +12020 => x"00000000", +12021 => x"00000000", +12022 => x"00000000", +12023 => x"00000000", +12024 => x"00000000", +12025 => x"00000000", +12026 => x"00000000", +12027 => x"00000000", +12028 => x"00000000", +12029 => x"00000000", +12030 => x"00000000", +12031 => x"00000000", +12032 => x"00000000", +12033 => x"00000000", +12034 => x"00000000", +12035 => x"00000000", +12036 => x"00000000", +12037 => x"00000000", +12038 => x"00000000", +12039 => x"00000000", +12040 => x"00000000", +12041 => x"00000000", +12042 => x"00000000", +12043 => x"00000000", +12044 => x"00000000", +12045 => x"00000000", +12046 => x"00000000", +12047 => x"00000000", +12048 => x"00000000", +12049 => x"00000000", +12050 => x"00000000", +12051 => x"00000000", +12052 => x"00000000", +12053 => x"00000000", +12054 => x"00000000", +12055 => x"00000000", +12056 => x"00000000", +12057 => x"00000000", +12058 => x"00000000", +12059 => x"00000000", +12060 => x"00000000", +12061 => x"00000000", +12062 => x"00000000", +12063 => x"00000000", +12064 => x"00000000", +12065 => x"00000000", +12066 => x"00000000", +12067 => x"00000000", +12068 => x"00000000", +12069 => x"00000000", +12070 => x"00000000", +12071 => x"00000000", +12072 => x"00000000", +12073 => x"00000000", +12074 => x"00000000", +12075 => x"00000000", +12076 => x"00000000", +12077 => x"00000000", +12078 => x"00000000", +12079 => x"00000000", +12080 => x"00000000", +12081 => x"00000000", +12082 => x"00000000", +12083 => x"00000000", +12084 => x"00000000", +12085 => x"00000000", +12086 => x"00000000", +12087 => x"00000000", +12088 => x"00000000", +12089 => x"00000000", +12090 => x"00000000", +12091 => x"00000000", +12092 => x"00000000", +12093 => x"00000000", +12094 => x"00000000", +12095 => x"00000000", +12096 => x"00000000", +12097 => x"00000000", +12098 => x"00000000", +12099 => x"00000000", +12100 => x"00000000", +12101 => x"00000000", +12102 => x"00000000", +12103 => x"00000000", +12104 => x"00000000", +12105 => x"00000000", +12106 => x"00000000", +12107 => x"00000000", +12108 => x"00000000", +12109 => x"00000000", +12110 => x"00000000", +12111 => x"00000000", +12112 => x"00000000", +12113 => x"00000000", +12114 => x"00000000", +12115 => x"00000000", +12116 => x"00000000", +12117 => x"00000000", +12118 => x"00000000", +12119 => x"00000000", +12120 => x"00000000", +12121 => x"00000000", +12122 => x"00000000", +12123 => x"00000000", +12124 => x"00000000", +12125 => x"00000000", +12126 => x"00000000", +12127 => x"00000000", +12128 => x"00000000", +12129 => x"00000000", +12130 => x"00000000", +12131 => x"00000000", +12132 => x"00000000", +12133 => x"00000000", +12134 => x"00000000", +12135 => x"00000000", +12136 => x"00000000", +12137 => x"00000000", +12138 => x"00000000", +12139 => x"00000000", +12140 => x"00000000", +12141 => x"00000000", +12142 => x"00000000", +12143 => x"00000000", +12144 => x"00000000", +12145 => x"00000000", +12146 => x"00000000", +12147 => x"00000000", +12148 => x"00000000", +12149 => x"00000000", +12150 => x"00000000", +12151 => x"00000000", +12152 => x"00000000", +12153 => x"00000000", +12154 => x"00000000", +12155 => x"43000000", +12156 => x"00000000", +12157 => x"00000000", +12158 => x"00000000", +12159 => x"00000000", +12160 => x"00000000", +12161 => x"00000001", +12162 => x"0000b8cc", +12163 => x"00000000", +12164 => x"00000000", +12165 => x"00000000", +12166 => x"00000000", +12167 => x"00000000", +12168 => x"00000000", +12169 => x"00000000", +12170 => x"00000000", +12171 => x"00000000", +12172 => x"00000000", +12173 => x"00000000", +12174 => x"00000000", +12175 => x"ffffffff", +12176 => x"00000000", +12177 => x"00020000", +12178 => x"00000000", +12179 => x"00000000", +12180 => x"0000be48", +12181 => x"0000be48", +12182 => x"0000be50", +12183 => x"0000be50", +12184 => x"0000be58", +12185 => x"0000be58", +12186 => x"0000be60", +12187 => x"0000be60", +12188 => x"0000be68", +12189 => x"0000be68", +12190 => x"0000be70", +12191 => x"0000be70", +12192 => x"0000be78", +12193 => x"0000be78", +12194 => x"0000be80", +12195 => x"0000be80", +12196 => x"0000be88", +12197 => x"0000be88", +12198 => x"0000be90", +12199 => x"0000be90", +12200 => x"0000be98", +12201 => x"0000be98", +12202 => x"0000bea0", +12203 => x"0000bea0", +12204 => x"0000bea8", +12205 => x"0000bea8", +12206 => x"0000beb0", +12207 => x"0000beb0", +12208 => x"0000beb8", +12209 => x"0000beb8", +12210 => x"0000bec0", +12211 => x"0000bec0", +12212 => x"0000bec8", +12213 => x"0000bec8", +12214 => x"0000bed0", +12215 => x"0000bed0", +12216 => x"0000bed8", +12217 => x"0000bed8", +12218 => x"0000bee0", +12219 => x"0000bee0", +12220 => x"0000bee8", +12221 => x"0000bee8", +12222 => x"0000bef0", +12223 => x"0000bef0", +12224 => x"0000bef8", +12225 => x"0000bef8", +12226 => x"0000bf00", +12227 => x"0000bf00", +12228 => x"0000bf08", +12229 => x"0000bf08", +12230 => x"0000bf10", +12231 => x"0000bf10", +12232 => x"0000bf18", +12233 => x"0000bf18", +12234 => x"0000bf20", +12235 => x"0000bf20", +12236 => x"0000bf28", +12237 => x"0000bf28", +12238 => x"0000bf30", +12239 => x"0000bf30", +12240 => x"0000bf38", +12241 => x"0000bf38", +12242 => x"0000bf40", +12243 => x"0000bf40", +12244 => x"0000bf48", +12245 => x"0000bf48", +12246 => x"0000bf50", +12247 => x"0000bf50", +12248 => x"0000bf58", +12249 => x"0000bf58", +12250 => x"0000bf60", +12251 => x"0000bf60", +12252 => x"0000bf68", +12253 => x"0000bf68", +12254 => x"0000bf70", +12255 => x"0000bf70", +12256 => x"0000bf78", +12257 => x"0000bf78", +12258 => x"0000bf80", +12259 => x"0000bf80", +12260 => x"0000bf88", +12261 => x"0000bf88", +12262 => x"0000bf90", +12263 => x"0000bf90", +12264 => x"0000bf98", +12265 => x"0000bf98", +12266 => x"0000bfa0", +12267 => x"0000bfa0", +12268 => x"0000bfa8", +12269 => x"0000bfa8", +12270 => x"0000bfb0", +12271 => x"0000bfb0", +12272 => x"0000bfb8", +12273 => x"0000bfb8", +12274 => x"0000bfc0", +12275 => x"0000bfc0", +12276 => x"0000bfc8", +12277 => x"0000bfc8", +12278 => x"0000bfd0", +12279 => x"0000bfd0", +12280 => x"0000bfd8", +12281 => x"0000bfd8", +12282 => x"0000bfe0", +12283 => x"0000bfe0", +12284 => x"0000bfe8", +12285 => x"0000bfe8", +12286 => x"0000bff0", +12287 => x"0000bff0", +12288 => x"0000bff8", +12289 => x"0000bff8", +12290 => x"0000c000", +12291 => x"0000c000", +12292 => x"0000c008", +12293 => x"0000c008", +12294 => x"0000c010", +12295 => x"0000c010", +12296 => x"0000c018", +12297 => x"0000c018", +12298 => x"0000c020", +12299 => x"0000c020", +12300 => x"0000c028", +12301 => x"0000c028", +12302 => x"0000c030", +12303 => x"0000c030", +12304 => x"0000c038", +12305 => x"0000c038", +12306 => x"0000c040", +12307 => x"0000c040", +12308 => x"0000c048", +12309 => x"0000c048", +12310 => x"0000c050", +12311 => x"0000c050", +12312 => x"0000c058", +12313 => x"0000c058", +12314 => x"0000c060", +12315 => x"0000c060", +12316 => x"0000c068", +12317 => x"0000c068", +12318 => x"0000c070", +12319 => x"0000c070", +12320 => x"0000c078", +12321 => x"0000c078", +12322 => x"0000c080", +12323 => x"0000c080", +12324 => x"0000c088", +12325 => x"0000c088", +12326 => x"0000c090", +12327 => x"0000c090", +12328 => x"0000c098", +12329 => x"0000c098", +12330 => x"0000c0a0", +12331 => x"0000c0a0", +12332 => x"0000c0a8", +12333 => x"0000c0a8", +12334 => x"0000c0b0", +12335 => x"0000c0b0", +12336 => x"0000c0b8", +12337 => x"0000c0b8", +12338 => x"0000c0c0", +12339 => x"0000c0c0", +12340 => x"0000c0c8", +12341 => x"0000c0c8", +12342 => x"0000c0d0", +12343 => x"0000c0d0", +12344 => x"0000c0d8", +12345 => x"0000c0d8", +12346 => x"0000c0e0", +12347 => x"0000c0e0", +12348 => x"0000c0e8", +12349 => x"0000c0e8", +12350 => x"0000c0f0", +12351 => x"0000c0f0", +12352 => x"0000c0f8", +12353 => x"0000c0f8", +12354 => x"0000c100", +12355 => x"0000c100", +12356 => x"0000c108", +12357 => x"0000c108", +12358 => x"0000c110", +12359 => x"0000c110", +12360 => x"0000c118", +12361 => x"0000c118", +12362 => x"0000c120", +12363 => x"0000c120", +12364 => x"0000c128", +12365 => x"0000c128", +12366 => x"0000c130", +12367 => x"0000c130", +12368 => x"0000c138", +12369 => x"0000c138", +12370 => x"0000c140", +12371 => x"0000c140", +12372 => x"0000c148", +12373 => x"0000c148", +12374 => x"0000c150", +12375 => x"0000c150", +12376 => x"0000c158", +12377 => x"0000c158", +12378 => x"0000c160", +12379 => x"0000c160", +12380 => x"0000c168", +12381 => x"0000c168", +12382 => x"0000c170", +12383 => x"0000c170", +12384 => x"0000c178", +12385 => x"0000c178", +12386 => x"0000c180", +12387 => x"0000c180", +12388 => x"0000c188", +12389 => x"0000c188", +12390 => x"0000c190", +12391 => x"0000c190", +12392 => x"0000c198", +12393 => x"0000c198", +12394 => x"0000c1a0", +12395 => x"0000c1a0", +12396 => x"0000c1a8", +12397 => x"0000c1a8", +12398 => x"0000c1b0", +12399 => x"0000c1b0", +12400 => x"0000c1b8", +12401 => x"0000c1b8", +12402 => x"0000c1c0", +12403 => x"0000c1c0", +12404 => x"0000c1c8", +12405 => x"0000c1c8", +12406 => x"0000c1d0", +12407 => x"0000c1d0", +12408 => x"0000c1d8", +12409 => x"0000c1d8", +12410 => x"0000c1e0", +12411 => x"0000c1e0", +12412 => x"0000c1e8", +12413 => x"0000c1e8", +12414 => x"0000c1f0", +12415 => x"0000c1f0", +12416 => x"0000c1f8", +12417 => x"0000c1f8", +12418 => x"0000c200", +12419 => x"0000c200", +12420 => x"0000c208", +12421 => x"0000c208", +12422 => x"0000c210", +12423 => x"0000c210", +12424 => x"0000c218", +12425 => x"0000c218", +12426 => x"0000c220", +12427 => x"0000c220", +12428 => x"0000c228", +12429 => x"0000c228", +12430 => x"0000c230", +12431 => x"0000c230", +12432 => x"0000c238", +12433 => x"0000c238", +12434 => x"0000c240", +12435 => x"0000c240", +12436 => x"0000ba2c", +12437 => x"ffffffff", +12438 => x"00000000", +12439 => x"ffffffff", +12440 => x"00000000", + others => x"00000000" +); + +begin + +process (clk) +begin + if (clk'event and clk = '1') then + if (memAWriteEnable = '1') and (memBWriteEnable = '1') and (memAAddr=memBAddr) and (memAWrite/=memBWrite) then + report "write collision" severity failure; + end if; + + if (memAWriteEnable = '1') then + ram(conv_integer(memAAddr)) := memAWrite; + memARead <= memAWrite; + else + memARead <= ram(conv_integer(memAAddr)); + end if; + end if; +end process; + +process (clk) +begin + if (clk'event and clk = '1') then + if (memBWriteEnable = '1') then + ram(conv_integer(memBAddr)) := memBWrite; + memBRead <= memBWrite; + else + memBRead <= ram(conv_integer(memBAddr)); + end if; + end if; +end process; + + + + +end dualport_ram_arch; diff --git a/zpu/hdl/example/io.vhd b/zpu/hdl/example/io.vhd new file mode 100644 index 0000000..7dbe36f --- /dev/null +++ b/zpu/hdl/example/io.vhd @@ -0,0 +1,97 @@ +library ieee; +use ieee.std_logic_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +use std.textio.all; + +library work; +use work.zpu_config.all; +use work.zpupkg.all; +use work.txt_util.all; + +entity zpu_io is + generic ( + log_file: string := "log.txt" + ); + port( + clk : in std_logic; + areset : in std_logic; + busy : out std_logic; + writeEnable : in std_logic; + readEnable : in std_logic; + write : in std_logic_vector(wordSize-1 downto 0); + read : out std_logic_vector(wordSize-1 downto 0); + addr : in std_logic_vector(maxAddrBit downto minAddrBit) + ); +end zpu_io; + + +architecture behave of zpu_io is + + + +signal timer_read : std_logic_vector(7 downto 0); +--signal timer_write : std_logic_vector(7 downto 0); +signal timer_we : std_logic; + +signal serving : std_logic; + +file l_file : TEXT open write_mode is log_file; + +begin + + + timerinst: timer port map ( + clk => clk, + areset => areset, + we => timer_we, + din => write(7 downto 0), + adr => addr(4 downto 2), + dout => timer_read); + + busy <= writeEnable or readEnable; + timer_we <= writeEnable and addr(12); + + process(areset, clk) + begin + if (areset = '1') then +-- timer_we <= '0'; + elsif (clk'event and clk = '1') then +-- timer_we <= '0'; + if writeEnable = '1' then + -- external interface + if addr=x"2028003" then + -- Write to UART + -- report "" & character'image(conv_integer(memBint)) severity note; + print(l_file, character'val(conv_integer(write))); + elsif addr(12)='1' then +-- report "xxx" severity failure; +-- timer_we <= '1'; + else + print(l_file, character'val(conv_integer(write))); + report "Illegal IO write" severity warning; + end if; + + end if; + read <= (others => '0'); + if (readEnable = '1') then + if addr=x"1001" then + read <= (0=>'1', others => '0'); -- recieve empty + elsif addr(12)='1' then + read(7 downto 0) <= timer_read; + elsif addr(11)='1' then + read(7 downto 0) <= ZPU_Frequency; + elsif addr=x"2028003" then + read <= (others => '0'); + else + read <= (others => '0'); + read(8) <= '1'; + report "Illegal IO read" severity warning; + end if; + end if; + end if; + end process; + + +end behave; + diff --git a/zpu/hdl/example/log.txt b/zpu/hdl/example/log.txt new file mode 100644 index 0000000..6954a81 --- /dev/null +++ b/zpu/hdl/example/log.txt @@ -0,0 +1,15 @@ +H +e +l +l +o + +w +o +r +l +d +! + + + diff --git a/zpu/hdl/example/sim_fpga_top.vhd b/zpu/hdl/example/sim_fpga_top.vhd new file mode 100644 index 0000000..b51fea0 --- /dev/null +++ b/zpu/hdl/example/sim_fpga_top.vhd @@ -0,0 +1,179 @@ +-------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 20:15:31 04/14/05 +-- Design Name: +-- Module Name: fpga_top - behave +-- Project Name: +-- Target Device: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +-------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +library UNISIM; +use UNISIM.VComponents.all; + +library work; +use work.zpu_config.all; +use work.zpupkg.all; + +entity fpga_top is +end fpga_top; + +architecture behave of fpga_top is + + +signal clk : std_logic; + +signal areset : std_logic; + + +component zpu_io is + generic ( + log_file: string := "log.txt" + ); + port( + clk : in std_logic; + areset : in std_logic; + busy : out std_logic; + writeEnable : in std_logic; + readEnable : in std_logic; + write : in std_logic_vector(wordSize-1 downto 0); + read : out std_logic_vector(wordSize-1 downto 0); + addr : in std_logic_vector(maxAddrBit downto minAddrBit) + ); +end component; + + + + + +signal mem_busy : std_logic; +signal mem_read : std_logic_vector(wordSize-1 downto 0); +signal mem_write : std_logic_vector(wordSize-1 downto 0); +signal mem_addr : std_logic_vector(maxAddrBitIncIO downto 0); +signal mem_writeEnable : std_logic; +signal mem_readEnable : std_logic; +signal mem_writeMask: std_logic_vector(wordBytes-1 downto 0); + +signal enable : std_logic; + +signal dram_mem_busy : std_logic; +signal dram_mem_read : std_logic_vector(wordSize-1 downto 0); +signal dram_mem_write : std_logic_vector(wordSize-1 downto 0); +signal dram_mem_writeEnable : std_logic; +signal dram_mem_readEnable : std_logic; +signal dram_mem_writeMask: std_logic_vector(wordBytes-1 downto 0); + + +signal io_busy : std_logic; + +signal io_mem_read : std_logic_vector(wordSize-1 downto 0); +signal io_mem_writeEnable : std_logic; +signal io_mem_readEnable : std_logic; + + +signal dram_ready : std_logic; +signal io_ready : std_logic; +signal io_reading : std_logic; + + +signal break : std_logic; + +begin + poweronreset: roc port map (O => areset); + + + + zpu: zpu_core port map ( + clk => clk , + areset => areset, + enable => enable, + in_mem_busy => mem_busy, + mem_read => mem_read, + mem_write => mem_write, + out_mem_addr => mem_addr, + out_mem_writeEnable => mem_writeEnable, + out_mem_readEnable => mem_readEnable, + mem_writeMask => mem_writeMask, + interrupt => '0', + break => break); + + + ioMap: zpu_io port map ( + clk => clk, + areset => areset, + busy => io_busy, + writeEnable => io_mem_writeEnable, + readEnable => io_mem_readEnable, + write => mem_write, + read => io_mem_read, + addr => mem_addr(maxAddrBit downto minAddrBit) + ); + + dram_mem_writeEnable <= mem_writeEnable and not mem_addr(ioBit); + dram_mem_readEnable <= mem_readEnable and not mem_addr(ioBit); + io_mem_writeEnable <= mem_writeEnable and mem_addr(ioBit); + io_mem_readEnable <= mem_readEnable and mem_addr(ioBit); + mem_busy <= io_busy; + + + + -- Memory reads either come from IO or DRAM. We need to pick the right one. + memorycontrol: + process(dram_mem_read, dram_ready, io_ready, io_mem_read) + begin + mem_read <= (others => 'U'); + if dram_ready='1' then + mem_read <= dram_mem_read; + end if; + + if io_ready='1' then + mem_read <= (others => '0'); + mem_read <= io_mem_read; + end if; + end process; + + + io_ready <= (io_reading or io_mem_readEnable) and not io_busy; + + memoryControlSync: + process(clk, areset) + begin + if areset = '1' then + enable <= '0'; + io_reading <= '0'; + dram_ready <= '0'; + elsif (clk'event and clk = '1') then + enable <= '1'; + io_reading <= io_busy or io_mem_readEnable; + dram_ready<=dram_mem_readEnable; + + end if; + end process; + + -- wiggle the clock @ 100MHz + clock : PROCESS + begin + clk <= '0'; + wait for 5 ns; + clk <= '1'; + wait for 5 ns; + end PROCESS clock; + + +end behave; diff --git a/zpu/hdl/example/simzpu.do b/zpu/hdl/example/simzpu.do new file mode 100644 index 0000000..083187f --- /dev/null +++ b/zpu/hdl/example/simzpu.do @@ -0,0 +1,29 @@ +# Xilinx WebPack modelsim script +# +# 1. Change directory to this source directory +# cd C:/workspace/zpunew/hdl/example +# "do zimzpu.do" + +set BreakOnAssertion 1 +vlib work + +vcom -93 -explicit zpu_config.vhd +vcom -93 -explicit ../zpu4/src/zpupkg.vhd +vcom -93 -explicit ../zpu4/src/txt_util.vhd +vcom -93 -explicit sim_fpga_top.vhd +vcom -93 -explicit ../zpu4/src/zpu_core_small.vhd +vcom -93 -explicit helloworld.vhd +vcom -93 -explicit ../zpu4/src/timer.vhd +vcom -93 -explicit io.vhd +vcom -93 -explicit ../zpu4/src/trace.vhd + +# run ZPU +vsim fpga_top +view wave +add wave -recursive fpga_top/zpu/* +#add wave -recursive fpga_top/* +view structure +#view signals + +# Enough to run tiny programs +run 10 ms diff --git a/zpu/hdl/example/zpu_config.vhd b/zpu/hdl/example/zpu_config.vhd new file mode 100644 index 0000000..a59ac8e --- /dev/null +++ b/zpu/hdl/example/zpu_config.vhd @@ -0,0 +1,20 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +package zpu_config is + -- generate trace output + constant Generate_Trace : boolean := true; + constant wordPower : integer := 5; + -- during simulation, set this to '0' to get matching trace.txt + constant DontCareValue : std_logic := '0'; + -- Clock frequency in MHz. + constant ZPU_Frequency : std_logic_vector(7 downto 0) := x"64"; + -- This is the msb address bit. bytes=2^(maxAddrBitIncIO+1) + constant maxAddrBitIncIO : integer := 27; + constant maxAddrBitBRAM : integer := 16; + + -- start byte address of stack. + -- point to top of RAM - 2*words + constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := x"1fffff8"; +end zpu_config; diff --git a/zpu/hdl/index.html b/zpu/hdl/index.html new file mode 100644 index 0000000..d3b4c1a --- /dev/null +++ b/zpu/hdl/index.html @@ -0,0 +1,47 @@ + + +

Getting started - FPGA

+The simplest version of the ZPU uses BRAM. When getting accustomed to the ZPU, a BRAM ZPU with a UART +is a good place to start. +

+You'll find a working simulation script in hdl/example/simzpu.do. +

+When implementing the ZPU, copy the following files and modify them to your needs: +

    +
  1. hdl/example/zpu_config.vhd - set up RAM size here +
  2. hdl/example/helloworld.vhd - dual port BRAM implementation. +
+Obviously you must also connect the ZPU to the rest of your IO subsystem. IO is memory mapped(read/write) in the ZPU. +

Generating VHDL BRAM initialization

+ + +../install/bin/zpu-elf-objdump -O binary hello.elf hello.bin
+java -classpath ../simulator/zpusim.jar com.zylin.zpu.simulator.tools.MakeRam hello.bin >hello.bram
+ +
+

Running example simulation

+The hdl/example directory has a simulation written for Xilinx WebPack ModelSim. From the ModelSim command prompt: +
    +
  1. cd c:/<installfolder>/hdl/example +
  2. do zpusim.do +
+

+After running the hello world simulation (see zpusim.do), two files are written to the hdl/exmaple directory: +

    +
  1. log.txt - contains the "Hello world!" text written to the debug channel/simplified UART. +
  2. trace.txt - a trace file for the CPU. The instruction set simulator has the capability of taking +this file as input in order to verify that the HDL implementation matches the instruction set simulator. +When a mismatch is found, the GDB debugger will break. Very handy for debugging custom ZPU implementations. +
+

HDL Directories & files

+ + +The HDL files need a bit of spit and polish! + + diff --git a/zpu/hdl/wishbone/wishbone_pkg.vhd b/zpu/hdl/wishbone/wishbone_pkg.vhd new file mode 100644 index 0000000..c3b0d9b --- /dev/null +++ b/zpu/hdl/wishbone/wishbone_pkg.vhd @@ -0,0 +1,52 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +package wishbone_pkg is + + type wishbone_bus_in is record + adr : std_logic_vector(31 downto 0); + sel : std_logic_vector(3 downto 0); + we : std_logic; + dat : std_logic_vector(31 downto 0); -- Note! Data written with 'we' + cyc : std_logic; + stb : std_logic; + end record; + + type wishbone_bus_out is record + dat : std_logic_vector(31 downto 0); + ack : std_logic; + end record; + + type wishbone_bus is record + insig : wishbone_bus_in; + outsig : wishbone_bus_out; + end record; + + component atomic32_access is + port ( cpu_clk : in std_logic; + areset : in std_logic; + + -- Wishbone from CPU interface + wb_16_i : in wishbone_bus_in; + wb_16_o : out wishbone_bus_out; + -- Wishbone to FPGA registers and ethernet core + wb_32_i : in wishbone_bus_out; + wb_32_o : out wishbone_bus_in); + end component; + + component eth_access_corr is + port ( cpu_clk : in std_logic; + areset : in std_logic; + + -- Wishbone from Wishbone MUX + eth_raw_o : out wishbone_bus_out; + eth_raw_i : in wishbone_bus_in; + + -- Wishbone ethernet core + eth_slave_i : in wishbone_bus_out; + eth_slave_o : out wishbone_bus_in); + end component; + + +end wishbone_pkg; diff --git a/zpu/hdl/wishbone/zpu_system.vhd b/zpu/hdl/wishbone/zpu_system.vhd new file mode 100644 index 0000000..6e79370 --- /dev/null +++ b/zpu/hdl/wishbone/zpu_system.vhd @@ -0,0 +1,71 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.all; + +library work; +use work.wishbone_pkg.all; +use work.zpupkg.all; +use work.zpu_config.all; +use work.ic300pkg.all; + +entity zpu_system is + generic( + simulate : boolean := false); + port ( areset : in std_logic; + cpu_clk : in std_logic; + + -- ZPU Control signals + enable : in std_logic; + interrupt : in std_logic; + + zpu_status : out std_logic_vector(63 downto 0); + + -- wishbone interfaces + zpu_wb_i : in wishbone_bus_out; + zpu_wb_o : out wishbone_bus_in); +end zpu_system; + +architecture behave of zpu_system is + +signal mem_req : std_logic; +signal mem_we : std_logic; +signal mem_ack : std_logic; +signal mem_read : std_logic_vector(wordSize-1 downto 0); +signal mem_write : std_logic_vector(wordSize-1 downto 0); +signal out_mem_addr : std_logic_vector(maxAddrBitIncIO downto 0); +signal mem_writeMask : std_logic_vector(wordBytes-1 downto 0); + + +begin + + my_zpu_core: + zpu_core port map ( + clk => cpu_clk, + areset => areset, + enable => enable, + mem_req => mem_req, + mem_we => mem_we, + mem_ack => mem_ack, + mem_read => mem_read, + mem_write => mem_write, + out_mem_addr => out_mem_addr, + mem_writeMask => mem_writeMask, + interrupt => interrupt, + zpu_status => zpu_status, + break => open); + + my_zpu_wb_bridge: + zpu_wb_bridge port map ( + clk => cpu_clk, + areset => areset, + mem_req => mem_req, + mem_we => mem_we, + mem_ack => mem_ack, + mem_read => mem_read, + mem_write => mem_write, + out_mem_addr => out_mem_addr, + mem_writeMask => mem_writeMask, + zpu_wb_i => zpu_wb_i, + zpu_wb_o => zpu_wb_o); + +end behave; diff --git a/zpu/hdl/wishbone/zpu_wb_bridge.vhd b/zpu/hdl/wishbone/zpu_wb_bridge.vhd new file mode 100644 index 0000000..4182f7a --- /dev/null +++ b/zpu/hdl/wishbone/zpu_wb_bridge.vhd @@ -0,0 +1,49 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +library work; +use work.phi_config.all; +use work.wishbone_pkg.all; +use work.zpupkg.all; +use work.zpu_config.all; + +entity zpu_wb_bridge is + port ( -- Native ZPU interface + clk : in std_logic; + areset : in std_logic; + + mem_req : in std_logic; + mem_we : in std_logic; + mem_ack : out std_logic; + mem_read : out std_logic_vector(wordSize-1 downto 0); + mem_write : in std_logic_vector(wordSize-1 downto 0); + out_mem_addr : in std_logic_vector(maxAddrBitIncIO downto 0); + mem_writeMask : in std_logic_vector(wordBytes-1 downto 0); + + -- Wishbone from ZPU + zpu_wb_i : in wishbone_bus_out; + zpu_wb_o : out wishbone_bus_in); + +end zpu_wb_bridge; + +architecture behave of zpu_wb_bridge is + +begin + + mem_read <= zpu_wb_i.dat; + mem_ack <= zpu_wb_i.ack; + + zpu_wb_o.adr <= "000000" & out_mem_addr(27) & out_mem_addr(24 downto 0); + zpu_wb_o.dat <= mem_write; + zpu_wb_o.sel <= mem_writeMask; + zpu_wb_o.stb <= mem_req; + zpu_wb_o.cyc <= mem_req; + zpu_wb_o.we <= mem_we; + +end behave; + + + + + diff --git a/zpu/hdl/zpu3/src/.cvsignore b/zpu/hdl/zpu3/src/.cvsignore new file mode 100644 index 0000000..760be11 --- /dev/null +++ b/zpu/hdl/zpu3/src/.cvsignore @@ -0,0 +1 @@ +xilinx_device_details.xml diff --git a/zpu/hdl/zpu3/src/build.xml b/zpu/hdl/zpu3/src/build.xml new file mode 100644 index 0000000..e1b268a --- /dev/null +++ b/zpu/hdl/zpu3/src/build.xml @@ -0,0 +1,114 @@ + + + + + + + eCosBoard firmware build file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zpu/hdl/zpu3/src/clocks.vhd b/zpu/hdl/zpu3/src/clocks.vhd new file mode 100644 index 0000000..a352b3c --- /dev/null +++ b/zpu/hdl/zpu3/src/clocks.vhd @@ -0,0 +1,246 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +library UNISIM; +use UNISIM.vcomponents.all; + +entity clocks is + port ( areset : in std_logic; + cpu_clk_p : in std_logic; + sdr_clk_fb_p : in std_logic; + cpu_clk : out std_logic; + cpu_clk_2x : out std_logic; + cpu_clk_4x : out std_logic; + ddr_in_clk : out std_logic; + ddr_in_clk_2x : out std_logic; + locked : out std_logic_vector(2 downto 0)); +end clocks; + +architecture behave of clocks is + +signal low : std_logic; + +signal cpu_clk_in : std_logic; +signal sdr_clk_fb_in : std_logic; + +signal dcm_cpu1 : std_logic; +signal dcm_cpu2 : std_logic; +signal dcm_cpu2_dum : std_logic; +signal dcm_cpu4 : std_logic; +signal dcm_ddr2 : std_logic; +signal dcm_ddr2_2x : std_logic; + +signal cpu_clk_int : std_logic; +signal cpu_clk_2x_int : std_logic; +signal cpu_clk_2x_dum_int : std_logic; +signal cpu_clk_4x_int : std_logic; +signal ddr_in_clk_int : std_logic; +signal ddr_in_clk_2x_int : std_logic; + +signal dcm1_locked_del : std_logic; +signal dcm2_locked_del : std_logic; +signal dcm2_reset : std_logic; +signal dcm3_reset : std_logic; + +signal locked_int : std_logic_vector(2 downto 0); +signal del_addr : std_logic_vector(3 downto 0); + +begin + + low <= '0'; + del_addr <= "1111"; + + cpu_clk <= cpu_clk_int; + cpu_clk_2x <= cpu_clk_2x_int; + cpu_clk_4x <= cpu_clk_4x_int; + ddr_in_clk <= ddr_in_clk_int; + ddr_in_clk_2x <= ddr_in_clk_2x_int; + locked <= locked_int; + + + CPU_IBUFG: + IBUFG port map ( + O => cpu_clk_in, + I => cpu_clk_p); + + SDR_FB_IBUFG: + IBUFG port map ( + O => sdr_clk_fb_in, + I => sdr_clk_fb_p); + + dcm2_rst: + SRL16 generic map ( + INIT => X"0000") + port map ( + Q => dcm1_locked_del, + A0 => del_addr(0), + A1 => del_addr(1), + A2 => del_addr(2), + A3 => del_addr(3), + CLK => cpu_clk_int, + D => locked_int(0)); + + dcm2_reset <= not(dcm1_locked_del); + + dcm3_rst: + SRL16 generic map ( + INIT => X"0000") + port map ( + Q => dcm2_locked_del, + A0 => del_addr(0), + A1 => del_addr(1), + A2 => del_addr(2), + A3 => del_addr(3), + CLK => cpu_clk_int, + D => locked_int(1)); + + dcm3_reset <= not(dcm2_locked_del); + + cpu1_dcm: + DCM generic map ( + CLKDV_DIVIDE => 2.0, -- Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5 + -- 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0 + CLKFX_DIVIDE => 1, -- Can be any interger from 1 to 32 + CLKFX_MULTIPLY => 4, -- Can be any integer from 1 to 32 + CLKIN_DIVIDE_BY_2 => FALSE, -- TRUE/FALSE to enable CLKIN divide by two feature + CLKIN_PERIOD => 15.625, -- Specify period of input clock + CLKOUT_PHASE_SHIFT => "NONE", -- Specify phase shift of NONE, FIXED or VARIABLE + CLK_FEEDBACK => "1X", -- Specify clock feedback of NONE, 1X or 2X + DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", -- SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or + -- an integer from 0 to 15 + DFS_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for frequency synthesis + DLL_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for DLL + DUTY_CYCLE_CORRECTION => TRUE, -- Duty cycle correction, TRUE or FALSE + FACTORY_JF => X"8080", -- FACTORY JF Values + PHASE_SHIFT => 0, -- Amount of fixed phase shift from -255 to 255 + STARTUP_WAIT => FALSE) -- Delay configuration DONE until DCM LOCK, TRUE/FALSE + port map ( + CLK0 => dcm_cpu1, -- 0 degree DCM CLK ouptput + CLK180 => open, -- 180 degree DCM CLK output + CLK270 => open, -- 270 degree DCM CLK output + CLK2X => dcm_cpu2, -- 2X DCM CLK output + CLK2X180 => open, -- 2X, 180 degree DCM CLK out + CLK90 => open, -- 90 degree DCM CLK output + CLKDV => open, -- Divided DCM CLK out (CLKDV_DIVIDE) + CLKFX => open, -- DCM CLK synthesis out (M/D) + CLKFX180 => open, -- 180 degree CLK synthesis out + LOCKED => locked_int(0), -- DCM LOCK status output + PSDONE => open, -- Dynamic phase adjust done output + STATUS => open, -- 8-bit DCM status bits output + CLKFB => cpu_clk_int, -- DCM clock feedback + CLKIN => cpu_clk_in, -- Clock input (from IBUFG, BUFG or DCM) + PSCLK => low, -- Dynamic phase adjust clock input + PSEN => low, -- Dynamic phase adjust enable input + PSINCDEC => low, -- Dynamic phase adjust increment/decrement + RST => areset); -- DCM asynchronous reset input + + cpu2_dcm: + DCM generic map ( + CLKDV_DIVIDE => 2.0, -- Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5 + -- 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0 + CLKFX_DIVIDE => 1, -- Can be any interger from 1 to 32 + CLKFX_MULTIPLY => 4, -- Can be any integer from 1 to 32 + CLKIN_DIVIDE_BY_2 => FALSE, -- TRUE/FALSE to enable CLKIN divide by two feature + CLKIN_PERIOD => 7.8125, -- Specify period of input clock + CLKOUT_PHASE_SHIFT => "NONE", -- Specify phase shift of NONE, FIXED or VARIABLE + CLK_FEEDBACK => "1X", -- Specify clock feedback of NONE, 1X or 2X + DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", -- SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or + -- an integer from 0 to 15 + DFS_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for frequency synthesis + DLL_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for DLL + DUTY_CYCLE_CORRECTION => TRUE, -- Duty cycle correction, TRUE or FALSE + FACTORY_JF => X"8080", -- FACTORY JF Values + PHASE_SHIFT => 0, -- Amount of fixed phase shift from -255 to 255 + STARTUP_WAIT => FALSE) -- Delay configuration DONE until DCM LOCK, TRUE/FALSE + port map ( + CLK0 => dcm_cpu2_dum, -- 0 degree DCM CLK ouptput + CLK180 => open, -- 180 degree DCM CLK output + CLK270 => open, -- 270 degree DCM CLK output + CLK2X => dcm_cpu4, -- 2X DCM CLK output + CLK2X180 => open, -- 2X, 180 degree DCM CLK out + CLK90 => open, -- 90 degree DCM CLK output + CLKDV => open, -- Divided DCM CLK out (CLKDV_DIVIDE) + CLKFX => open, -- DCM CLK synthesis out (M/D) + CLKFX180 => open, -- 180 degree CLK synthesis out + LOCKED => locked_int(1), -- DCM LOCK status output + PSDONE => open, -- Dynamic phase adjust done output + STATUS => open, -- 8-bit DCM status bits output + CLKFB => cpu_clk_2x_dum_int, -- DCM clock feedback + CLKIN => cpu_clk_2x_int, -- Clock input (from IBUFG, BUFG or DCM) + PSCLK => low, -- Dynamic phase adjust clock input + PSEN => low, -- Dynamic phase adjust enable input + PSINCDEC => low, -- Dynamic phase adjust increment/decrement + RST => dcm2_reset); -- DCM asynchronous reset input + + ddr_read_dcm: + DCM generic map ( + CLKDV_DIVIDE => 2.0, -- Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5 + -- 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0 + CLKFX_DIVIDE => 1, -- Can be any interger from 1 to 32 + CLKFX_MULTIPLY => 4, -- Can be any integer from 1 to 32 + CLKIN_DIVIDE_BY_2 => FALSE, -- TRUE/FALSE to enable CLKIN divide by two feature + CLKIN_PERIOD => 7.8125, -- Specify period of input clock + CLKOUT_PHASE_SHIFT => "FIXED", -- Specify phase shift of NONE, FIXED or VARIABLE +-- CLKOUT_PHASE_SHIFT => "NONE", -- Specify phase shift of NONE, FIXED or VARIABLE + CLK_FEEDBACK => "1X", -- Specify clock feedback of NONE, 1X or 2X + DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", -- SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or + -- an integer from 0 to 15 + DFS_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for frequency synthesis + DLL_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for DLL + DUTY_CYCLE_CORRECTION => TRUE, -- Duty cycle correction, TRUE or FALSE + FACTORY_JF => X"8080", -- FACTORY JF Values + PHASE_SHIFT => 103, -- Amount of fixed phase shift from -255 to 255 +-- PHASE_SHIFT => 0, -- Amount of fixed phase shift from -255 to 255 + STARTUP_WAIT => FALSE) -- Delay configuration DONE until DCM LOCK, TRUE/FALSE + port map ( + CLK0 => dcm_ddr2, -- 0 degree DCM CLK ouptput + CLK180 => open, -- 180 degree DCM CLK output + CLK270 => open, -- 270 degree DCM CLK output + CLK2X => dcm_ddr2_2x, -- 2X DCM CLK output + CLK2X180 => open, -- 2X, 180 degree DCM CLK out + CLK90 => open, -- 90 degree DCM CLK output + CLKDV => open, -- Divided DCM CLK out (CLKDV_DIVIDE) + CLKFX => open, -- DCM CLK synthesis out (M/D) + CLKFX180 => open, -- 180 degree CLK synthesis out + LOCKED => locked_int(2), -- DCM LOCK status output + PSDONE => open, -- Dynamic phase adjust done output + STATUS => open, -- 8-bit DCM status bits output + CLKFB => ddr_in_clk_int, -- DCM clock feedback + CLKIN => sdr_clk_fb_in, -- Clock input (from IBUFG, BUFG or DCM) + PSCLK => low, -- Dynamic phase adjust clock input + PSEN => low, -- Dynamic phase adjust enable input + PSINCDEC => low, -- Dynamic phase adjust increment/decrement + RST => dcm3_reset); -- DCM asynchronous reset input + + cpu1: + BUFG port map ( + I => dcm_cpu1, + O => cpu_clk_int); + + cpu2: + BUFG port map ( + I => dcm_cpu2, + O => cpu_clk_2x_int); + + cpu2_dum: + BUFG port map ( + I => dcm_cpu2_dum, + O => cpu_clk_2x_dum_int); + + cpu4: + BUFG port map ( + I => dcm_cpu4, + O => cpu_clk_4x_int); + + ddr_clk: + BUFG port map ( + I => dcm_ddr2, + O => ddr_in_clk_int); + + ddr_clk_2x: + BUFG port map ( + I => dcm_ddr2_2x, + O => ddr_in_clk_2x_int); + +end behave; \ No newline at end of file diff --git a/zpu/hdl/zpu3/src/ddr_bridge.vhd b/zpu/hdl/zpu3/src/ddr_bridge.vhd new file mode 100644 index 0000000..7dece76 --- /dev/null +++ b/zpu/hdl/zpu3/src/ddr_bridge.vhd @@ -0,0 +1,203 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +library UNISIM; +use UNISIM.vcomponents.all; + +library zylin; +use zylin.ddr.all; + +library work; +use work.phi_config.all; + +entity ddr_bridge is + port ( areset : in std_logic; + cpu_clk : in std_logic; + cpu_clk_2x : in std_logic; + cpu_clk_4x : in std_logic; + ddr_in_clk : in std_logic; + ddr_in_clk_2x : in std_logic; + + cpu_we : in std_logic_vector(1 downto 0); + cpu_re : in std_logic; + cpu_din : in std_logic_vector(15 downto 0); + cpu_a : in std_logic_vector(20 downto 0); + cpu_dout : inout std_logic_vector(15 downto 0); + + sdr_clk_p : out std_logic; -- ddr_sdram_clock + sdr_clk_n_p : out std_logic; -- /ddr_sdram_clock + cke_q_p : out std_logic; -- clock enable + cs_qn_p : out std_logic; -- /chip select + ras_qn_p : inout std_logic; -- /ras + cas_qn_p : inout std_logic; -- /cas + we_qn_p : inout std_logic; -- /write enable + dm_q_p : out std_logic_vector(1 downto 0); -- data mask bits, set to "00" + dqs_q_p : out std_logic_vector(1 downto 0); -- data strobe, only for write + ba_q_p : out std_logic_vector(1 downto 0); -- bank select + sdr_a_p : out std_logic_vector(12 downto 0); -- address bus + sdr_d_p : inout std_logic_vector(15 downto 0)); -- bidir data bus +end ddr_bridge; + +architecture behave of ddr_bridge is + +signal refresh_en : std_logic; +signal ddr_command_we : std_logic; +signal ddr_command : std_logic_vector(15 downto 0); + +signal ddr_req : std_logic; +signal ddr_req_adr : std_logic_vector(23 downto 1); +signal ddr_rd_wr_n : std_logic; +signal ddr_req_len : std_logic; + +signal ddr_read_en : std_logic; +signal ddr_write_en : std_logic; +signal ddr_data_read : std_logic_vector(31 downto 0); +signal ddr_data_write : std_logic_vector(35 downto 0); + +signal ddr_read_smp : std_logic_vector(31 downto 0); +signal ddr_read_delay : std_logic_vector(15 downto 0); + +signal ddr_write_smp : std_logic_vector(15 downto 0); +signal ddr_addr_smp : std_logic_vector(15 downto 0); + +signal ddr_req_type_smp : std_logic; +signal ddr_req_on : std_logic; +signal ddr_req_off : std_logic; +signal ddr_req_int : std_logic; + +constant Sim_Delay : time := 1.0 ns; + +begin + + ddr_req_len <= '0'; + ddr_data_write <= "0000" & ddr_write_smp & ddr_write_smp; + ddr_req_adr <= "0000000" & ddr_addr_smp; + ddr_rd_wr_n <= ddr_req_type_smp; + ddr_req <= ddr_req_int; + + process(cpu_clk, areset) -- CPU writeable registers + begin + if areset = '1' then + refresh_en <= '0'; + ddr_command_we <= '0'; + ddr_command <= "0000000000000000"; + ddr_write_smp <= "0000000000000000"; + ddr_req_type_smp <= '0'; + ddr_req_on <= '0'; + elsif (cpu_clk'event and cpu_clk = '1') then + + if cpu_we(0) = '1' and cpu_a(19 downto 17) = Fpga_DDR_Ctrl_Base and cpu_a(3 downto 1) = DDR_Ctrl_Reg_Addr then + refresh_en <= cpu_din(0); + else + refresh_en <= refresh_en; + end if; + + if cpu_we(0) = '1' and cpu_a(19 downto 17) = Fpga_DDR_Ctrl_Base and cpu_a(3 downto 1) = DDR_Mode_Reg_Addr then + ddr_command <= cpu_din; + ddr_command_we <= '1'; + else + ddr_command <= ddr_command; + ddr_command_we <= '0'; + end if; + + if cpu_we(0) = '1' and cpu_a(19 downto 17) = Fpga_DDR_Ctrl_Base and cpu_a(3 downto 1) = DDR_Data_Reg_Addr then + ddr_write_smp <= cpu_din; + else + ddr_write_smp <= ddr_write_smp; + end if; + + if cpu_we(0) = '1' and cpu_a(19 downto 17) = Fpga_DDR_Ctrl_Base and cpu_a(3 downto 1) = DDR_Addr_Reg_Addr then + ddr_addr_smp <= cpu_din; + else + ddr_addr_smp <= ddr_addr_smp; + end if; + + if cpu_we(0) = '1' and cpu_a(19 downto 17) = Fpga_DDR_Ctrl_Base and cpu_a(3 downto 1) = DDR_Req_Reg_Addr then + ddr_req_type_smp <= cpu_din(0); + ddr_req_on <= '1'; + else + ddr_req_type_smp <= ddr_req_type_smp; + ddr_req_on <= '0'; + end if; + + end if; + end process; + + -- CPU readable registers + cpu_dout <= ddr_read_delay when (cpu_re = '1' and cpu_a(19 downto 17) = Fpga_DDR_Ctrl_Base and cpu_a(3 downto 1) = DDR_Data_Reg_Addr) else "ZZZZZZZZZZZZZZZZ"; + + -- Capture data read from DDR + process(cpu_clk_2x, areset) + begin + if areset = '1' then + ddr_read_smp <= (others => '0'); + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + if ddr_read_en = '1' then + ddr_read_smp <= ddr_data_read after Sim_Delay; + else + ddr_read_smp <= ddr_read_smp after Sim_Delay; + end if; + end if; + end process; + + -- Move captured data from DDR to cpu_clk domain (for better routing timing) + process(cpu_clk, areset) + begin + if areset = '1' then + ddr_read_delay <= "0000000000000000"; + elsif (cpu_clk'event and cpu_clk = '1') then + ddr_read_delay <= ddr_read_smp(15 downto 0); + end if; + end process; + + process(cpu_clk_2x, areset) + begin + if areset = '1' then + ddr_req_int <= '0'; + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + if ddr_req_on = '1' then + ddr_req_int <= '1' after Sim_Delay; + elsif ddr_read_en = '1' or ddr_write_en = '1' then + ddr_req_int <= '0' after Sim_Delay; + else + ddr_req_int <= ddr_req_int after Sim_Delay; + end if; + end if; + end process; + + + ddr_interface: + ddr_top port map( + areset => areset, + cpu_clk => cpu_clk, + cpu_clk_2x => cpu_clk_2x, + cpu_clk_4x => cpu_clk_4x, + ddr_in_clk => ddr_in_clk, + ddr_in_clk_2x => ddr_in_clk_2x, + ddr_command => ddr_command, + ddr_command_we => ddr_command_we, + refresh_en => refresh_en, + ddr_data_read => ddr_data_read, + ddr_data_write => ddr_data_write, + ddr_req => ddr_req, + ddr_req_adr => ddr_req_adr, + ddr_rd_wr_n => ddr_rd_wr_n, + ddr_req_len => ddr_req_len, + ddr_read_en => ddr_read_en, + ddr_write_en => ddr_write_en, + sdr_clk_p => sdr_clk_p, + sdr_clk_n_p => sdr_clk_n_p, + cke_q_p => cke_q_p, + cs_qn_p => cs_qn_p, + ras_qn_p => ras_qn_p, + cas_qn_p => cas_qn_p, + we_qn_p => we_qn_p, + dm_q_p => dm_q_p, + dqs_q_p => dqs_q_p, + ba_q_p => ba_q_p, + sdr_a_p => sdr_a_p, + sdr_d_p => sdr_d_p); + + +end behave; diff --git a/zpu/hdl/zpu3/src/dmips_ram.vhd b/zpu/hdl/zpu3/src/dmips_ram.vhd new file mode 100644 index 0000000..f472653 --- /dev/null +++ b/zpu/hdl/zpu3/src/dmips_ram.vhd @@ -0,0 +1,3824 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + + +library zylin; +use zylin.zpu_config.all; +use zylin.zpupkg.all; + +entity dualport_ram is +port (clk : in std_logic; + memAWriteEnable : in std_logic; + memAAddr : in std_logic_vector(maxAddrBit downto minAddrBit); + memAWrite : in std_logic_vector(wordSize-1 downto 0); + memARead : out std_logic_vector(wordSize-1 downto 0); + memBWriteEnable : in std_logic; + memBAddr : in std_logic_vector(maxAddrBit downto minAddrBit); + memBWrite : in std_logic_vector(wordSize-1 downto 0); + memBRead : out std_logic_vector(wordSize-1 downto 0)); +end dualport_ram; + +architecture dualport_ram_arch of dualport_ram is + + +type ram_type is array(0 to ((2**(maxAddrBit+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); + +shared variable ram : ram_type := +( +0 => x"800b0b0b", +1 => x"0b0b8070", +2 => x"0b0b80e5", +3 => x"d00c3a0b", +4 => x"0b0bbed7", +5 => x"04000000", +6 => x"00000000", +7 => x"00000000", +8 => x"80088408", +9 => x"88080b0b", +10 => x"0bbfa72d", +11 => x"880c840c", +12 => x"800c0400", +13 => x"00000000", +14 => x"00000000", +15 => x"00000000", +16 => x"71fd0608", +17 => x"72830609", +18 => x"81058205", +19 => x"832b2a83", +20 => x"ffff0652", +21 => x"0b0b0400", +22 => x"00000000", +23 => x"00000000", +24 => x"71fd0608", +25 => x"83ffff73", +26 => x"83060981", +27 => x"05820583", +28 => x"2b2b0906", +29 => x"7383ffff", +30 => x"0b0b0b0b", +31 => x"83a70400", +32 => x"72098105", +33 => x"72057373", +34 => x"09060906", +35 => x"73097306", +36 => x"070a8106", +37 => x"530b0b51", +38 => x"04000000", +39 => x"00000000", +40 => x"72722473", +41 => x"732e0753", +42 => x"0b0b5104", +43 => x"00000000", +44 => x"00000000", +45 => x"00000000", +46 => x"00000000", +47 => x"00000000", +48 => x"71737109", +49 => x"71068106", +50 => x"30720a10", +51 => x"0a720a10", +52 => x"0a31050a", +53 => x"81065151", +54 => x"530b0b51", +55 => x"04000000", +56 => x"72722673", +57 => x"732e0753", +58 => x"0b0b5104", +59 => x"00000000", +60 => x"00000000", +61 => x"00000000", +62 => x"00000000", +63 => x"00000000", +64 => x"00000000", +65 => x"00000000", +66 => x"00000000", +67 => x"00000000", +68 => x"00000000", +69 => x"00000000", +70 => x"00000000", +71 => x"00000000", +72 => x"0b0b0b88", +73 => x"c6040000", +74 => x"00000000", +75 => x"00000000", +76 => x"00000000", +77 => x"00000000", +78 => x"00000000", +79 => x"00000000", +80 => x"720a722b", +81 => x"0a530b0b", +82 => x"51040000", +83 => x"00000000", +84 => x"00000000", +85 => x"00000000", +86 => x"00000000", +87 => x"00000000", +88 => x"72729f06", +89 => x"0981050b", +90 => x"0b0b88a7", +91 => x"05040000", +92 => x"00000000", +93 => x"00000000", +94 => x"00000000", +95 => x"00000000", +96 => x"72722aff", +97 => x"739f062a", +98 => x"0974090a", +99 => x"8106ff05", +100 => x"0607530b", +101 => x"0b510400", +102 => x"00000000", +103 => x"00000000", +104 => x"7171530b", +105 => x"0b510406", +106 => x"73830609", +107 => x"81058205", +108 => x"832b0b2b", +109 => x"0772fc06", +110 => x"0c515104", +111 => x"00000000", +112 => x"72098105", +113 => x"72050970", +114 => x"81050906", +115 => x"0a810653", +116 => x"0b0b5104", +117 => x"00000000", +118 => x"00000000", +119 => x"00000000", +120 => x"72098105", +121 => x"72050970", +122 => x"81050906", +123 => x"0a098106", +124 => x"530b0b51", +125 => x"04000000", +126 => x"00000000", +127 => x"00000000", +128 => x"71098105", +129 => x"520b0b04", +130 => x"00000000", +131 => x"00000000", +132 => x"00000000", +133 => x"00000000", +134 => x"00000000", +135 => x"00000000", +136 => x"72720981", +137 => x"0505530b", +138 => x"0b510400", +139 => x"00000000", +140 => x"00000000", +141 => x"00000000", +142 => x"00000000", +143 => x"00000000", +144 => x"72097206", +145 => x"73730906", +146 => x"07530b0b", +147 => x"51040000", +148 => x"00000000", +149 => x"00000000", +150 => x"00000000", +151 => x"00000000", +152 => x"71fc0608", +153 => x"72830609", +154 => x"81058305", +155 => x"1010102a", +156 => x"81ff0652", +157 => x"0b0b0400", +158 => x"00000000", +159 => x"00000000", +160 => x"71fc0608", +161 => x"0b0b80e5", +162 => x"bc738306", +163 => x"10100508", +164 => x"060b0b0b", +165 => x"88ac0400", +166 => x"00000000", +167 => x"00000000", +168 => x"80088408", +169 => x"88087575", +170 => x"0b0b0ba3", +171 => x"fa2d5050", +172 => x"80085688", +173 => x"0c840c80", +174 => x"0c510400", +175 => x"00000000", +176 => x"80088408", +177 => x"88087575", +178 => x"0b0b0ba4", +179 => x"ca2d5050", +180 => x"80085688", +181 => x"0c840c80", +182 => x"0c510400", +183 => x"00000000", +184 => x"72097081", +185 => x"0509060a", +186 => x"8106ff05", +187 => x"70540b0b", +188 => x"71067309", +189 => x"727405ff", +190 => x"05060751", +191 => x"51510400", +192 => x"72097081", +193 => x"0509060a", +194 => x"098106ff", +195 => x"0570540b", +196 => x"0b710673", +197 => x"09727405", +198 => x"ff050607", +199 => x"51515104", +200 => x"05ff0504", +201 => x"00000000", +202 => x"00000000", +203 => x"00000000", +204 => x"00000000", +205 => x"00000000", +206 => x"00000000", +207 => x"00000000", +208 => x"810b0b0b", +209 => x"80e5cc0c", +210 => x"51040000", +211 => x"00000000", +212 => x"00000000", +213 => x"00000000", +214 => x"00000000", +215 => x"00000000", +216 => x"71810552", +217 => x"0b0b0400", +218 => x"00000000", +219 => x"00000000", +220 => x"00000000", +221 => x"00000000", +222 => x"00000000", +223 => x"00000000", +224 => x"00000000", +225 => x"00000000", +226 => x"00000000", +227 => x"00000000", +228 => x"00000000", +229 => x"00000000", +230 => x"00000000", +231 => x"00000000", +232 => x"02840572", +233 => x"10100552", +234 => x"0b0b0400", +235 => x"00000000", +236 => x"00000000", +237 => x"00000000", +238 => x"00000000", +239 => x"00000000", +240 => x"00000000", +241 => x"00000000", +242 => x"00000000", +243 => x"00000000", +244 => x"00000000", +245 => x"00000000", +246 => x"00000000", +247 => x"00000000", +248 => x"717105ff", +249 => x"0571530b", +250 => x"0b510400", +251 => x"00000000", +252 => x"00000000", +253 => x"00000000", +254 => x"00000000", +255 => x"00000000", +256 => x"84803f80", +257 => x"cef23f04", +258 => x"10101010", +259 => x"10101010", +260 => x"10101010", +261 => x"10101010", +262 => x"10101010", +263 => x"10101010", +264 => x"10101010", +265 => x"10101053", +266 => x"0b0b5104", +267 => x"7381ff06", +268 => x"73830609", +269 => x"81058305", +270 => x"1010102b", +271 => x"0772fc06", +272 => x"0c515104", +273 => x"3c047272", +274 => x"80728106", +275 => x"ff050972", +276 => x"06057110", +277 => x"520b0b72", +278 => x"0a100a53", +279 => x"0b0b72e9", +280 => x"38515153", +281 => x"0b0b5104", +282 => x"70700b0b", +283 => x"80f5c008", +284 => x"520b0b84", +285 => x"0b720508", +286 => x"70810651", +287 => x"510b0b70", +288 => x"f2387108", +289 => x"81ff0680", +290 => x"0c505004", +291 => x"70700b0b", +292 => x"80f5c008", +293 => x"520b0b84", +294 => x"0b720508", +295 => x"700a100a", +296 => x"70810651", +297 => x"51510b0b", +298 => x"70ed3873", +299 => x"720c5050", +300 => x"0480e5cc", +301 => x"08802ea8", +302 => x"38838080", +303 => x"0b0b0b80", +304 => x"f5c00c82", +305 => x"a0800b0b", +306 => x"0b80f5c4", +307 => x"0c829080", +308 => x"0b80f5d4", +309 => x"0c0b0b80", +310 => x"f5c80b80", +311 => x"f5d80c04", +312 => x"f8808080", +313 => x"a40b0b0b", +314 => x"80f5c00c", +315 => x"f8808082", +316 => x"800b0b0b", +317 => x"80f5c40c", +318 => x"f8808084", +319 => x"800b80f5", +320 => x"d40cf880", +321 => x"8080940b", +322 => x"80f5d80c", +323 => x"f8808080", +324 => x"9c0b80f5", +325 => x"d00cf880", +326 => x"8080a00b", +327 => x"80f5dc0c", +328 => x"04f23d0d", +329 => x"600b0b80", +330 => x"f5c40856", +331 => x"5d82750c", +332 => x"8059805a", +333 => x"800b8f3d", +334 => x"71101017", +335 => x"70085957", +336 => x"5d5b8076", +337 => x"81ff067c", +338 => x"832b5658", +339 => x"520b0b0b", +340 => x"76530b0b", +341 => x"7b5198c6", +342 => x"3f7d7f7a", +343 => x"72077c72", +344 => x"07717160", +345 => x"8105415f", +346 => x"5d5b5957", +347 => x"557a8724", +348 => x"80c1380b", +349 => x"0b80f5c4", +350 => x"087b1010", +351 => x"71057008", +352 => x"58515580", +353 => x"7681ff06", +354 => x"7c832b56", +355 => x"58520b0b", +356 => x"0b76530b", +357 => x"0b7b5198", +358 => x"853f7d7f", +359 => x"7a72077c", +360 => x"72077171", +361 => x"60810541", +362 => x"5f5d5b59", +363 => x"5755877b", +364 => x"25c13876", +365 => x"7d0c7784", +366 => x"1e0c7c80", +367 => x"0c903d0d", +368 => x"04707080", +369 => x"f5cc3351", +370 => x"0b0b70b2", +371 => x"3880e5d8", +372 => x"08700852", +373 => x"0b0b520b", +374 => x"0b0b7080", +375 => x"2e9a3884", +376 => x"720580e5", +377 => x"d80c702d", +378 => x"80e5d808", +379 => x"7008520b", +380 => x"0b520b0b", +381 => x"0b70e838", +382 => x"810b80f5", +383 => x"cc345050", +384 => x"0404700b", +385 => x"0b80f5bc", +386 => x"08802e8e", +387 => x"380b0b0b", +388 => x"0b800b80", +389 => x"2e098106", +390 => x"83385004", +391 => x"0b0b80f5", +392 => x"bc510b0b", +393 => x"0bf3d93f", +394 => x"50040470", +395 => x"70028f05", +396 => x"33520b0b", +397 => x"0b0b718a", +398 => x"2e893871", +399 => x"51fccd3f", +400 => x"5050048d", +401 => x"51fcc53f", +402 => x"7151fcc0", +403 => x"3f505004", +404 => x"cd3d0db6", +405 => x"3d707084", +406 => x"05520b0b", +407 => x"088cab5d", +408 => x"56a63d5f", +409 => x"5d807570", +410 => x"81055733", +411 => x"765c5559", +412 => x"0b730b79", +413 => x"2e80ca38", +414 => x"8f3d5c73", +415 => x"a52e0981", +416 => x"0680cf38", +417 => x"79708105", +418 => x"5b33540b", +419 => x"0b7380e4", +420 => x"2e81c838", +421 => x"7380e424", +422 => x"80d13873", +423 => x"80e32ea8", +424 => x"3880520b", +425 => x"0ba5517a", +426 => x"2d80520b", +427 => x"0b73517a", +428 => x"2d821959", +429 => x"79708105", +430 => x"5b33540b", +431 => x"0b73ffbb", +432 => x"3878800c", +433 => x"b53d0d04", +434 => x"7c841e83", +435 => x"72053356", +436 => x"5e578052", +437 => x"0b0b7351", +438 => x"7a2d8119", +439 => x"7a708105", +440 => x"5c335559", +441 => x"0b73ff93", +442 => x"38d73973", +443 => x"80f32e09", +444 => x"8106ffad", +445 => x"387c841e", +446 => x"7108595e", +447 => x"56807733", +448 => x"56560b74", +449 => x"0b762e8d", +450 => x"38811670", +451 => x"1870335a", +452 => x"555677f5", +453 => x"38ff1655", +454 => x"807625ff", +455 => x"97387670", +456 => x"81055833", +457 => x"5880520b", +458 => x"0b77517a", +459 => x"2d811975", +460 => x"ff175757", +461 => x"59807625", +462 => x"fefa3876", +463 => x"70810558", +464 => x"33588052", +465 => x"0b0b7751", +466 => x"7a2d8119", +467 => x"75ff1757", +468 => x"57590b75", +469 => x"8024c738", +470 => x"feda397c", +471 => x"841e7108", +472 => x"70719f2c", +473 => x"59530b0b", +474 => x"595e5680", +475 => x"7524818d", +476 => x"38757e7d", +477 => x"58595580", +478 => x"57740b77", +479 => x"2e098106", +480 => x"bc38b07c", +481 => x"3402b905", +482 => x"567b0b76", +483 => x"2e9938ff", +484 => x"16560b0b", +485 => x"75337870", +486 => x"81055a34", +487 => x"8117577b", +488 => x"762e0981", +489 => x"06e93880", +490 => x"7834767e", +491 => x"ff720557", +492 => x"58560b0b", +493 => x"758024fe", +494 => x"e538fdf8", +495 => x"398a7536", +496 => x"0b0b80d7", +497 => x"b005540b", +498 => x"0b733376", +499 => x"70810558", +500 => x"348a7535", +501 => x"550b0b74", +502 => x"802effad", +503 => x"388a7536", +504 => x"0b0b80d7", +505 => x"b005540b", +506 => x"0b733376", +507 => x"70810558", +508 => x"348a7535", +509 => x"550b0b74", +510 => x"c438ff8d", +511 => x"3974520b", +512 => x"0b76530b", +513 => x"0bb53dff", +514 => x"b8055192", +515 => x"dc3fa43d", +516 => x"0856fedd", +517 => x"397080c1", +518 => x"0b81c48c", +519 => x"34800b81", +520 => x"c5e40c70", +521 => x"800c5004", +522 => x"7070800b", +523 => x"81c48c33", +524 => x"520b0b52", +525 => x"0b0b0b70", +526 => x"80c12e98", +527 => x"387181c5", +528 => x"e4080781", +529 => x"c5e40c80", +530 => x"c20b81c4", +531 => x"90347080", +532 => x"0c505004", +533 => x"810b81c5", +534 => x"e4080781", +535 => x"c5e40c80", +536 => x"c20b81c4", +537 => x"90347080", +538 => x"0c505004", +539 => x"70707070", +540 => x"7570088a", +541 => x"05530b0b", +542 => x"530b0b81", +543 => x"c48c3351", +544 => x"0b0b7080", +545 => x"c12e8c38", +546 => x"73f13870", +547 => x"800c5050", +548 => x"505004ff", +549 => x"72057081", +550 => x"c4880831", +551 => x"740c800c", +552 => x"50505050", +553 => x"04fc3d0d", +554 => x"81c49408", +555 => x"550b0b74", +556 => x"802e8e38", +557 => x"76750871", +558 => x"0c81c494", +559 => x"0856540b", +560 => x"0b8c1553", +561 => x"0b0b81c4", +562 => x"8808520b", +563 => x"0b8a518e", +564 => x"e93f7380", +565 => x"0c863d0d", +566 => x"04fb3d0d", +567 => x"77700856", +568 => x"56b0530b", +569 => x"0b81c494", +570 => x"08520b0b", +571 => x"7451a1ff", +572 => x"3f850b8c", +573 => x"170c850b", +574 => x"8c160c75", +575 => x"08750c81", +576 => x"c4940854", +577 => x"0b0b7380", +578 => x"2e8c3873", +579 => x"08750c81", +580 => x"c4940854", +581 => x"0b0b8c14", +582 => x"530b0b81", +583 => x"c4880852", +584 => x"0b0b8a51", +585 => x"8e943f84", +586 => x"1508b738", +587 => x"860b8c16", +588 => x"0c881552", +589 => x"0b0b8816", +590 => x"08518d96", +591 => x"3f81c494", +592 => x"08700876", +593 => x"0c540b0b", +594 => x"8c157054", +595 => x"0b0b540b", +596 => x"0b8a520b", +597 => x"0b730851", +598 => x"8de03f73", +599 => x"800c873d", +600 => x"0d047508", +601 => x"540b0bb0", +602 => x"530b0b73", +603 => x"520b0b75", +604 => x"51a0fc3f", +605 => x"73800c87", +606 => x"3d0d04e1", +607 => x"3d0db051", +608 => x"93833f80", +609 => x"0881c484", +610 => x"0cb05192", +611 => x"f83f8008", +612 => x"81c4940c", +613 => x"81c48408", +614 => x"80080c80", +615 => x"0b800884", +616 => x"050c820b", +617 => x"80088805", +618 => x"0ca80b80", +619 => x"088c050c", +620 => x"9f530b0b", +621 => x"0b0b80d7", +622 => x"bc520b0b", +623 => x"80089005", +624 => x"51a0ac3f", +625 => x"993d5c9f", +626 => x"530b0b0b", +627 => x"0b80d7dc", +628 => x"520b0b7b", +629 => x"51a0983f", +630 => x"8a0b8182", +631 => x"cc0c0b0b", +632 => x"80e28051", +633 => x"f8ea3f0b", +634 => x"0b80d7fc", +635 => x"51f8e13f", +636 => x"0b0b80e2", +637 => x"8051f8d8", +638 => x"3f80e5e0", +639 => x"08802e8a", +640 => x"a1380b0b", +641 => x"80d8ac51", +642 => x"f8c63f0b", +643 => x"0b80e280", +644 => x"51f8bd3f", +645 => x"80e5dc08", +646 => x"520b0b0b", +647 => x"0b80d8d8", +648 => x"51f8ad3f", +649 => x"8051b488", +650 => x"3f800880", +651 => x"f5ec0c81", +652 => x"0b923d5c", +653 => x"58800b80", +654 => x"e5dc0825", +655 => x"8383388e", +656 => x"3d5d80c1", +657 => x"0b81c48c", +658 => x"34810b81", +659 => x"c5e40c80", +660 => x"c20b81c4", +661 => x"9034825e", +662 => x"835a9f53", +663 => x"0b0b0b0b", +664 => x"80d98852", +665 => x"0b0b7a51", +666 => x"9f853f81", +667 => x"5f807b53", +668 => x"0b0b7c52", +669 => x"0b0b558c", +670 => x"f43f8008", +671 => x"752e0981", +672 => x"06833881", +673 => x"550b0b74", +674 => x"81c5e40c", +675 => x"7d705755", +676 => x"0b0b7483", +677 => x"25a63874", +678 => x"101015fd", +679 => x"0540a13d", +680 => x"ffbc0553", +681 => x"0b0b8352", +682 => x"0b0b7551", +683 => x"8b8c3f81", +684 => x"1e705f70", +685 => x"5755830b", +686 => x"7524dc38", +687 => x"7f540b0b", +688 => x"74530b0b", +689 => x"80f5f052", +690 => x"0b0b81c4", +691 => x"9c518af6", +692 => x"3f81c494", +693 => x"08700857", +694 => x"57b0530b", +695 => x"0b76520b", +696 => x"0b75519e", +697 => x"8a3f850b", +698 => x"8c180c85", +699 => x"0b8c170c", +700 => x"7608760c", +701 => x"81c49408", +702 => x"550b0b74", +703 => x"802e8a38", +704 => x"7408760c", +705 => x"81c49408", +706 => x"558c1553", +707 => x"0b0b81c4", +708 => x"8808520b", +709 => x"0b8a518a", +710 => x"a13f8416", +711 => x"08888c38", +712 => x"860b8c17", +713 => x"0c881652", +714 => x"0b0b8817", +715 => x"085189a2", +716 => x"3f81c494", +717 => x"08700877", +718 => x"0c578c16", +719 => x"70540b0b", +720 => x"558a520b", +721 => x"0b740851", +722 => x"89f03f80", +723 => x"c10b81c4", +724 => x"90335656", +725 => x"0b0b7575", +726 => x"26a83880", +727 => x"c3520b0b", +728 => x"75518adb", +729 => x"3f80087f", +730 => x"2e87ff38", +731 => x"81167081", +732 => x"ff0681c4", +733 => x"9033520b", +734 => x"0b57550b", +735 => x"0b747627", +736 => x"da38797e", +737 => x"29607072", +738 => x"35704172", +739 => x"72317087", +740 => x"2972315e", +741 => x"530b0b8a", +742 => x"0581c48c", +743 => x"3381c488", +744 => x"085a520b", +745 => x"0b520b0b", +746 => x"58550b76", +747 => x"80c12e87", +748 => x"f03878f6", +749 => x"38811858", +750 => x"80e5dc08", +751 => x"7825fd82", +752 => x"388051b0", +753 => x"eb3f8008", +754 => x"81c4800c", +755 => x"0b0b80d9", +756 => x"a851f4fc", +757 => x"3f0b0b80", +758 => x"e28051f4", +759 => x"f33f0b0b", +760 => x"80d9b851", +761 => x"f4ea3f0b", +762 => x"0b80e280", +763 => x"51f4e13f", +764 => x"81c48808", +765 => x"520b0b0b", +766 => x"0b80d9f0", +767 => x"51f4d13f", +768 => x"85520b0b", +769 => x"0b0b80da", +770 => x"8c51f4c4", +771 => x"3f81c5e4", +772 => x"08520b0b", +773 => x"0b0b80da", +774 => x"a851f4b4", +775 => x"3f81520b", +776 => x"0b0b0b80", +777 => x"da8c51f4", +778 => x"a73f81c4", +779 => x"8c33520b", +780 => x"0b0b0b80", +781 => x"dac451f4", +782 => x"973f80c1", +783 => x"520b0b0b", +784 => x"0b80dae0", +785 => x"51f4893f", +786 => x"81c49033", +787 => x"520b0b0b", +788 => x"0b80dafc", +789 => x"51f3f93f", +790 => x"80c2520b", +791 => x"0b0b0b80", +792 => x"dae051f3", +793 => x"eb3f81c4", +794 => x"bc08520b", +795 => x"0b0b0b80", +796 => x"db9851f3", +797 => x"db3f8752", +798 => x"0b0b0b0b", +799 => x"80da8c51", +800 => x"f3ce3f81", +801 => x"82cc0852", +802 => x"0b0b0b0b", +803 => x"80dbb451", +804 => x"f3be3f0b", +805 => x"0b80dbd0", +806 => x"51f3b53f", +807 => x"0b0b80db", +808 => x"fc51f3ac", +809 => x"3f81c494", +810 => x"08700853", +811 => x"0b0b560b", +812 => x"0b80dc88", +813 => x"51f3993f", +814 => x"0b0b80dc", +815 => x"a451f390", +816 => x"3f81c494", +817 => x"08847105", +818 => x"08530b0b", +819 => x"5d0b0b80", +820 => x"dcd851f2", +821 => x"fb3f8052", +822 => x"0b0b0b0b", +823 => x"80da8c51", +824 => x"f2ee3f81", +825 => x"c4940888", +826 => x"71050853", +827 => x"0b0b580b", +828 => x"0b80dcf4", +829 => x"51f2d93f", +830 => x"82520b0b", +831 => x"0b0b80da", +832 => x"8c51f2cc", +833 => x"3f81c494", +834 => x"088c7105", +835 => x"08530b0b", +836 => x"590b0b80", +837 => x"dd9051f2", +838 => x"b73f9152", +839 => x"0b0b0b0b", +840 => x"80da8c51", +841 => x"f2aa3f81", +842 => x"c4940890", +843 => x"05520b0b", +844 => x"0b0b80dd", +845 => x"ac51f298", +846 => x"3f0b0b80", +847 => x"ddc851f2", +848 => x"8f3f0b0b", +849 => x"80de8051", +850 => x"f2863f81", +851 => x"c4840870", +852 => x"08530b0b", +853 => x"570b0b80", +854 => x"dc8851f1", +855 => x"f33f0b0b", +856 => x"80de9451", +857 => x"f1ea3f81", +858 => x"c4840884", +859 => x"71050853", +860 => x"0b0b550b", +861 => x"0b80dcd8", +862 => x"51f1d53f", +863 => x"80520b0b", +864 => x"0b0b80da", +865 => x"8c51f1c8", +866 => x"3f81c484", +867 => x"08887105", +868 => x"08530b0b", +869 => x"560b0b80", +870 => x"dcf451f1", +871 => x"b33f8152", +872 => x"0b0b0b0b", +873 => x"80da8c51", +874 => x"f1a63f81", +875 => x"c484088c", +876 => x"71050853", +877 => x"0b0b5d0b", +878 => x"0b80dd90", +879 => x"51f1913f", +880 => x"92520b0b", +881 => x"0b0b80da", +882 => x"8c51f184", +883 => x"3f81c484", +884 => x"08900552", +885 => x"0b0b0b0b", +886 => x"80ddac51", +887 => x"f0f23f0b", +888 => x"0b80ddc8", +889 => x"51f0e93f", +890 => x"7d520b0b", +891 => x"0b0b80de", +892 => x"d451f0dc", +893 => x"3f85520b", +894 => x"0b0b0b80", +895 => x"da8c51f0", +896 => x"cf3f7952", +897 => x"0b0b0b0b", +898 => x"80def051", +899 => x"f0c23f8d", +900 => x"520b0b0b", +901 => x"0b80da8c", +902 => x"51f0b53f", +903 => x"7f520b0b", +904 => x"0b0b80df", +905 => x"8c51f0a8", +906 => x"3f87520b", +907 => x"0b0b0b80", +908 => x"da8c51f0", +909 => x"9b3f7e52", +910 => x"0b0b0b0b", +911 => x"80dfa851", +912 => x"f08e3f81", +913 => x"520b0b0b", +914 => x"0b80da8c", +915 => x"51f0813f", +916 => x"7b520b0b", +917 => x"0b0b80df", +918 => x"c451eff4", +919 => x"3f0b0b80", +920 => x"dfe051ef", +921 => x"eb3f7a52", +922 => x"0b0b0b0b", +923 => x"80e09851", +924 => x"efde3f0b", +925 => x"0b80e0b4", +926 => x"51efd53f", +927 => x"0b0b80e2", +928 => x"8051efcc", +929 => x"3f81c480", +930 => x"0880f5ec", +931 => x"08317080", +932 => x"f5e80c52", +933 => x"0b0b0b0b", +934 => x"80e0ec51", +935 => x"efb23f80", +936 => x"f5e80856", +937 => x"810b7625", +938 => x"819d3880", +939 => x"e5dc0870", +940 => x"77bd84c0", +941 => x"293580f5", +942 => x"e00c7671", +943 => x"3580f5e4", +944 => x"0c768ddd", +945 => x"297187e8", +946 => x"293581c4", +947 => x"980c5b0b", +948 => x"0b80e0fc", +949 => x"51eef93f", +950 => x"80f5e008", +951 => x"520b0b0b", +952 => x"0b80e1ac", +953 => x"51eee93f", +954 => x"0b0b80e1", +955 => x"b451eee0", +956 => x"3f80f5e4", +957 => x"08520b0b", +958 => x"0b0b80e1", +959 => x"ac51eed0", +960 => x"3f81c498", +961 => x"08520b0b", +962 => x"0b0b80e1", +963 => x"e451eec0", +964 => x"3f0b0b80", +965 => x"e28051ee", +966 => x"b73f800b", +967 => x"800ca13d", +968 => x"0d040b0b", +969 => x"80e28451", +970 => x"f5de3976", +971 => x"0856b053", +972 => x"0b0b7552", +973 => x"0b0b7651", +974 => x"95b53f80", +975 => x"c10b81c4", +976 => x"90335656", +977 => x"f88e390b", +978 => x"0b80e2b4", +979 => x"51ee813f", +980 => x"0b0b80e2", +981 => x"ec51edf8", +982 => x"3f0b0b80", +983 => x"e28051ed", +984 => x"ef3f800b", +985 => x"800ca13d", +986 => x"0d04a13d", +987 => x"ffb80552", +988 => x"0b0b8051", +989 => x"80dc3f9f", +990 => x"530b0b0b", +991 => x"0b80e38c", +992 => x"520b0b7a", +993 => x"5194e83f", +994 => x"777881c4", +995 => x"880c8117", +996 => x"7081ff06", +997 => x"81c49033", +998 => x"520b0b58", +999 => x"565af7db", +1000 => x"39ff1570", +1001 => x"77317e0c", +1002 => x"59800b81", +1003 => x"19595980", +1004 => x"e5dc0878", +1005 => x"25f58b38", +1006 => x"f8873970", +1007 => x"70738232", +1008 => x"70307072", +1009 => x"07802580", +1010 => x"0c520b0b", +1011 => x"520b0b50", +1012 => x"50047070", +1013 => x"70747671", +1014 => x"530b0b54", +1015 => x"0b0b520b", +1016 => x"0b0b0b71", +1017 => x"822e8338", +1018 => x"83517181", +1019 => x"2e9a3881", +1020 => x"72269f38", +1021 => x"71822eb8", +1022 => x"3871842e", +1023 => x"a9387073", +1024 => x"0c70800c", +1025 => x"50505004", +1026 => x"80e40b81", +1027 => x"c4880825", +1028 => x"8b388073", +1029 => x"0c70800c", +1030 => x"50505004", +1031 => x"83730c70", +1032 => x"800c5050", +1033 => x"50048273", +1034 => x"0c70800c", +1035 => x"50505004", +1036 => x"81730c70", +1037 => x"800c5050", +1038 => x"50047074", +1039 => x"74148205", +1040 => x"710c800c", +1041 => x"5004f73d", +1042 => x"0d7b7d7f", +1043 => x"61857205", +1044 => x"70822b75", +1045 => x"71057074", +1046 => x"71708405", +1047 => x"530b0b0c", +1048 => x"5a5a5d5b", +1049 => x"760c7980", +1050 => x"f8180c79", +1051 => x"86720552", +1052 => x"0b0b5758", +1053 => x"5a5a7676", +1054 => x"249e3876", +1055 => x"b329822b", +1056 => x"79710551", +1057 => x"530b0b76", +1058 => x"73708405", +1059 => x"550c8114", +1060 => x"540b0b75", +1061 => x"7425f038", +1062 => x"7681cc29", +1063 => x"19fc7105", +1064 => x"088105fc", +1065 => x"72050c7a", +1066 => x"1970089f", +1067 => x"a073050c", +1068 => x"5856850b", +1069 => x"81c4880c", +1070 => x"75800c8b", +1071 => x"3d0d0470", +1072 => x"70700293", +1073 => x"05335180", +1074 => x"02840597", +1075 => x"0533540b", +1076 => x"0b520b0b", +1077 => x"70732e88", +1078 => x"3871800c", +1079 => x"50505004", +1080 => x"7081c48c", +1081 => x"34810b80", +1082 => x"0c505050", +1083 => x"04f83d0d", +1084 => x"7a7c5956", +1085 => x"820b8319", +1086 => x"55550b0b", +1087 => x"74167033", +1088 => x"75335b51", +1089 => x"530b0b72", +1090 => x"792e80cf", +1091 => x"3880c10b", +1092 => x"81168116", +1093 => x"56565782", +1094 => x"7525df38", +1095 => x"ffa91770", +1096 => x"81ff0655", +1097 => x"590b7382", +1098 => x"26833887", +1099 => x"5581530b", +1100 => x"0b7680d2", +1101 => x"2e9e3877", +1102 => x"520b0b75", +1103 => x"5193b53f", +1104 => x"80530b0b", +1105 => x"72800825", +1106 => x"8b388715", +1107 => x"81c4880c", +1108 => x"81530b0b", +1109 => x"72800c8a", +1110 => x"3d0d0472", +1111 => x"81c48c34", +1112 => x"827525ff", +1113 => x"9538ffb4", +1114 => x"39f93d0d", +1115 => x"797b7d54", +1116 => x"0b0b5872", +1117 => x"59773079", +1118 => x"70307072", +1119 => x"079f2a73", +1120 => x"71315a52", +1121 => x"0b0b5977", +1122 => x"0b795673", +1123 => x"0c530b0b", +1124 => x"73847305", +1125 => x"0c540b0b", +1126 => x"800c893d", +1127 => x"0d04f93d", +1128 => x"0d797b7d", +1129 => x"7f56540b", +1130 => x"0b520b0b", +1131 => x"540b0b72", +1132 => x"802ea638", +1133 => x"70577158", +1134 => x"a0733152", +1135 => x"0b0b800b", +1136 => x"7225a638", +1137 => x"7770742b", +1138 => x"5770732a", +1139 => x"78752b07", +1140 => x"56510b74", +1141 => x"76530b0b", +1142 => x"510b0b70", +1143 => x"740c7184", +1144 => x"150c7380", +1145 => x"0c893d0d", +1146 => x"04805677", +1147 => x"72302b55", +1148 => x"0b0b7476", +1149 => x"530b0b51", +1150 => x"e039fb3d", +1151 => x"0d777955", +1152 => x"5580560b", +1153 => x"0b757524", +1154 => x"b5388074", +1155 => x"24a53880", +1156 => x"530b0b73", +1157 => x"520b0b74", +1158 => x"5180f33f", +1159 => x"8008540b", +1160 => x"0b75802e", +1161 => x"87388008", +1162 => x"30540b0b", +1163 => x"73800c87", +1164 => x"3d0d0473", +1165 => x"30768132", +1166 => x"57540b0b", +1167 => x"d2397430", +1168 => x"55815673", +1169 => x"8025c838", +1170 => x"ea39fa3d", +1171 => x"0d787a57", +1172 => x"5580570b", +1173 => x"0b767524", +1174 => x"ae38759f", +1175 => x"2c540b0b", +1176 => x"81530b0b", +1177 => x"75743274", +1178 => x"31520b0b", +1179 => x"74519f3f", +1180 => x"8008540b", +1181 => x"0b76802e", +1182 => x"87388008", +1183 => x"30540b0b", +1184 => x"73800c88", +1185 => x"3d0d0474", +1186 => x"30558157", +1187 => x"cd39fc3d", +1188 => x"0d767853", +1189 => x"0b0b540b", +1190 => x"0b81530b", +1191 => x"0b807473", +1192 => x"26520b0b", +1193 => x"5572802e", +1194 => x"9e387080", +1195 => x"2eb73880", +1196 => x"7224b238", +1197 => x"71107310", +1198 => x"75722653", +1199 => x"0b0b540b", +1200 => x"0b520b0b", +1201 => x"72e43873", +1202 => x"51788338", +1203 => x"74510b0b", +1204 => x"70800c86", +1205 => x"3d0d0472", +1206 => x"0a100a72", +1207 => x"0a100a53", +1208 => x"0b0b530b", +1209 => x"0b72802e", +1210 => x"de387174", +1211 => x"26e93873", +1212 => x"72317574", +1213 => x"07740a10", +1214 => x"0a740a10", +1215 => x"0a555556", +1216 => x"540b0be1", +1217 => x"39707073", +1218 => x"520b0b80", +1219 => x"eea80851", +1220 => x"953f5050", +1221 => x"04707073", +1222 => x"520b0b80", +1223 => x"eea80851", +1224 => x"92dc3f50", +1225 => x"5004f43d", +1226 => x"0d7e608b", +1227 => x"710570f8", +1228 => x"065b5555", +1229 => x"5d729626", +1230 => x"83389058", +1231 => x"800b7824", +1232 => x"74792607", +1233 => x"5580540b", +1234 => x"0b74742e", +1235 => x"09810680", +1236 => x"d5387c51", +1237 => x"8edf3f77", +1238 => x"83f72680", +1239 => x"d0387783", +1240 => x"2a701010", +1241 => x"1080e6a0", +1242 => x"058c7105", +1243 => x"08585854", +1244 => x"0b0b7577", +1245 => x"2e828a38", +1246 => x"841608fc", +1247 => x"068c1708", +1248 => x"88180871", +1249 => x"8c72050c", +1250 => x"8872050c", +1251 => x"5b760584", +1252 => x"71050881", +1253 => x"07847205", +1254 => x"0c530b0b", +1255 => x"7c518e96", +1256 => x"3f881654", +1257 => x"0b0b7380", +1258 => x"0c8e3d0d", +1259 => x"0477892a", +1260 => x"78832a58", +1261 => x"540b0b73", +1262 => x"802ebf38", +1263 => x"77862ab8", +1264 => x"05578474", +1265 => x"27b43880", +1266 => x"db145794", +1267 => x"7427ab38", +1268 => x"778c2a80", +1269 => x"ee055780", +1270 => x"d474279e", +1271 => x"38778f2a", +1272 => x"80f70557", +1273 => x"82d47427", +1274 => x"91387792", +1275 => x"2a80fc05", +1276 => x"578ad474", +1277 => x"27843880", +1278 => x"fe570b0b", +1279 => x"76101010", +1280 => x"80e6a005", +1281 => x"8c710508", +1282 => x"56530b0b", +1283 => x"74732ea6", +1284 => x"38841508", +1285 => x"fc067079", +1286 => x"3155560b", +1287 => x"738f2489", +1288 => x"d2387380", +1289 => x"2589d438", +1290 => x"8c150855", +1291 => x"0b0b7473", +1292 => x"2e098106", +1293 => x"dc388117", +1294 => x"5980e6b0", +1295 => x"08560b0b", +1296 => x"7580e6a8", +1297 => x"2e82f938", +1298 => x"841608fc", +1299 => x"06707931", +1300 => x"55550b73", +1301 => x"8f2480c2", +1302 => x"3880e6a8", +1303 => x"0b80e6b4", +1304 => x"0c80e6a8", +1305 => x"0b80e6b0", +1306 => x"0c807424", +1307 => x"80e83874", +1308 => x"16847105", +1309 => x"08810784", +1310 => x"72050c53", +1311 => x"0b0bfe9c", +1312 => x"3988168c", +1313 => x"71050857", +1314 => x"590b750b", +1315 => x"792e0981", +1316 => x"06fde538", +1317 => x"821459ff", +1318 => x"a0397716", +1319 => x"78810784", +1320 => x"180c7080", +1321 => x"e6b40c70", +1322 => x"80e6b00c", +1323 => x"80e6a80b", +1324 => x"8c72050c", +1325 => x"8c710508", +1326 => x"8872050c", +1327 => x"74810784", +1328 => x"72050c74", +1329 => x"0574710c", +1330 => x"5b7c518b", +1331 => x"e93f8816", +1332 => x"540b0bfd", +1333 => x"d13983ff", +1334 => x"752783c1", +1335 => x"3874892a", +1336 => x"75832a54", +1337 => x"0b0b540b", +1338 => x"0b73802e", +1339 => x"80cb3874", +1340 => x"862ab805", +1341 => x"530b0b84", +1342 => x"7427be38", +1343 => x"80db1453", +1344 => x"0b0b9474", +1345 => x"27b33874", +1346 => x"8c2a80ee", +1347 => x"05530b0b", +1348 => x"80d47427", +1349 => x"a438748f", +1350 => x"2a80f705", +1351 => x"530b0b82", +1352 => x"d4742795", +1353 => x"3874922a", +1354 => x"80fc0553", +1355 => x"0b0b8ad4", +1356 => x"74278638", +1357 => x"80fe530b", +1358 => x"0b721010", +1359 => x"1080e6a0", +1360 => x"05887105", +1361 => x"0855570b", +1362 => x"730b772e", +1363 => x"86cd3884", +1364 => x"1408fc06", +1365 => x"5b740b7b", +1366 => x"278f3888", +1367 => x"1408540b", +1368 => x"0b73772e", +1369 => x"098106e7", +1370 => x"388c1408", +1371 => x"80e6a00b", +1372 => x"84050871", +1373 => x"8c190c75", +1374 => x"88190c77", +1375 => x"8873050c", +1376 => x"5c57758c", +1377 => x"150c7853", +1378 => x"0b0b8079", +1379 => x"2483be38", +1380 => x"72822c81", +1381 => x"712b5656", +1382 => x"0b747b26", +1383 => x"80d1387a", +1384 => x"7506570b", +1385 => x"0b7682bc", +1386 => x"3878fc06", +1387 => x"84055974", +1388 => x"10707c06", +1389 => x"55550b73", +1390 => x"82aa3884", +1391 => x"1959f039", +1392 => x"80e6a00b", +1393 => x"84050879", +1394 => x"540b0b5b", +1395 => x"788025c0", +1396 => x"3882fa39", +1397 => x"74097b06", +1398 => x"7080e6a0", +1399 => x"0b84050c", +1400 => x"5b741055", +1401 => x"0b0b747b", +1402 => x"26853874", +1403 => x"85f33880", +1404 => x"e6a00b88", +1405 => x"05087084", +1406 => x"720508fc", +1407 => x"06707b31", +1408 => x"7b72268f", +1409 => x"7225075d", +1410 => x"575c5c55", +1411 => x"78802e80", +1412 => x"e3387915", +1413 => x"80e69808", +1414 => x"19907105", +1415 => x"59540b0b", +1416 => x"5680e694", +1417 => x"08ff2e89", +1418 => x"38a08f73", +1419 => x"05e08006", +1420 => x"570b0b76", +1421 => x"520b0b7c", +1422 => x"5188fc3f", +1423 => x"8008540b", +1424 => x"0b8008ff", +1425 => x"2e903880", +1426 => x"08762782", +1427 => x"c2387480", +1428 => x"e6a02e82", +1429 => x"ba3880e6", +1430 => x"a00b8805", +1431 => x"08558415", +1432 => x"08fc0670", +1433 => x"79317972", +1434 => x"268f7225", +1435 => x"075d555a", +1436 => x"7a849b38", +1437 => x"77810784", +1438 => x"160c7715", +1439 => x"7080e6a0", +1440 => x"0b88050c", +1441 => x"74810784", +1442 => x"72050c56", +1443 => x"7c5188a6", +1444 => x"3f881554", +1445 => x"0b0b7380", +1446 => x"0c8e3d0d", +1447 => x"0474832a", +1448 => x"70540b0b", +1449 => x"540b0b80", +1450 => x"742481a9", +1451 => x"3872822c", +1452 => x"81712b80", +1453 => x"e6a40807", +1454 => x"7080e6a0", +1455 => x"0b84050c", +1456 => x"75101010", +1457 => x"80e6a005", +1458 => x"88710508", +1459 => x"718c1b0c", +1460 => x"70881b0c", +1461 => x"79887305", +1462 => x"0c57555c", +1463 => x"55758c15", +1464 => x"0cfda339", +1465 => x"78791010", +1466 => x"1080e6a0", +1467 => x"0570565b", +1468 => x"5c8c1408", +1469 => x"560b0b75", +1470 => x"742ea738", +1471 => x"841608fc", +1472 => x"06707931", +1473 => x"58530b0b", +1474 => x"768f2484", +1475 => x"98387680", +1476 => x"2584de38", +1477 => x"8c160856", +1478 => x"0b0b7574", +1479 => x"2e098106", +1480 => x"db388814", +1481 => x"811a7083", +1482 => x"06555a54", +1483 => x"0b0b72c1", +1484 => x"387b8306", +1485 => x"560b0b75", +1486 => x"802efd98", +1487 => x"38ff1cf8", +1488 => x"1b5b5c88", +1489 => x"1a087a2e", +1490 => x"e838fd95", +1491 => x"39831953", +1492 => x"0b0bfcbc", +1493 => x"39831470", +1494 => x"822c8171", +1495 => x"2b80e6a4", +1496 => x"08077080", +1497 => x"e6a00b84", +1498 => x"050c7610", +1499 => x"101080e6", +1500 => x"a0058871", +1501 => x"0508718c", +1502 => x"1c0c7088", +1503 => x"1c0c7a88", +1504 => x"73050c58", +1505 => x"530b0b5d", +1506 => x"56530b0b", +1507 => x"fecf3980", +1508 => x"e5e40817", +1509 => x"59800876", +1510 => x"2e819438", +1511 => x"80e69408", +1512 => x"ff2e84b7", +1513 => x"38737631", +1514 => x"1980e5e4", +1515 => x"0c738706", +1516 => x"7056530b", +1517 => x"0b72802e", +1518 => x"88388873", +1519 => x"31701555", +1520 => x"5576149f", +1521 => x"ff06a080", +1522 => x"71311670", +1523 => x"540b0b7e", +1524 => x"530b0b51", +1525 => x"530b0b85", +1526 => x"de3f8008", +1527 => x"568008ff", +1528 => x"2e81a238", +1529 => x"80e5e408", +1530 => x"73057080", +1531 => x"e5e40c74", +1532 => x"7580e6a0", +1533 => x"0b88050c", +1534 => x"77763115", +1535 => x"81075556", +1536 => x"597a80e6", +1537 => x"a02e83e0", +1538 => x"38798f26", +1539 => x"838d3881", +1540 => x"0b84150c", +1541 => x"841508fc", +1542 => x"06707931", +1543 => x"7972268f", +1544 => x"7225075d", +1545 => x"555a7a80", +1546 => x"2efcc938", +1547 => x"80e03980", +1548 => x"089fff06", +1549 => x"550b0b74", +1550 => x"fee23878", +1551 => x"80e5e40c", +1552 => x"80e6a00b", +1553 => x"8805087a", +1554 => x"18810784", +1555 => x"72050c55", +1556 => x"80e69008", +1557 => x"79278638", +1558 => x"7880e690", +1559 => x"0c80e68c", +1560 => x"087927fb", +1561 => x"f9387880", +1562 => x"e68c0c84", +1563 => x"1508fc06", +1564 => x"70793179", +1565 => x"72268f72", +1566 => x"25075d55", +1567 => x"5a7a802e", +1568 => x"fbf2388a", +1569 => x"39807457", +1570 => x"530b0bfe", +1571 => x"d7397c51", +1572 => x"84a43f80", +1573 => x"0b800c8e", +1574 => x"3d0d0480", +1575 => x"7324a538", +1576 => x"72822c81", +1577 => x"712b80e6", +1578 => x"a4080770", +1579 => x"80e6a00b", +1580 => x"84050c5c", +1581 => x"5a768c17", +1582 => x"0c738817", +1583 => x"0c758818", +1584 => x"0cf9bf39", +1585 => x"83730570", +1586 => x"822c8171", +1587 => x"2b80e6a4", +1588 => x"08077080", +1589 => x"e6a00b84", +1590 => x"050c5d5b", +1591 => x"530b0bd5", +1592 => x"397a7506", +1593 => x"5c0b0b7b", +1594 => x"fbfa3884", +1595 => x"19751056", +1596 => x"59ef39ff", +1597 => x"17810559", +1598 => x"f6bf398c", +1599 => x"15088816", +1600 => x"08718c72", +1601 => x"050c8872", +1602 => x"050c5975", +1603 => x"15847105", +1604 => x"08810784", +1605 => x"72050c58", +1606 => x"7c51839a", +1607 => x"3f881554", +1608 => x"0b0bfaf2", +1609 => x"39771678", +1610 => x"81078418", +1611 => x"0c8c1708", +1612 => x"88180871", +1613 => x"8c72050c", +1614 => x"8872050c", +1615 => x"5c7080e6", +1616 => x"b40c7080", +1617 => x"e6b00c80", +1618 => x"e6a80b8c", +1619 => x"72050c8c", +1620 => x"71050888", +1621 => x"72050c77", +1622 => x"81078472", +1623 => x"050c7705", +1624 => x"77710c55", +1625 => x"7c5182ce", +1626 => x"3f881654", +1627 => x"0b0bf4b6", +1628 => x"39721684", +1629 => x"71050881", +1630 => x"07847205", +1631 => x"0c588c16", +1632 => x"08881708", +1633 => x"718c7205", +1634 => x"0c887205", +1635 => x"0c577c51", +1636 => x"82a43f88", +1637 => x"16540b0b", +1638 => x"f48c3972", +1639 => x"84150cf4", +1640 => x"1af80670", +1641 => x"841d0881", +1642 => x"0607841d", +1643 => x"0c701c55", +1644 => x"56850b84", +1645 => x"150c850b", +1646 => x"88150c8f", +1647 => x"7627fd90", +1648 => x"38881b52", +1649 => x"0b0b7c51", +1650 => x"85b43f80", +1651 => x"e6a00b88", +1652 => x"050880e5", +1653 => x"e4085a55", +1654 => x"fcf63978", +1655 => x"80e5e40c", +1656 => x"7380e694", +1657 => x"0cfbc639", +1658 => x"7284150c", +1659 => x"fce239fb", +1660 => x"3d0d7770", +1661 => x"7a7c5855", +1662 => x"530b0b56", +1663 => x"8f752781", +1664 => x"85387276", +1665 => x"07830651", +1666 => x"0b0b7080", +1667 => x"f9387573", +1668 => x"520b0b54", +1669 => x"0b0b7070", +1670 => x"8405520b", +1671 => x"0b087470", +1672 => x"8405560c", +1673 => x"73717084", +1674 => x"05530b0b", +1675 => x"08717084", +1676 => x"05530b0b", +1677 => x"0c717084", +1678 => x"05530b0b", +1679 => x"08717084", +1680 => x"05530b0b", +1681 => x"0c717084", +1682 => x"05530b0b", +1683 => x"08717084", +1684 => x"05530b0b", +1685 => x"0cf01656", +1686 => x"540b0b74", +1687 => x"8f26ffb6", +1688 => x"38837527", +1689 => x"99387070", +1690 => x"8405520b", +1691 => x"0b087470", +1692 => x"8405560c", +1693 => x"fc15550b", +1694 => x"0b748326", +1695 => x"e9387371", +1696 => x"540b0b52", +1697 => x"0b0bff15", +1698 => x"510b0b70", +1699 => x"ff2e9f38", +1700 => x"72708105", +1701 => x"540b0b33", +1702 => x"72708105", +1703 => x"540b0b34", +1704 => x"ff710551", +1705 => x"0b0b70ff", +1706 => x"2e098106", +1707 => x"e3387580", +1708 => x"0c873d0d", +1709 => x"04040470", +1710 => x"70707080", +1711 => x"0b81c5e8", +1712 => x"0c765188", +1713 => x"d93f8008", +1714 => x"530b0b80", +1715 => x"08ff2e89", +1716 => x"3872800c", +1717 => x"50505050", +1718 => x"0481c5e8", +1719 => x"08540b0b", +1720 => x"73802eed", +1721 => x"38757471", +1722 => x"0c520b0b", +1723 => x"72800c50", +1724 => x"50505004", +1725 => x"fb3d0d77", +1726 => x"79707207", +1727 => x"8306530b", +1728 => x"0b540b0b", +1729 => x"520b0b70", +1730 => x"9b387173", +1731 => x"7308540b", +1732 => x"0b56540b", +1733 => x"0b717308", +1734 => x"2e80d838", +1735 => x"7375540b", +1736 => x"0b520b0b", +1737 => x"0b0b7133", +1738 => x"7081ff06", +1739 => x"520b0b54", +1740 => x"0b0b7080", +1741 => x"2ea53872", +1742 => x"3355700b", +1743 => x"752e0981", +1744 => x"069c3881", +1745 => x"72058114", +1746 => x"71337081", +1747 => x"ff06540b", +1748 => x"0b56540b", +1749 => x"0b520b0b", +1750 => x"70dd3872", +1751 => x"33557381", +1752 => x"ff067581", +1753 => x"ff067171", +1754 => x"31800c55", +1755 => x"520b0b87", +1756 => x"3d0d0471", +1757 => x"09f7fbfd", +1758 => x"ff730506", +1759 => x"f8848281", +1760 => x"8006520b", +1761 => x"0b0b0b71", +1762 => x"9f388414", +1763 => x"84167108", +1764 => x"540b0b56", +1765 => x"540b0b71", +1766 => x"75082ed7", +1767 => x"38737554", +1768 => x"0b0b520b", +1769 => x"0bfefd39", +1770 => x"800b800c", +1771 => x"873d0d04", +1772 => x"fb3d0d77", +1773 => x"70520b0b", +1774 => x"56fdfa3f", +1775 => x"80e6a00b", +1776 => x"88050884", +1777 => x"710508fc", +1778 => x"06707b31", +1779 => x"9fef05e0", +1780 => x"8006e080", +1781 => x"05520b0b", +1782 => x"5555a080", +1783 => x"75249838", +1784 => x"80520b0b", +1785 => x"7551fdcf", +1786 => x"3f80e6a8", +1787 => x"0814530b", +1788 => x"0b728008", +1789 => x"2e913875", +1790 => x"51fdbb3f", +1791 => x"80530b0b", +1792 => x"72800c87", +1793 => x"3d0d0474", +1794 => x"30520b0b", +1795 => x"7551fda7", +1796 => x"3f8008ff", +1797 => x"2eab3880", +1798 => x"e6a00b88", +1799 => x"05087476", +1800 => x"31810784", +1801 => x"72050c53", +1802 => x"0b0b80e5", +1803 => x"e4087531", +1804 => x"80e5e40c", +1805 => x"7551fcfe", +1806 => x"3f810b80", +1807 => x"0c873d0d", +1808 => x"0480520b", +1809 => x"0b7551fc", +1810 => x"ee3f80e6", +1811 => x"a00b8805", +1812 => x"08800871", +1813 => x"31540b0b", +1814 => x"540b0b8f", +1815 => x"7325ff97", +1816 => x"38800880", +1817 => x"e6940831", +1818 => x"80e5e40c", +1819 => x"72810784", +1820 => x"150c7551", +1821 => x"fcc03f80", +1822 => x"530b0bff", +1823 => x"8339f73d", +1824 => x"0d7b7d54", +1825 => x"0b0b5a72", +1826 => x"802e82ab", +1827 => x"387951fc", +1828 => x"a43ff873", +1829 => x"05847105", +1830 => x"0870fe06", +1831 => x"70730584", +1832 => x"710508fc", +1833 => x"065c5758", +1834 => x"540b0b57", +1835 => x"80e6a808", +1836 => x"742e838b", +1837 => x"38778415", +1838 => x"0c807381", +1839 => x"0656590b", +1840 => x"740b792e", +1841 => x"81f53877", +1842 => x"14847105", +1843 => x"08810656", +1844 => x"530b0b74", +1845 => x"a3387716", +1846 => x"56788287", +1847 => x"38881408", +1848 => x"550b0b74", +1849 => x"80e6a82e", +1850 => x"83a7388c", +1851 => x"1408708c", +1852 => x"170c7588", +1853 => x"72050c58", +1854 => x"75810784", +1855 => x"180c7517", +1856 => x"76710c54", +1857 => x"0b0b7881", +1858 => x"a93883ff", +1859 => x"762781e5", +1860 => x"3875892a", +1861 => x"76832a54", +1862 => x"0b0b540b", +1863 => x"0b73802e", +1864 => x"80cb3875", +1865 => x"862ab805", +1866 => x"530b0b84", +1867 => x"7427be38", +1868 => x"80db1453", +1869 => x"0b0b9474", +1870 => x"27b33875", +1871 => x"8c2a80ee", +1872 => x"05530b0b", +1873 => x"80d47427", +1874 => x"a438758f", +1875 => x"2a80f705", +1876 => x"530b0b82", +1877 => x"d4742795", +1878 => x"3875922a", +1879 => x"80fc0553", +1880 => x"0b0b8ad4", +1881 => x"74278638", +1882 => x"80fe530b", +1883 => x"0b721010", +1884 => x"1080e6a0", +1885 => x"05887105", +1886 => x"0855550b", +1887 => x"730b752e", +1888 => x"82da3884", +1889 => x"1408fc06", +1890 => x"59750b79", +1891 => x"278f3888", +1892 => x"1408540b", +1893 => x"0b73752e", +1894 => x"098106e7", +1895 => x"388c1408", +1896 => x"708c190c", +1897 => x"7488190c", +1898 => x"77887205", +1899 => x"0c55768c", +1900 => x"150c7951", +1901 => x"fa803f8b", +1902 => x"3d0d0476", +1903 => x"08777131", +1904 => x"58760588", +1905 => x"18085656", +1906 => x"0b7480e6", +1907 => x"a82e80ea", +1908 => x"388c1708", +1909 => x"708c170c", +1910 => x"75887205", +1911 => x"0c530b0b", +1912 => x"fde53988", +1913 => x"14088c15", +1914 => x"08708c73", +1915 => x"050c5988", +1916 => x"190cfe84", +1917 => x"3975832a", +1918 => x"70540b0b", +1919 => x"540b0b80", +1920 => x"742481a2", +1921 => x"3872822c", +1922 => x"81712b80", +1923 => x"e6a40807", +1924 => x"80e6a00b", +1925 => x"84050c74", +1926 => x"10101080", +1927 => x"e6a00588", +1928 => x"71050871", +1929 => x"8c1b0c70", +1930 => x"881b0c79", +1931 => x"8873050c", +1932 => x"565a5576", +1933 => x"8c150cfe", +1934 => x"f9398159", +1935 => x"fd893977", +1936 => x"16738106", +1937 => x"540b0b55", +1938 => x"729a3876", +1939 => x"08777131", +1940 => x"5875058c", +1941 => x"18088819", +1942 => x"08718c72", +1943 => x"050c8872", +1944 => x"050c5555", +1945 => x"0b0b7481", +1946 => x"0784180c", +1947 => x"7680e6a0", +1948 => x"0b88050c", +1949 => x"80e69c08", +1950 => x"7526feb6", +1951 => x"3880e698", +1952 => x"08520b0b", +1953 => x"7951faa8", +1954 => x"3f7951f8", +1955 => x"a93ffea7", +1956 => x"3981778c", +1957 => x"170c7788", +1958 => x"170c758c", +1959 => x"190c7588", +1960 => x"190c59fc", +1961 => x"d3398314", +1962 => x"70822c81", +1963 => x"712b80e6", +1964 => x"a4080780", +1965 => x"e6a00b84", +1966 => x"050c7510", +1967 => x"101080e6", +1968 => x"a0058871", +1969 => x"0508718c", +1970 => x"1c0c7088", +1971 => x"1c0c7a88", +1972 => x"73050c57", +1973 => x"5b56530b", +1974 => x"0bfed839", +1975 => x"807324a3", +1976 => x"3872822c", +1977 => x"81712b80", +1978 => x"e6a40807", +1979 => x"80e6a00b", +1980 => x"84050c58", +1981 => x"748c180c", +1982 => x"7388180c", +1983 => x"7688160c", +1984 => x"fdac3983", +1985 => x"73057082", +1986 => x"2c81712b", +1987 => x"80e6a408", +1988 => x"0780e6a0", +1989 => x"0b84050c", +1990 => x"59530b0b", +1991 => x"d7397070", +1992 => x"7081c5ec", +1993 => x"08510b0b", +1994 => x"708a3881", +1995 => x"c5f47081", +1996 => x"c5ec0c51", +1997 => x"740b7105", +1998 => x"520b0bff", +1999 => x"530b0b71", +2000 => x"87fb8080", +2001 => x"268a3871", +2002 => x"81c5ec0c", +2003 => x"70530b0b", +2004 => x"72800c50", +2005 => x"50500470", +2006 => x"70707080", +2007 => x"0b80e5d0", +2008 => x"08540b0b", +2009 => x"540b0b72", +2010 => x"812e9d38", +2011 => x"7381c5f0", +2012 => x"0ccabe3f", +2013 => x"c98a3f80", +2014 => x"f5a8520b", +2015 => x"0b8151d3", +2016 => x"fa3f8008", +2017 => x"518a8f3f", +2018 => x"7281c5f0", +2019 => x"0ccaa23f", +2020 => x"c8ee3f80", +2021 => x"f5a8520b", +2022 => x"0b8151d3", +2023 => x"de3f8008", +2024 => x"5189f33f", +2025 => x"00ff3900", +2026 => x"ff39f53d", +2027 => x"0d7e6081", +2028 => x"c5f00870", +2029 => x"5b585b5b", +2030 => x"7580c538", +2031 => x"777a25a2", +2032 => x"38771b70", +2033 => x"337081ff", +2034 => x"06585859", +2035 => x"758a2e99", +2036 => x"387681ff", +2037 => x"0651c9b4", +2038 => x"3f811858", +2039 => x"790b7824", +2040 => x"e0387980", +2041 => x"0c8d3d0d", +2042 => x"048d51c9", +2043 => x"9f3f7833", +2044 => x"7081ff06", +2045 => x"520b0b57", +2046 => x"c9923f81", +2047 => x"1858dd39", +2048 => x"79557a54", +2049 => x"0b0b7d53", +2050 => x"0b0b8552", +2051 => x"0b0b8d3d", +2052 => x"fc0551c8", +2053 => x"af3f8008", +2054 => x"5688f43f", +2055 => x"7b80080c", +2056 => x"75800c8d", +2057 => x"3d0d04f6", +2058 => x"3d0d7d7f", +2059 => x"81c5f008", +2060 => x"705a585a", +2061 => x"5a7580ca", +2062 => x"38767925", +2063 => x"b638761a", +2064 => x"58c8a53f", +2065 => x"80087834", +2066 => x"800b8008", +2067 => x"81ff0657", +2068 => x"580b758a", +2069 => x"2ea83875", +2070 => x"8d327030", +2071 => x"7080257a", +2072 => x"07515156", +2073 => x"0b0b7580", +2074 => x"c0388117", +2075 => x"57780b77", +2076 => x"24cc3876", +2077 => x"560b0b75", +2078 => x"800c8c3d", +2079 => x"0d048158", +2080 => x"d6397855", +2081 => x"79540b0b", +2082 => x"7c530b0b", +2083 => x"84520b0b", +2084 => x"8c3dfc05", +2085 => x"51c7ad3f", +2086 => x"80085687", +2087 => x"f23f7a80", +2088 => x"080c7580", +2089 => x"0c8c3d0d", +2090 => x"04811756", +2091 => x"c839f93d", +2092 => x"0d795781", +2093 => x"c5f00880", +2094 => x"2eb23876", +2095 => x"518ac03f", +2096 => x"7b567a55", +2097 => x"80088105", +2098 => x"540b0b76", +2099 => x"530b0b82", +2100 => x"520b0b89", +2101 => x"3dfc0551", +2102 => x"c6ea3f80", +2103 => x"085787af", +2104 => x"3f778008", +2105 => x"0c76800c", +2106 => x"893d0d04", +2107 => x"87a13f85", +2108 => x"0b80080c", +2109 => x"ff0b800c", +2110 => x"893d0d04", +2111 => x"fb3d0d81", +2112 => x"c5f00870", +2113 => x"56540b0b", +2114 => x"73883874", +2115 => x"800c873d", +2116 => x"0d047753", +2117 => x"0b0b8352", +2118 => x"0b0b873d", +2119 => x"fc0551c6", +2120 => x"a33f8008", +2121 => x"540b0b86", +2122 => x"e63f7580", +2123 => x"080c7380", +2124 => x"0c873d0d", +2125 => x"04ff0b80", +2126 => x"0c04fb3d", +2127 => x"0d775581", +2128 => x"c5f00880", +2129 => x"2eae3874", +2130 => x"5189b43f", +2131 => x"80088105", +2132 => x"540b0b74", +2133 => x"530b0b87", +2134 => x"520b0b87", +2135 => x"3dfc0551", +2136 => x"c5e23f80", +2137 => x"085586a7", +2138 => x"3f758008", +2139 => x"0c74800c", +2140 => x"873d0d04", +2141 => x"86993f85", +2142 => x"0b80080c", +2143 => x"ff0b800c", +2144 => x"873d0d04", +2145 => x"fa3d0d81", +2146 => x"c5f00880", +2147 => x"2ea8387a", +2148 => x"5579540b", +2149 => x"0b78530b", +2150 => x"0b86520b", +2151 => x"0b883dfc", +2152 => x"0551c5a0", +2153 => x"3f800856", +2154 => x"85e53f76", +2155 => x"80080c75", +2156 => x"800c883d", +2157 => x"0d0485d7", +2158 => x"3f9d0b80", +2159 => x"080cff0b", +2160 => x"800c883d", +2161 => x"0d04f73d", +2162 => x"0d7b7d5b", +2163 => x"59bc530b", +2164 => x"0b80520b", +2165 => x"0b795186", +2166 => x"fd3f8070", +2167 => x"56579856", +2168 => x"74197033", +2169 => x"70782b79", +2170 => x"078118f8", +2171 => x"1a5a5859", +2172 => x"55588475", +2173 => x"24ea3876", +2174 => x"7a238419", +2175 => x"58807056", +2176 => x"57985674", +2177 => x"18703370", +2178 => x"782b7907", +2179 => x"8118f81a", +2180 => x"5a585951", +2181 => x"540b0b84", +2182 => x"7524e838", +2183 => x"76821b23", +2184 => x"88195880", +2185 => x"70565798", +2186 => x"56741870", +2187 => x"3370782b", +2188 => x"79078118", +2189 => x"f81a5a58", +2190 => x"5951540b", +2191 => x"0b847524", +2192 => x"e8387684", +2193 => x"1b0c8c19", +2194 => x"58807056", +2195 => x"57985674", +2196 => x"18703370", +2197 => x"782b7907", +2198 => x"8118f81a", +2199 => x"5a585951", +2200 => x"540b0b84", +2201 => x"7524e838", +2202 => x"76881b23", +2203 => x"90195880", +2204 => x"70565798", +2205 => x"56741870", +2206 => x"3370782b", +2207 => x"79078118", +2208 => x"f81a5a58", +2209 => x"5951540b", +2210 => x"0b847524", +2211 => x"e838768a", +2212 => x"1b239419", +2213 => x"58807056", +2214 => x"57985674", +2215 => x"18703370", +2216 => x"782b7907", +2217 => x"8118f81a", +2218 => x"5a585951", +2219 => x"540b0b84", +2220 => x"7524e838", +2221 => x"768c1b23", +2222 => x"98195880", +2223 => x"70565798", +2224 => x"56741870", +2225 => x"3370782b", +2226 => x"79078118", +2227 => x"f81a5a58", +2228 => x"5951540b", +2229 => x"0b847524", +2230 => x"e838768e", +2231 => x"1b239c19", +2232 => x"58807056", +2233 => x"57b85674", +2234 => x"18703370", +2235 => x"782b7907", +2236 => x"8118f81a", +2237 => x"5a58595a", +2238 => x"540b0b88", +2239 => x"7524e838", +2240 => x"76901b0c", +2241 => x"8b3d0d04", +2242 => x"e93d0d6a", +2243 => x"81c5f008", +2244 => x"57570b75", +2245 => x"933880c0", +2246 => x"800b8418", +2247 => x"0c75ac18", +2248 => x"0c75800c", +2249 => x"993d0d04", +2250 => x"893d7055", +2251 => x"6a540b0b", +2252 => x"558a520b", +2253 => x"0b993dff", +2254 => x"bc0551c2", +2255 => x"873f8008", +2256 => x"77530b0b", +2257 => x"75520b0b", +2258 => x"56fcfb3f", +2259 => x"82c13f77", +2260 => x"80080c75", +2261 => x"800c993d", +2262 => x"0d04e93d", +2263 => x"0d695781", +2264 => x"c5f00880", +2265 => x"2ebd3876", +2266 => x"5185943f", +2267 => x"893d7056", +2268 => x"80088105", +2269 => x"5577540b", +2270 => x"0b568f52", +2271 => x"0b0b993d", +2272 => x"ffbc0551", +2273 => x"c1be3f80", +2274 => x"086b530b", +2275 => x"0b76520b", +2276 => x"0b57fcb2", +2277 => x"3f81f83f", +2278 => x"7780080c", +2279 => x"76800c99", +2280 => x"3d0d0481", +2281 => x"ea3f850b", +2282 => x"80080cff", +2283 => x"0b800c99", +2284 => x"3d0d04fc", +2285 => x"3d0d8154", +2286 => x"0b0b81c5", +2287 => x"f0088838", +2288 => x"73800c86", +2289 => x"3d0d0476", +2290 => x"530b0b97", +2291 => x"b9520b0b", +2292 => x"863dfc05", +2293 => x"51c0ed3f", +2294 => x"8008540b", +2295 => x"0b81b03f", +2296 => x"7480080c", +2297 => x"73800c86", +2298 => x"3d0d04f4", +2299 => x"3d0d7e80", +2300 => x"f5d40870", +2301 => x"0881ff06", +2302 => x"913df805", +2303 => x"540b0b51", +2304 => x"5959c29d", +2305 => x"3f775780", +2306 => x"540b0b76", +2307 => x"557b7d58", +2308 => x"520b0b0b", +2309 => x"76530b0b", +2310 => x"8e3df005", +2311 => x"5184dc3f", +2312 => x"797b5879", +2313 => x"0c76841a", +2314 => x"0c78800c", +2315 => x"8e3d0d04", +2316 => x"f43d0d7e", +2317 => x"80f5d408", +2318 => x"70087081", +2319 => x"ff06923d", +2320 => x"f8055551", +2321 => x"5a5759c1", +2322 => x"d83f7757", +2323 => x"800b8b3d", +2324 => x"59540b0b", +2325 => x"76557b7d", +2326 => x"58520b0b", +2327 => x"0b76530b", +2328 => x"0b775184", +2329 => x"963f8056", +2330 => x"bd84c076", +2331 => x"5555797b", +2332 => x"58520b0b", +2333 => x"0b76530b", +2334 => x"0b775183", +2335 => x"fe3f7a57", +2336 => x"78802e84", +2337 => x"3876790c", +2338 => x"76800c8e", +2339 => x"3d0d0480", +2340 => x"eea80880", +2341 => x"0c04f73d", +2342 => x"0d7b80ee", +2343 => x"a80882c8", +2344 => x"7105085a", +2345 => x"540b0b5a", +2346 => x"77802e80", +2347 => x"eb388188", +2348 => x"18841908", +2349 => x"ff058171", +2350 => x"2b595559", +2351 => x"80742481", +2352 => x"80388074", +2353 => x"2480c138", +2354 => x"73822b78", +2355 => x"71058805", +2356 => x"56568180", +2357 => x"19087706", +2358 => x"530b0b72", +2359 => x"802e80c3", +2360 => x"38781670", +2361 => x"08530b0b", +2362 => x"530b0b79", +2363 => x"51740853", +2364 => x"0b0b722d", +2365 => x"ff14fc17", +2366 => x"fc177981", +2367 => x"2c5a5757", +2368 => x"540b0b73", +2369 => x"8025cb38", +2370 => x"7708580b", +2371 => x"0b77ff9e", +2372 => x"3880eea8", +2373 => x"08530b0b", +2374 => x"bc730508", +2375 => x"a9387951", +2376 => x"f5823f74", +2377 => x"08530b0b", +2378 => x"722dff14", +2379 => x"fc17fc17", +2380 => x"79812c5a", +2381 => x"5757540b", +2382 => x"0b738025", +2383 => x"ff9438c8", +2384 => x"398057fe", +2385 => x"fd397251", +2386 => x"bc730508", +2387 => x"540b0b73", +2388 => x"2d7951f4", +2389 => x"cf3ffb3d", +2390 => x"0d777a71", +2391 => x"028c05a3", +2392 => x"05335854", +2393 => x"0b0b540b", +2394 => x"0b568373", +2395 => x"2780e738", +2396 => x"75830651", +2397 => x"0b0b7080", +2398 => x"dd387488", +2399 => x"2b750770", +2400 => x"71902b07", +2401 => x"55518f73", +2402 => x"27b33873", +2403 => x"72708405", +2404 => x"540b0b0c", +2405 => x"71747170", +2406 => x"8405530b", +2407 => x"0b0c7471", +2408 => x"70840553", +2409 => x"0b0b0c74", +2410 => x"71708405", +2411 => x"530b0b0c", +2412 => x"f014540b", +2413 => x"0b520b0b", +2414 => x"728f26cf", +2415 => x"38837327", +2416 => x"95387372", +2417 => x"70840554", +2418 => x"0b0b0cfc", +2419 => x"7305530b", +2420 => x"0b728326", +2421 => x"ed38ff73", +2422 => x"05510b0b", +2423 => x"70ff2e98", +2424 => x"38747270", +2425 => x"8105540b", +2426 => x"0b34ff71", +2427 => x"05510b0b", +2428 => x"70ff2e09", +2429 => x"8106ea38", +2430 => x"75800c87", +2431 => x"3d0d0470", +2432 => x"70707075", +2433 => x"70718306", +2434 => x"530b0b55", +2435 => x"520b0b70", +2436 => x"80c53871", +2437 => x"70087009", +2438 => x"f7fbfdff", +2439 => x"720506f8", +2440 => x"84828180", +2441 => x"06540b0b", +2442 => x"520b0b53", +2443 => x"0b0b71a3", +2444 => x"38847305", +2445 => x"70087009", +2446 => x"f7fbfdff", +2447 => x"720506f8", +2448 => x"84828180", +2449 => x"06540b0b", +2450 => x"520b0b53", +2451 => x"0b0b7180", +2452 => x"2edf3872", +2453 => x"520b0b0b", +2454 => x"0b713353", +2455 => x"0b0b7280", +2456 => x"2e8f3881", +2457 => x"72057033", +2458 => x"540b0b52", +2459 => x"0b0b72f3", +2460 => x"38717431", +2461 => x"800c5050", +2462 => x"505004e4", +2463 => x"3d0d6ea1", +2464 => x"3d08a33d", +2465 => x"0859575f", +2466 => x"80764d77", +2467 => x"4ea33d08", +2468 => x"a53d0857", +2469 => x"4b0b754c", +2470 => x"5e0b0b7d", +2471 => x"6c2487b2", +2472 => x"38806a24", +2473 => x"87cd3869", +2474 => x"6b58566b", +2475 => x"6d5d460b", +2476 => x"7b477544", +2477 => x"76450b0b", +2478 => x"64646868", +2479 => x"5c5c5656", +2480 => x"0b7481f5", +2481 => x"38787627", +2482 => x"82dd3875", +2483 => x"81ff2683", +2484 => x"2b5583ff", +2485 => x"ff76278c", +2486 => x"389055fe", +2487 => x"800a7627", +2488 => x"83389855", +2489 => x"750b752a", +2490 => x"80e3bc05", +2491 => x"7033a077", +2492 => x"31713157", +2493 => x"55577480", +2494 => x"2e953875", +2495 => x"752ba076", +2496 => x"317a772b", +2497 => x"7c722a07", +2498 => x"7c782b5d", +2499 => x"5b59560b", +2500 => x"0b75902a", +2501 => x"7683ffff", +2502 => x"0671540b", +2503 => x"0b7a530b", +2504 => x"0b595788", +2505 => x"bf3f8008", +2506 => x"5b88a53f", +2507 => x"80088008", +2508 => x"79297c90", +2509 => x"2b7c902a", +2510 => x"07565659", +2511 => x"73752794", +2512 => x"388008ff", +2513 => x"05761555", +2514 => x"59757426", +2515 => x"87387474", +2516 => x"2687f438", +2517 => x"76520b0b", +2518 => x"73753151", +2519 => x"88863f80", +2520 => x"085587ec", +2521 => x"3f800880", +2522 => x"0879297b", +2523 => x"83ffff06", +2524 => x"77902b07", +2525 => x"56595773", +2526 => x"78279638", +2527 => x"8008ff05", +2528 => x"76155557", +2529 => x"75742689", +2530 => x"38777426", +2531 => x"77713158", +2532 => x"5678902b", +2533 => x"77075880", +2534 => x"5b0b0b7a", +2535 => x"4077417f", +2536 => x"0b615654", +2537 => x"0b0b7d80", +2538 => x"dd38737f", +2539 => x"0c747f84", +2540 => x"050c7e80", +2541 => x"0c9e3d0d", +2542 => x"0480705c", +2543 => x"58747926", +2544 => x"d8387481", +2545 => x"ff26832b", +2546 => x"577483ff", +2547 => x"ff2682bd", +2548 => x"3874772a", +2549 => x"80e3bc05", +2550 => x"7033a079", +2551 => x"31713159", +2552 => x"5c5d7682", +2553 => x"cf387654", +2554 => x"0b0b7479", +2555 => x"27853881", +2556 => x"540b0b79", +2557 => x"76277407", +2558 => x"59815878", +2559 => x"ff993876", +2560 => x"58805bff", +2561 => x"94397352", +2562 => x"0b0b7453", +2563 => x"0b0b9e3d", +2564 => x"e80551d2", +2565 => x"d43f6769", +2566 => x"567f0c74", +2567 => x"7f84050c", +2568 => x"7e800c9e", +2569 => x"3d0d0475", +2570 => x"802e81d2", +2571 => x"387581ff", +2572 => x"26832b55", +2573 => x"83ffff76", +2574 => x"278c3890", +2575 => x"55fe800a", +2576 => x"76278338", +2577 => x"9855750b", +2578 => x"752a80e3", +2579 => x"bc057033", +2580 => x"a0773171", +2581 => x"31575e54", +2582 => x"0b0b7484", +2583 => x"b8387876", +2584 => x"31540b0b", +2585 => x"8176902a", +2586 => x"7783ffff", +2587 => x"065f5d5b", +2588 => x"0b7b520b", +2589 => x"0b735185", +2590 => x"eb3f8008", +2591 => x"5785d13f", +2592 => x"80088008", +2593 => x"7e297890", +2594 => x"2b7c902a", +2595 => x"07565659", +2596 => x"73752794", +2597 => x"388008ff", +2598 => x"05761555", +2599 => x"59757426", +2600 => x"87387474", +2601 => x"26859738", +2602 => x"7b520b0b", +2603 => x"73753151", +2604 => x"85b23f80", +2605 => x"08558598", +2606 => x"3f800880", +2607 => x"087e297b", +2608 => x"83ffff06", +2609 => x"77902b07", +2610 => x"56595773", +2611 => x"78279638", +2612 => x"8008ff05", +2613 => x"76155557", +2614 => x"75742689", +2615 => x"38777426", +2616 => x"77713158", +2617 => x"5a78902b", +2618 => x"77077b41", +2619 => x"410b7f0b", +2620 => x"6156540b", +2621 => x"0b7d802e", +2622 => x"fdb038fe", +2623 => x"89397552", +2624 => x"0b0b8151", +2625 => x"84ca3f80", +2626 => x"0856fea1", +2627 => x"399057fe", +2628 => x"800a7527", +2629 => x"fdbb3898", +2630 => x"75712a80", +2631 => x"e3bc0570", +2632 => x"33a07331", +2633 => x"7131530b", +2634 => x"0b5d5e57", +2635 => x"0b0b7680", +2636 => x"2efdb338", +2637 => x"a0773175", +2638 => x"782b7772", +2639 => x"2a077779", +2640 => x"2b7b7a2b", +2641 => x"7d742a07", +2642 => x"7d7b2b73", +2643 => x"902a7483", +2644 => x"ffff0671", +2645 => x"597f772a", +2646 => x"585e5c41", +2647 => x"5f585c54", +2648 => x"0b0b8480", +2649 => x"3f800854", +2650 => x"0b0b83e4", +2651 => x"3f800880", +2652 => x"08792975", +2653 => x"902b7e90", +2654 => x"2a075656", +2655 => x"59737527", +2656 => x"99388008", +2657 => x"ff057b15", +2658 => x"55597a74", +2659 => x"268c3873", +2660 => x"75278738", +2661 => x"ff197b15", +2662 => x"55597652", +2663 => x"0b0b7375", +2664 => x"315183c0", +2665 => x"3f800855", +2666 => x"83a63f80", +2667 => x"08800879", +2668 => x"297d83ff", +2669 => x"ff067790", +2670 => x"2b075659", +2671 => x"57737827", +2672 => x"99388008", +2673 => x"ff057b15", +2674 => x"55577a74", +2675 => x"268c3873", +2676 => x"78278738", +2677 => x"ff177b15", +2678 => x"55570b73", +2679 => x"78317990", +2680 => x"2b780770", +2681 => x"83ffff06", +2682 => x"71902a79", +2683 => x"83ffff06", +2684 => x"7a902a73", +2685 => x"72297373", +2686 => x"29747329", +2687 => x"76742973", +2688 => x"902a0572", +2689 => x"05575543", +2690 => x"5f5b585a", +2691 => x"57595a74", +2692 => x"7c278638", +2693 => x"84808017", +2694 => x"5774902a", +2695 => x"177983ff", +2696 => x"ff067684", +2697 => x"80802905", +2698 => x"57570b0b", +2699 => x"767a269a", +2700 => x"38767a32", +2701 => x"70307072", +2702 => x"07802556", +2703 => x"5a5b7c76", +2704 => x"27fad438", +2705 => x"73802efa", +2706 => x"ce38ff18", +2707 => x"58805bfa", +2708 => x"c839ff76", +2709 => x"530b0b77", +2710 => x"540b0b9f", +2711 => x"3de80552", +2712 => x"0b0b5ece", +2713 => x"843f6769", +2714 => x"574c0b75", +2715 => x"4d698025", +2716 => x"f8b5387d", +2717 => x"096a6c5c", +2718 => x"530b0b7a", +2719 => x"540b0b9f", +2720 => x"3de80552", +2721 => x"0b0b5ecd", +2722 => x"e03f6769", +2723 => x"714c704d", +2724 => x"5856f897", +2725 => x"39a07531", +2726 => x"76762b7a", +2727 => x"772b7c73", +2728 => x"2a077c78", +2729 => x"2b72902a", +2730 => x"7383ffff", +2731 => x"0671587e", +2732 => x"762a5742", +2733 => x"405d5d57", +2734 => x"5881a93f", +2735 => x"80085781", +2736 => x"8f3f8008", +2737 => x"80087e29", +2738 => x"78902b7d", +2739 => x"902a0756", +2740 => x"56597375", +2741 => x"27993880", +2742 => x"08ff0576", +2743 => x"15555975", +2744 => x"74268c38", +2745 => x"73752787", +2746 => x"38ff1976", +2747 => x"1555597b", +2748 => x"520b0b73", +2749 => x"75315180", +2750 => x"eb3f8008", +2751 => x"5580d13f", +2752 => x"80088008", +2753 => x"7e297c83", +2754 => x"ffff0670", +2755 => x"78902b07", +2756 => x"51565858", +2757 => x"73772799", +2758 => x"388008ff", +2759 => x"05761555", +2760 => x"58757426", +2761 => x"8c387377", +2762 => x"278738ff", +2763 => x"18761555", +2764 => x"5878902b", +2765 => x"78077478", +2766 => x"31555bfa", +2767 => x"b339ff19", +2768 => x"76155559", +2769 => x"fae239ff", +2770 => x"19761555", +2771 => x"59f88539", +2772 => x"70707080", +2773 => x"530b0b75", +2774 => x"520b0b74", +2775 => x"51ceaf3f", +2776 => x"50505004", +2777 => x"70707081", +2778 => x"530b0b75", +2779 => x"520b0b74", +2780 => x"51ce9b3f", +2781 => x"50505004", +2782 => x"707080f5", +2783 => x"b00bfc05", +2784 => x"7008520b", +2785 => x"0b520b0b", +2786 => x"0b70ff2e", +2787 => x"9738702d", +2788 => x"fc720570", +2789 => x"08520b0b", +2790 => x"520b0b0b", +2791 => x"70ff2e09", +2792 => x"8106eb38", +2793 => x"50500404", +2794 => x"ffb4963f", +2795 => x"04000000", +2796 => x"30313233", +2797 => x"34353637", +2798 => x"38390000", +2799 => x"44485259", +2800 => x"53544f4e", +2801 => x"45205052", +2802 => x"4f475241", +2803 => x"4d2c2053", +2804 => x"4f4d4520", +2805 => x"53545249", +2806 => x"4e470000", +2807 => x"44485259", +2808 => x"53544f4e", +2809 => x"45205052", +2810 => x"4f475241", +2811 => x"4d2c2031", +2812 => x"27535420", +2813 => x"53545249", +2814 => x"4e470000", +2815 => x"44687279", +2816 => x"73746f6e", +2817 => x"65204265", +2818 => x"6e63686d", +2819 => x"61726b2c", +2820 => x"20566572", +2821 => x"73696f6e", +2822 => x"20322e31", +2823 => x"20284c61", +2824 => x"6e677561", +2825 => x"67653a20", +2826 => x"43290a00", +2827 => x"50726f67", +2828 => x"72616d20", +2829 => x"636f6d70", +2830 => x"696c6564", +2831 => x"20776974", +2832 => x"68202772", +2833 => x"65676973", +2834 => x"74657227", +2835 => x"20617474", +2836 => x"72696275", +2837 => x"74650a00", +2838 => x"45786563", +2839 => x"7574696f", +2840 => x"6e207374", +2841 => x"61727473", +2842 => x"2c202564", +2843 => x"2072756e", +2844 => x"73207468", +2845 => x"726f7567", +2846 => x"68204468", +2847 => x"72797374", +2848 => x"6f6e650a", +2849 => x"00000000", +2850 => x"44485259", +2851 => x"53544f4e", +2852 => x"45205052", +2853 => x"4f475241", +2854 => x"4d2c2032", +2855 => x"274e4420", +2856 => x"53545249", +2857 => x"4e470000", +2858 => x"45786563", +2859 => x"7574696f", +2860 => x"6e20656e", +2861 => x"64730a00", +2862 => x"46696e61", +2863 => x"6c207661", +2864 => x"6c756573", +2865 => x"206f6620", +2866 => x"74686520", +2867 => x"76617269", +2868 => x"61626c65", +2869 => x"73207573", +2870 => x"65642069", +2871 => x"6e207468", +2872 => x"65206265", +2873 => x"6e63686d", +2874 => x"61726b3a", +2875 => x"0a000000", +2876 => x"496e745f", +2877 => x"476c6f62", +2878 => x"3a202020", +2879 => x"20202020", +2880 => x"20202020", +2881 => x"2025640a", +2882 => x"00000000", +2883 => x"20202020", +2884 => x"20202020", +2885 => x"73686f75", +2886 => x"6c642062", +2887 => x"653a2020", +2888 => x"2025640a", +2889 => x"00000000", +2890 => x"426f6f6c", +2891 => x"5f476c6f", +2892 => x"623a2020", +2893 => x"20202020", +2894 => x"20202020", +2895 => x"2025640a", +2896 => x"00000000", +2897 => x"43685f31", +2898 => x"5f476c6f", +2899 => x"623a2020", +2900 => x"20202020", +2901 => x"20202020", +2902 => x"2025630a", +2903 => x"00000000", +2904 => x"20202020", +2905 => x"20202020", +2906 => x"73686f75", +2907 => x"6c642062", +2908 => x"653a2020", +2909 => x"2025630a", +2910 => x"00000000", +2911 => x"43685f32", +2912 => x"5f476c6f", +2913 => x"623a2020", +2914 => x"20202020", +2915 => x"20202020", +2916 => x"2025630a", +2917 => x"00000000", +2918 => x"4172725f", +2919 => x"315f476c", +2920 => x"6f625b38", +2921 => x"5d3a2020", +2922 => x"20202020", +2923 => x"2025640a", +2924 => x"00000000", +2925 => x"4172725f", +2926 => x"325f476c", +2927 => x"6f625b38", +2928 => x"5d5b375d", +2929 => x"3a202020", +2930 => x"2025640a", +2931 => x"00000000", +2932 => x"20202020", +2933 => x"20202020", +2934 => x"73686f75", +2935 => x"6c642062", +2936 => x"653a2020", +2937 => x"204e756d", +2938 => x"6265725f", +2939 => x"4f665f52", +2940 => x"756e7320", +2941 => x"2b203130", +2942 => x"0a000000", +2943 => x"5074725f", +2944 => x"476c6f62", +2945 => x"2d3e0a00", +2946 => x"20205074", +2947 => x"725f436f", +2948 => x"6d703a20", +2949 => x"20202020", +2950 => x"20202020", +2951 => x"2025640a", +2952 => x"00000000", +2953 => x"20202020", +2954 => x"20202020", +2955 => x"73686f75", +2956 => x"6c642062", +2957 => x"653a2020", +2958 => x"2028696d", +2959 => x"706c656d", +2960 => x"656e7461", +2961 => x"74696f6e", +2962 => x"2d646570", +2963 => x"656e6465", +2964 => x"6e74290a", +2965 => x"00000000", +2966 => x"20204469", +2967 => x"7363723a", +2968 => x"20202020", +2969 => x"20202020", +2970 => x"20202020", +2971 => x"2025640a", +2972 => x"00000000", +2973 => x"2020456e", +2974 => x"756d5f43", +2975 => x"6f6d703a", +2976 => x"20202020", +2977 => x"20202020", +2978 => x"2025640a", +2979 => x"00000000", +2980 => x"2020496e", +2981 => x"745f436f", +2982 => x"6d703a20", +2983 => x"20202020", +2984 => x"20202020", +2985 => x"2025640a", +2986 => x"00000000", +2987 => x"20205374", +2988 => x"725f436f", +2989 => x"6d703a20", +2990 => x"20202020", +2991 => x"20202020", +2992 => x"2025730a", +2993 => x"00000000", +2994 => x"20202020", +2995 => x"20202020", +2996 => x"73686f75", +2997 => x"6c642062", +2998 => x"653a2020", +2999 => x"20444852", +3000 => x"5953544f", +3001 => x"4e452050", +3002 => x"524f4752", +3003 => x"414d2c20", +3004 => x"534f4d45", +3005 => x"20535452", +3006 => x"494e470a", +3007 => x"00000000", +3008 => x"4e657874", +3009 => x"5f507472", +3010 => x"5f476c6f", +3011 => x"622d3e0a", +3012 => x"00000000", +3013 => x"20202020", +3014 => x"20202020", +3015 => x"73686f75", +3016 => x"6c642062", +3017 => x"653a2020", +3018 => x"2028696d", +3019 => x"706c656d", +3020 => x"656e7461", +3021 => x"74696f6e", +3022 => x"2d646570", +3023 => x"656e6465", +3024 => x"6e74292c", +3025 => x"2073616d", +3026 => x"65206173", +3027 => x"2061626f", +3028 => x"76650a00", +3029 => x"496e745f", +3030 => x"315f4c6f", +3031 => x"633a2020", +3032 => x"20202020", +3033 => x"20202020", +3034 => x"2025640a", +3035 => x"00000000", +3036 => x"496e745f", +3037 => x"325f4c6f", +3038 => x"633a2020", +3039 => x"20202020", +3040 => x"20202020", +3041 => x"2025640a", +3042 => x"00000000", +3043 => x"496e745f", +3044 => x"335f4c6f", +3045 => x"633a2020", +3046 => x"20202020", +3047 => x"20202020", +3048 => x"2025640a", +3049 => x"00000000", +3050 => x"456e756d", +3051 => x"5f4c6f63", +3052 => x"3a202020", +3053 => x"20202020", +3054 => x"20202020", +3055 => x"2025640a", +3056 => x"00000000", +3057 => x"5374725f", +3058 => x"315f4c6f", +3059 => x"633a2020", +3060 => x"20202020", +3061 => x"20202020", +3062 => x"2025730a", +3063 => x"00000000", +3064 => x"20202020", +3065 => x"20202020", +3066 => x"73686f75", +3067 => x"6c642062", +3068 => x"653a2020", +3069 => x"20444852", +3070 => x"5953544f", +3071 => x"4e452050", +3072 => x"524f4752", +3073 => x"414d2c20", +3074 => x"31275354", +3075 => x"20535452", +3076 => x"494e470a", +3077 => x"00000000", +3078 => x"5374725f", +3079 => x"325f4c6f", +3080 => x"633a2020", +3081 => x"20202020", +3082 => x"20202020", +3083 => x"2025730a", +3084 => x"00000000", +3085 => x"20202020", +3086 => x"20202020", +3087 => x"73686f75", +3088 => x"6c642062", +3089 => x"653a2020", +3090 => x"20444852", +3091 => x"5953544f", +3092 => x"4e452050", +3093 => x"524f4752", +3094 => x"414d2c20", +3095 => x"32274e44", +3096 => x"20535452", +3097 => x"494e470a", +3098 => x"00000000", +3099 => x"55736572", +3100 => x"2074696d", +3101 => x"653a2025", +3102 => x"640a0000", +3103 => x"4d696372", +3104 => x"6f736563", +3105 => x"6f6e6473", +3106 => x"20666f72", +3107 => x"206f6e65", +3108 => x"2072756e", +3109 => x"20746872", +3110 => x"6f756768", +3111 => x"20446872", +3112 => x"7973746f", +3113 => x"6e653a20", +3114 => x"00000000", +3115 => x"2564200a", +3116 => x"00000000", +3117 => x"44687279", +3118 => x"73746f6e", +3119 => x"65732070", +3120 => x"65722053", +3121 => x"65636f6e", +3122 => x"643a2020", +3123 => x"20202020", +3124 => x"20202020", +3125 => x"20202020", +3126 => x"20202020", +3127 => x"20202020", +3128 => x"00000000", +3129 => x"56415820", +3130 => x"4d495053", +3131 => x"20726174", +3132 => x"696e6720", +3133 => x"2a203130", +3134 => x"3030203d", +3135 => x"20256420", +3136 => x"0a000000", +3137 => x"50726f67", +3138 => x"72616d20", +3139 => x"636f6d70", +3140 => x"696c6564", +3141 => x"20776974", +3142 => x"686f7574", +3143 => x"20277265", +3144 => x"67697374", +3145 => x"65722720", +3146 => x"61747472", +3147 => x"69627574", +3148 => x"650a0000", +3149 => x"4d656173", +3150 => x"75726564", +3151 => x"2074696d", +3152 => x"6520746f", +3153 => x"6f20736d", +3154 => x"616c6c20", +3155 => x"746f206f", +3156 => x"62746169", +3157 => x"6e206d65", +3158 => x"616e696e", +3159 => x"6766756c", +3160 => x"20726573", +3161 => x"756c7473", +3162 => x"0a000000", +3163 => x"506c6561", +3164 => x"73652069", +3165 => x"6e637265", +3166 => x"61736520", +3167 => x"6e756d62", +3168 => x"6572206f", +3169 => x"66207275", +3170 => x"6e730a00", +3171 => x"44485259", +3172 => x"53544f4e", +3173 => x"45205052", +3174 => x"4f475241", +3175 => x"4d2c2033", +3176 => x"27524420", +3177 => x"53545249", +3178 => x"4e470000", +3179 => x"43000000", +3180 => x"64756d6d", +3181 => x"792e6578", +3182 => x"65000000", +3183 => x"00010202", +3184 => x"03030303", +3185 => x"04040404", +3186 => x"04040404", +3187 => x"05050505", +3188 => x"05050505", +3189 => x"05050505", +3190 => x"05050505", +3191 => x"06060606", +3192 => x"06060606", +3193 => x"06060606", +3194 => x"06060606", +3195 => x"06060606", +3196 => x"06060606", +3197 => x"06060606", +3198 => x"06060606", +3199 => x"07070707", +3200 => x"07070707", +3201 => x"07070707", +3202 => x"07070707", +3203 => x"07070707", +3204 => x"07070707", +3205 => x"07070707", +3206 => x"07070707", +3207 => x"07070707", +3208 => x"07070707", +3209 => x"07070707", +3210 => x"07070707", +3211 => x"07070707", +3212 => x"07070707", +3213 => x"07070707", +3214 => x"07070707", +3215 => x"08080808", +3216 => x"08080808", +3217 => x"08080808", +3218 => x"08080808", +3219 => x"08080808", +3220 => x"08080808", +3221 => x"08080808", +3222 => x"08080808", +3223 => x"08080808", +3224 => x"08080808", +3225 => x"08080808", +3226 => x"08080808", +3227 => x"08080808", +3228 => x"08080808", +3229 => x"08080808", +3230 => x"08080808", +3231 => x"08080808", +3232 => x"08080808", +3233 => x"08080808", +3234 => x"08080808", +3235 => x"08080808", +3236 => x"08080808", +3237 => x"08080808", +3238 => x"08080808", +3239 => x"08080808", +3240 => x"08080808", +3241 => x"08080808", +3242 => x"08080808", +3243 => x"08080808", +3244 => x"08080808", +3245 => x"08080808", +3246 => x"08080808", +3247 => x"00ffffff", +3248 => x"ff00ffff", +3249 => x"ffff00ff", +3250 => x"ffffff00", +3251 => x"00000000", +3252 => x"00000000", +3253 => x"00000000", +3254 => x"00003ab8", +3255 => x"000186a0", -- iterations +3256 => x"00000000", +3257 => x"00000000", +3258 => x"00000000", +3259 => x"00000000", +3260 => x"00000000", +3261 => x"00000000", +3262 => x"00000000", +3263 => x"00000000", +3264 => x"00000000", +3265 => x"00000000", +3266 => x"00000000", +3267 => x"00000000", +3268 => x"00000000", +3269 => x"ffffffff", +3270 => x"00000000", +3271 => x"00020000", +3272 => x"00000000", +3273 => x"00000000", +3274 => x"00003320", +3275 => x"00003320", +3276 => x"00003328", +3277 => x"00003328", +3278 => x"00003330", +3279 => x"00003330", +3280 => x"00003338", +3281 => x"00003338", +3282 => x"00003340", +3283 => x"00003340", +3284 => x"00003348", +3285 => x"00003348", +3286 => x"00003350", +3287 => x"00003350", +3288 => x"00003358", +3289 => x"00003358", +3290 => x"00003360", +3291 => x"00003360", +3292 => x"00003368", +3293 => x"00003368", +3294 => x"00003370", +3295 => x"00003370", +3296 => x"00003378", +3297 => x"00003378", +3298 => x"00003380", +3299 => x"00003380", +3300 => x"00003388", +3301 => x"00003388", +3302 => x"00003390", +3303 => x"00003390", +3304 => x"00003398", +3305 => x"00003398", +3306 => x"000033a0", +3307 => x"000033a0", +3308 => x"000033a8", +3309 => x"000033a8", +3310 => x"000033b0", +3311 => x"000033b0", +3312 => x"000033b8", +3313 => x"000033b8", +3314 => x"000033c0", +3315 => x"000033c0", +3316 => x"000033c8", +3317 => x"000033c8", +3318 => x"000033d0", +3319 => x"000033d0", +3320 => x"000033d8", +3321 => x"000033d8", +3322 => x"000033e0", +3323 => x"000033e0", +3324 => x"000033e8", +3325 => x"000033e8", +3326 => x"000033f0", +3327 => x"000033f0", +3328 => x"000033f8", +3329 => x"000033f8", +3330 => x"00003400", +3331 => x"00003400", +3332 => x"00003408", +3333 => x"00003408", +3334 => x"00003410", +3335 => x"00003410", +3336 => x"00003418", +3337 => x"00003418", +3338 => x"00003420", +3339 => x"00003420", +3340 => x"00003428", +3341 => x"00003428", +3342 => x"00003430", +3343 => x"00003430", +3344 => x"00003438", +3345 => x"00003438", +3346 => x"00003440", +3347 => x"00003440", +3348 => x"00003448", +3349 => x"00003448", +3350 => x"00003450", +3351 => x"00003450", +3352 => x"00003458", +3353 => x"00003458", +3354 => x"00003460", +3355 => x"00003460", +3356 => x"00003468", +3357 => x"00003468", +3358 => x"00003470", +3359 => x"00003470", +3360 => x"00003478", +3361 => x"00003478", +3362 => x"00003480", +3363 => x"00003480", +3364 => x"00003488", +3365 => x"00003488", +3366 => x"00003490", +3367 => x"00003490", +3368 => x"00003498", +3369 => x"00003498", +3370 => x"000034a0", +3371 => x"000034a0", +3372 => x"000034a8", +3373 => x"000034a8", +3374 => x"000034b0", +3375 => x"000034b0", +3376 => x"000034b8", +3377 => x"000034b8", +3378 => x"000034c0", +3379 => x"000034c0", +3380 => x"000034c8", +3381 => x"000034c8", +3382 => x"000034d0", +3383 => x"000034d0", +3384 => x"000034d8", +3385 => x"000034d8", +3386 => x"000034e0", +3387 => x"000034e0", +3388 => x"000034e8", +3389 => x"000034e8", +3390 => x"000034f0", +3391 => x"000034f0", +3392 => x"000034f8", +3393 => x"000034f8", +3394 => x"00003500", +3395 => x"00003500", +3396 => x"00003508", +3397 => x"00003508", +3398 => x"00003510", +3399 => x"00003510", +3400 => x"00003518", +3401 => x"00003518", +3402 => x"00003520", +3403 => x"00003520", +3404 => x"00003528", +3405 => x"00003528", +3406 => x"00003530", +3407 => x"00003530", +3408 => x"00003538", +3409 => x"00003538", +3410 => x"00003540", +3411 => x"00003540", +3412 => x"00003548", +3413 => x"00003548", +3414 => x"00003550", +3415 => x"00003550", +3416 => x"00003558", +3417 => x"00003558", +3418 => x"00003560", +3419 => x"00003560", +3420 => x"00003568", +3421 => x"00003568", +3422 => x"00003570", +3423 => x"00003570", +3424 => x"00003578", +3425 => x"00003578", +3426 => x"00003580", +3427 => x"00003580", +3428 => x"00003588", +3429 => x"00003588", +3430 => x"00003590", +3431 => x"00003590", +3432 => x"00003598", +3433 => x"00003598", +3434 => x"000035a0", +3435 => x"000035a0", +3436 => x"000035a8", +3437 => x"000035a8", +3438 => x"000035b0", +3439 => x"000035b0", +3440 => x"000035b8", +3441 => x"000035b8", +3442 => x"000035c0", +3443 => x"000035c0", +3444 => x"000035c8", +3445 => x"000035c8", +3446 => x"000035d0", +3447 => x"000035d0", +3448 => x"000035d8", +3449 => x"000035d8", +3450 => x"000035e0", +3451 => x"000035e0", +3452 => x"000035e8", +3453 => x"000035e8", +3454 => x"000035f0", +3455 => x"000035f0", +3456 => x"000035f8", +3457 => x"000035f8", +3458 => x"00003600", +3459 => x"00003600", +3460 => x"00003608", +3461 => x"00003608", +3462 => x"00003610", +3463 => x"00003610", +3464 => x"00003618", +3465 => x"00003618", +3466 => x"00003620", +3467 => x"00003620", +3468 => x"00003628", +3469 => x"00003628", +3470 => x"00003630", +3471 => x"00003630", +3472 => x"00003638", +3473 => x"00003638", +3474 => x"00003640", +3475 => x"00003640", +3476 => x"00003648", +3477 => x"00003648", +3478 => x"00003650", +3479 => x"00003650", +3480 => x"00003658", +3481 => x"00003658", +3482 => x"00003660", +3483 => x"00003660", +3484 => x"00003668", +3485 => x"00003668", +3486 => x"00003670", +3487 => x"00003670", +3488 => x"00003678", +3489 => x"00003678", +3490 => x"00003680", +3491 => x"00003680", +3492 => x"00003688", +3493 => x"00003688", +3494 => x"00003690", +3495 => x"00003690", +3496 => x"00003698", +3497 => x"00003698", +3498 => x"000036a0", +3499 => x"000036a0", +3500 => x"000036a8", +3501 => x"000036a8", +3502 => x"000036b0", +3503 => x"000036b0", +3504 => x"000036b8", +3505 => x"000036b8", +3506 => x"000036c0", +3507 => x"000036c0", +3508 => x"000036c8", +3509 => x"000036c8", +3510 => x"000036d0", +3511 => x"000036d0", +3512 => x"000036d8", +3513 => x"000036d8", +3514 => x"000036e0", +3515 => x"000036e0", +3516 => x"000036e8", +3517 => x"000036e8", +3518 => x"000036f0", +3519 => x"000036f0", +3520 => x"000036f8", +3521 => x"000036f8", +3522 => x"00003700", +3523 => x"00003700", +3524 => x"00003708", +3525 => x"00003708", +3526 => x"00003710", +3527 => x"00003710", +3528 => x"00003718", +3529 => x"00003718", +3530 => x"0000372c", +3531 => x"00000000", +3532 => x"00003994", +3533 => x"000039f0", +3534 => x"00003a4c", +3535 => x"00000000", +3536 => x"00000000", +3537 => x"00000000", +3538 => x"00000000", +3539 => x"00000000", +3540 => x"00000000", +3541 => x"00000000", +3542 => x"00000000", +3543 => x"00000000", +3544 => x"000031ac", +3545 => x"00000000", +3546 => x"00000000", +3547 => x"00000000", +3548 => x"00000000", +3549 => x"00000000", +3550 => x"00000000", +3551 => x"00000000", +3552 => x"00000000", +3553 => x"00000000", +3554 => x"00000000", +3555 => x"00000000", +3556 => x"00000000", +3557 => x"00000000", +3558 => x"00000000", +3559 => x"00000000", +3560 => x"00000000", +3561 => x"00000000", +3562 => x"00000000", +3563 => x"00000000", +3564 => x"00000000", +3565 => x"00000000", +3566 => x"00000000", +3567 => x"00000000", +3568 => x"00000000", +3569 => x"00000000", +3570 => x"00000000", +3571 => x"00000000", +3572 => x"00000000", +3573 => x"00000001", +3574 => x"330eabcd", +3575 => x"1234e66d", +3576 => x"deec0005", +3577 => x"000b0000", +3578 => x"00000000", +3579 => x"00000000", +3580 => x"00000000", +3581 => x"00000000", +3582 => x"00000000", +3583 => x"00000000", +3584 => x"00000000", +3585 => x"00000000", +3586 => x"00000000", +3587 => x"00000000", +3588 => x"00000000", +3589 => x"00000000", +3590 => x"00000000", +3591 => x"00000000", +3592 => x"00000000", +3593 => x"00000000", +3594 => x"00000000", +3595 => x"00000000", +3596 => x"00000000", +3597 => x"00000000", +3598 => x"00000000", +3599 => x"00000000", +3600 => x"00000000", +3601 => x"00000000", +3602 => x"00000000", +3603 => x"00000000", +3604 => x"00000000", +3605 => x"00000000", +3606 => x"00000000", +3607 => x"00000000", +3608 => x"00000000", +3609 => x"00000000", +3610 => x"00000000", +3611 => x"00000000", +3612 => x"00000000", +3613 => x"00000000", +3614 => x"00000000", +3615 => x"00000000", +3616 => x"00000000", +3617 => x"00000000", +3618 => x"00000000", +3619 => x"00000000", +3620 => x"00000000", +3621 => x"00000000", +3622 => x"00000000", +3623 => x"00000000", +3624 => x"00000000", +3625 => x"00000000", +3626 => x"00000000", +3627 => x"00000000", +3628 => x"00000000", +3629 => x"00000000", +3630 => x"00000000", +3631 => x"00000000", +3632 => x"00000000", +3633 => x"00000000", +3634 => x"00000000", +3635 => x"00000000", +3636 => x"00000000", +3637 => x"00000000", +3638 => x"00000000", +3639 => x"00000000", +3640 => x"00000000", +3641 => x"00000000", +3642 => x"00000000", +3643 => x"00000000", +3644 => x"00000000", +3645 => x"00000000", +3646 => x"00000000", +3647 => x"00000000", +3648 => x"00000000", +3649 => x"00000000", +3650 => x"00000000", +3651 => x"00000000", +3652 => x"00000000", +3653 => x"00000000", +3654 => x"00000000", +3655 => x"00000000", +3656 => x"00000000", +3657 => x"00000000", +3658 => x"00000000", +3659 => x"00000000", +3660 => x"00000000", +3661 => x"00000000", +3662 => x"00000000", +3663 => x"00000000", +3664 => x"00000000", +3665 => x"00000000", +3666 => x"00000000", +3667 => x"00000000", +3668 => x"00000000", +3669 => x"00000000", +3670 => x"00000000", +3671 => x"00000000", +3672 => x"00000000", +3673 => x"00000000", +3674 => x"00000000", +3675 => x"00000000", +3676 => x"00000000", +3677 => x"00000000", +3678 => x"00000000", +3679 => x"00000000", +3680 => x"00000000", +3681 => x"00000000", +3682 => x"00000000", +3683 => x"00000000", +3684 => x"00000000", +3685 => x"00000000", +3686 => x"00000000", +3687 => x"00000000", +3688 => x"00000000", +3689 => x"00000000", +3690 => x"00000000", +3691 => x"00000000", +3692 => x"00000000", +3693 => x"00000000", +3694 => x"00000000", +3695 => x"00000000", +3696 => x"00000000", +3697 => x"00000000", +3698 => x"00000000", +3699 => x"00000000", +3700 => x"00000000", +3701 => x"00000000", +3702 => x"00000000", +3703 => x"00000000", +3704 => x"00000000", +3705 => x"00000000", +3706 => x"00000000", +3707 => x"00000000", +3708 => x"00000000", +3709 => x"00000000", +3710 => x"00000000", +3711 => x"00000000", +3712 => x"00000000", +3713 => x"00000000", +3714 => x"00000000", +3715 => x"00000000", +3716 => x"00000000", +3717 => x"00000000", +3718 => x"00000000", +3719 => x"00000000", +3720 => x"00000000", +3721 => x"00000000", +3722 => x"00000000", +3723 => x"00000000", +3724 => x"00000000", +3725 => x"00000000", +3726 => x"00000000", +3727 => x"00000000", +3728 => x"00000000", +3729 => x"00000000", +3730 => x"00000000", +3731 => x"00000000", +3732 => x"00000000", +3733 => x"00000000", +3734 => x"00000000", +3735 => x"00000000", +3736 => x"00000000", +3737 => x"00000000", +3738 => x"00000000", +3739 => x"00000000", +3740 => x"00000000", +3741 => x"00000000", +3742 => x"00000000", +3743 => x"00000000", +3744 => x"00000000", +3745 => x"00000000", +3746 => x"00000000", +3747 => x"00000000", +3748 => x"00000000", +3749 => x"00000000", +3750 => x"00000000", +3751 => x"00000000", +3752 => x"00000000", +3753 => x"00000000", +3754 => x"000031b0", +3755 => x"ffffffff", +3756 => x"00000000", +3757 => x"ffffffff", +3758 => x"00000000", + others => x"00000000" +); + +begin + +process (clk) +begin + if (clk'event and clk = '1') then + if (memAWriteEnable = '1') and (memBWriteEnable = '1') and (memAAddr=memBAddr) and (memAWrite/=memBWrite) then + report "write collision" severity failure; + end if; + + if (memAWriteEnable = '1') then + ram(conv_integer(memAAddr)) := memAWrite; + memARead <= memAWrite; + else + memARead <= ram(conv_integer(memAAddr)); + end if; + end if; +end process; + +process (clk) +begin + if (clk'event and clk = '1') then + if (memBWriteEnable = '1') then + ram(conv_integer(memBAddr)) := memBWrite; + memBRead <= memBWrite; + else + memBRead <= ram(conv_integer(memBAddr)); + end if; + end if; +end process; + + + + +end dualport_ram_arch; diff --git a/zpu/hdl/zpu3/src/dualport_ram.vhd b/zpu/hdl/zpu3/src/dualport_ram.vhd new file mode 100644 index 0000000..54380ce --- /dev/null +++ b/zpu/hdl/zpu3/src/dualport_ram.vhd @@ -0,0 +1,4996 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + + +library zylin; +use zylin.zpu_config.all; +use zylin.zpupkg.all; + +entity dualport_ram is +port (clk : in std_logic; + memAWriteEnable : in std_logic; + memAAddr : in std_logic_vector(maxAddrBit downto minAddrBit); + memAWrite : in std_logic_vector(wordSize-1 downto 0); + memARead : out std_logic_vector(wordSize-1 downto 0); + memBWriteEnable : in std_logic; + memBAddr : in std_logic_vector(maxAddrBit downto minAddrBit); + memBWrite : in std_logic_vector(wordSize-1 downto 0); + memBRead : out std_logic_vector(wordSize-1 downto 0)); +end dualport_ram; + +architecture dualport_ram_arch of dualport_ram is + + +type ram_type is array(0 to ((2**(maxAddrBit+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); + +shared variable ram : ram_type := +( +0 => x"800b0b0b", +1 => x"0b0b8070", +2 => x"0b0b818a", +3 => x"880c3a0b", +4 => x"0b80fae8", +5 => x"04000000", +6 => x"00000000", +7 => x"00000000", +8 => x"80088408", +9 => x"88080b0b", +10 => x"80fbba2d", +11 => x"880c840c", +12 => x"800c0400", +13 => x"00000000", +14 => x"00000000", +15 => x"00000000", +16 => x"71fd0608", +17 => x"72830609", +18 => x"81058205", +19 => x"832b2a83", +20 => x"ffff0652", +21 => x"04000000", +22 => x"00000000", +23 => x"00000000", +24 => x"71fd0608", +25 => x"83ffff73", +26 => x"83060981", +27 => x"05820583", +28 => x"2b2b0906", +29 => x"7383ffff", +30 => x"0b0b0b0b", +31 => x"83a70400", +32 => x"72098105", +33 => x"72057373", +34 => x"09060906", +35 => x"73097306", +36 => x"070a8106", +37 => x"530b0b51", +38 => x"04000000", +39 => x"00000000", +40 => x"72722473", +41 => x"732e0753", +42 => x"0b0b5104", +43 => x"00000000", +44 => x"00000000", +45 => x"00000000", +46 => x"00000000", +47 => x"00000000", +48 => x"71737109", +49 => x"71068106", +50 => x"30720a10", +51 => x"0a720a10", +52 => x"0a31050a", +53 => x"81065151", +54 => x"530b0b51", +55 => x"04000000", +56 => x"72722673", +57 => x"732e0753", +58 => x"0b0b5104", +59 => x"00000000", +60 => x"00000000", +61 => x"00000000", +62 => x"00000000", +63 => x"00000000", +64 => x"00000000", +65 => x"00000000", +66 => x"00000000", +67 => x"00000000", +68 => x"00000000", +69 => x"00000000", +70 => x"00000000", +71 => x"00000000", +72 => x"72728072", +73 => x"8106ff05", +74 => x"09720605", +75 => x"71105272", +76 => x"0a100a53", +77 => x"0b0b72eb", +78 => x"38515153", +79 => x"0b0b5104", +80 => x"720a722b", +81 => x"0a530b0b", +82 => x"51040000", +83 => x"00000000", +84 => x"00000000", +85 => x"00000000", +86 => x"00000000", +87 => x"00000000", +88 => x"72729f06", +89 => x"0981050b", +90 => x"0b0b88a7", +91 => x"05040000", +92 => x"00000000", +93 => x"00000000", +94 => x"00000000", +95 => x"00000000", +96 => x"72722aff", +97 => x"739f062a", +98 => x"0974090a", +99 => x"8106ff05", +100 => x"0607530b", +101 => x"0b510400", +102 => x"00000000", +103 => x"00000000", +104 => x"7171530b", +105 => x"0b510406", +106 => x"73830609", +107 => x"81058205", +108 => x"832b0b2b", +109 => x"0772fc06", +110 => x"0c515104", +111 => x"00000000", +112 => x"72098105", +113 => x"72050970", +114 => x"81050906", +115 => x"0a810653", +116 => x"0b0b5104", +117 => x"00000000", +118 => x"00000000", +119 => x"00000000", +120 => x"72098105", +121 => x"72050970", +122 => x"81050906", +123 => x"0a098106", +124 => x"530b0b51", +125 => x"04000000", +126 => x"00000000", +127 => x"00000000", +128 => x"71098105", +129 => x"52040000", +130 => x"00000000", +131 => x"00000000", +132 => x"00000000", +133 => x"00000000", +134 => x"00000000", +135 => x"00000000", +136 => x"72720981", +137 => x"0505530b", +138 => x"0b510400", +139 => x"00000000", +140 => x"00000000", +141 => x"00000000", +142 => x"00000000", +143 => x"00000000", +144 => x"72097206", +145 => x"73730906", +146 => x"07530b0b", +147 => x"51040000", +148 => x"00000000", +149 => x"00000000", +150 => x"00000000", +151 => x"00000000", +152 => x"71fc0608", +153 => x"72830609", +154 => x"81058305", +155 => x"1010102a", +156 => x"81ff0652", +157 => x"04000000", +158 => x"00000000", +159 => x"00000000", +160 => x"71fc0608", +161 => x"0b0b8189", +162 => x"f4738306", +163 => x"10100508", +164 => x"060b0b0b", +165 => x"88ac0400", +166 => x"00000000", +167 => x"00000000", +168 => x"80088408", +169 => x"88087575", +170 => x"0b0b0b8f", +171 => x"e42d5050", +172 => x"80085688", +173 => x"0c840c80", +174 => x"0c510400", +175 => x"00000000", +176 => x"80088408", +177 => x"88087575", +178 => x"0b0b0b91", +179 => x"9c2d5050", +180 => x"80085688", +181 => x"0c840c80", +182 => x"0c510400", +183 => x"00000000", +184 => x"72097081", +185 => x"0509060a", +186 => x"8106ff05", +187 => x"70540b0b", +188 => x"71067309", +189 => x"727405ff", +190 => x"05060751", +191 => x"51510400", +192 => x"72097081", +193 => x"0509060a", +194 => x"098106ff", +195 => x"0570540b", +196 => x"0b710673", +197 => x"09727405", +198 => x"ff050607", +199 => x"51515104", +200 => x"05ff0504", +201 => x"00000000", +202 => x"00000000", +203 => x"00000000", +204 => x"00000000", +205 => x"00000000", +206 => x"00000000", +207 => x"00000000", +208 => x"810b0b0b", +209 => x"818a840c", +210 => x"51040000", +211 => x"00000000", +212 => x"00000000", +213 => x"00000000", +214 => x"00000000", +215 => x"00000000", +216 => x"71810552", +217 => x"04000000", +218 => x"00000000", +219 => x"00000000", +220 => x"00000000", +221 => x"00000000", +222 => x"00000000", +223 => x"00000000", +224 => x"00000000", +225 => x"00000000", +226 => x"00000000", +227 => x"00000000", +228 => x"00000000", +229 => x"00000000", +230 => x"00000000", +231 => x"00000000", +232 => x"02840572", +233 => x"10100552", +234 => x"04000000", +235 => x"00000000", +236 => x"00000000", +237 => x"00000000", +238 => x"00000000", +239 => x"00000000", +240 => x"00000000", +241 => x"00000000", +242 => x"00000000", +243 => x"00000000", +244 => x"00000000", +245 => x"00000000", +246 => x"00000000", +247 => x"00000000", +248 => x"717105ff", +249 => x"0571530b", +250 => x"0b510400", +251 => x"00000000", +252 => x"00000000", +253 => x"00000000", +254 => x"00000000", +255 => x"00000000", +256 => x"83cd3f80", +257 => x"fd803f04", +258 => x"10101010", +259 => x"10101010", +260 => x"10101010", +261 => x"10101010", +262 => x"10101010", +263 => x"10101010", +264 => x"10101010", +265 => x"10101053", +266 => x"0b0b5104", +267 => x"7381ff06", +268 => x"73830609", +269 => x"81058305", +270 => x"1010102b", +271 => x"0772fc06", +272 => x"0c515104", +273 => x"3c047070", +274 => x"0b0b819a", +275 => x"90085284", +276 => x"0b720508", +277 => x"70810651", +278 => x"510b0b70", +279 => x"f2387108", +280 => x"81ff0680", +281 => x"0c505004", +282 => x"70700b0b", +283 => x"819a9008", +284 => x"52840b72", +285 => x"0508700a", +286 => x"100a7081", +287 => x"06515151", +288 => x"0b0b70ed", +289 => x"3873720c", +290 => x"50500481", +291 => x"8a840880", +292 => x"2ea83883", +293 => x"80800b0b", +294 => x"0b819a90", +295 => x"0c82a080", +296 => x"0b0b0b81", +297 => x"9a940c82", +298 => x"90800b81", +299 => x"9aa40c0b", +300 => x"0b819a98", +301 => x"0b819aa8", +302 => x"0c04f880", +303 => x"8080a40b", +304 => x"0b0b819a", +305 => x"900cf880", +306 => x"8082800b", +307 => x"0b0b819a", +308 => x"940cf880", +309 => x"8084800b", +310 => x"819aa40c", +311 => x"f8808080", +312 => x"940b819a", +313 => x"a80cf880", +314 => x"80809c0b", +315 => x"819aa00c", +316 => x"f8808080", +317 => x"a00b819a", +318 => x"ac0c04f2", +319 => x"3d0d600b", +320 => x"0b819a94", +321 => x"08565d82", +322 => x"750c8059", +323 => x"805a800b", +324 => x"8f3d7110", +325 => x"10177008", +326 => x"5a575d5b", +327 => x"807781ff", +328 => x"067c832b", +329 => x"5658520b", +330 => x"76530b0b", +331 => x"7b5183ae", +332 => x"3f7d7f7a", +333 => x"72077c72", +334 => x"07717160", +335 => x"8105415f", +336 => x"5d5b5957", +337 => x"557a8724", +338 => x"bf380b0b", +339 => x"819a9408", +340 => x"7b101071", +341 => x"05700859", +342 => x"51558077", +343 => x"81ff067c", +344 => x"832b5658", +345 => x"520b7653", +346 => x"0b0b7b51", +347 => x"82f03f7d", +348 => x"7f7a7207", +349 => x"7c720771", +350 => x"71608105", +351 => x"415f5d5b", +352 => x"59575587", +353 => x"7b25c338", +354 => x"767d0c77", +355 => x"841e0c7c", +356 => x"800c903d", +357 => x"0d047070", +358 => x"819a9c33", +359 => x"510b0b70", +360 => x"aa38818a", +361 => x"90087008", +362 => x"52520b70", +363 => x"802e9638", +364 => x"84720581", +365 => x"8a900c70", +366 => x"2d818a90", +367 => x"08700852", +368 => x"520b70ec", +369 => x"38810b81", +370 => x"9a9c3450", +371 => x"50040470", +372 => x"0b0b819a", +373 => x"8c08802e", +374 => x"8e380b0b", +375 => x"0b0b800b", +376 => x"802e0981", +377 => x"06833850", +378 => x"040b0b81", +379 => x"9a8c510b", +380 => x"0b0bf48c", +381 => x"3f500404", +382 => x"8c08028c", +383 => x"0cfa3d0d", +384 => x"800b8c08", +385 => x"fc050c8c", +386 => x"08fc0508", +387 => x"892481b9", +388 => x"388c08f0", +389 => x"05705253", +390 => x"0b0bfddf", +391 => x"3f8c08f4", +392 => x"05088c08", +393 => x"f8050c8c", +394 => x"08f80508", +395 => x"520b0b81", +396 => x"85b45187", +397 => x"c53f0b0b", +398 => x"8185c051", +399 => x"8a8b3f0b", +400 => x"0b8185d0", +401 => x"518a823f", +402 => x"fc0b819a", +403 => x"b00c819a", +404 => x"b008812c", +405 => x"530b0b72", +406 => x"fe2e8438", +407 => x"87903f8a", +408 => x"0b819ab4", +409 => x"0c819ab4", +410 => x"08819ab0", +411 => x"0829530b", +412 => x"0b72d82e", +413 => x"843886f6", +414 => x"3f8a0b81", +415 => x"9ab00c84", +416 => x"e2ad800b", +417 => x"819ab40c", +418 => x"819ab408", +419 => x"819ab008", +420 => x"29530b0b", +421 => x"72afd7c2", +422 => x"802e8438", +423 => x"86d03f81", +424 => x"0a0b819a", +425 => x"b00cff0b", +426 => x"819ab40c", +427 => x"819ab408", +428 => x"819ab008", +429 => x"25843886", +430 => x"b53f8c08", +431 => x"fc050881", +432 => x"058c08fc", +433 => x"050cfebf", +434 => x"398c08fc", +435 => x"05088a2e", +436 => x"8438869a", +437 => x"3f72800c", +438 => x"883d0d8c", +439 => x"0c048c08", +440 => x"028c0cf5", +441 => x"3d0d8c08", +442 => x"9405089f", +443 => x"388c088c", +444 => x"05088c08", +445 => x"9005088c", +446 => x"08880508", +447 => x"5856540b", +448 => x"0b73760c", +449 => x"7484170c", +450 => x"81cd3980", +451 => x"0b8c08f0", +452 => x"050c800b", +453 => x"8c08f405", +454 => x"0c8c088c", +455 => x"05088c08", +456 => x"90050856", +457 => x"540b0b73", +458 => x"8c08f005", +459 => x"0c748c08", +460 => x"f4050c8c", +461 => x"08f8058c", +462 => x"08f00556", +463 => x"56887054", +464 => x"0b0b7553", +465 => x"0b0b7652", +466 => x"540b0b85", +467 => x"ef3fa00b", +468 => x"8c089405", +469 => x"08318c08", +470 => x"ec050c8c", +471 => x"08ec0508", +472 => x"80249f38", +473 => x"800b8c08", +474 => x"f4050c8c", +475 => x"08ec0508", +476 => x"308c08fc", +477 => x"0508712b", +478 => x"8c08f005", +479 => x"0c540b0b", +480 => x"bb398c08", +481 => x"fc05088c", +482 => x"08ec0508", +483 => x"2a8c08e8", +484 => x"050c8c08", +485 => x"fc05088c", +486 => x"08940508", +487 => x"2b8c08f4", +488 => x"050c8c08", +489 => x"f805088c", +490 => x"08940508", +491 => x"2b708c08", +492 => x"e8050807", +493 => x"8c08f005", +494 => x"0c540b0b", +495 => x"8c08f005", +496 => x"088c08f4", +497 => x"05088c08", +498 => x"88050858", +499 => x"56540b0b", +500 => x"73760c74", +501 => x"84170c8c", +502 => x"08880508", +503 => x"800c8d3d", +504 => x"0d8c0c04", +505 => x"8c08028c", +506 => x"0cf93d0d", +507 => x"800b8c08", +508 => x"fc050c8c", +509 => x"08880508", +510 => x"8025ab38", +511 => x"8c088805", +512 => x"08308c08", +513 => x"88050c80", +514 => x"0b8c08f4", +515 => x"050c8c08", +516 => x"fc050888", +517 => x"38810b8c", +518 => x"08f4050c", +519 => x"8c08f405", +520 => x"088c08fc", +521 => x"050c8c08", +522 => x"8c050880", +523 => x"25ab388c", +524 => x"088c0508", +525 => x"308c088c", +526 => x"050c800b", +527 => x"8c08f005", +528 => x"0c8c08fc", +529 => x"05088838", +530 => x"810b8c08", +531 => x"f0050c8c", +532 => x"08f00508", +533 => x"8c08fc05", +534 => x"0c80530b", +535 => x"0b8c088c", +536 => x"0508528c", +537 => x"08880508", +538 => x"5181b13f", +539 => x"8008708c", +540 => x"08f8050c", +541 => x"540b0b8c", +542 => x"08fc0508", +543 => x"802e8c38", +544 => x"8c08f805", +545 => x"08308c08", +546 => x"f8050c8c", +547 => x"08f80508", +548 => x"70800c54", +549 => x"0b0b893d", +550 => x"0d8c0c04", +551 => x"8c08028c", +552 => x"0cfb3d0d", +553 => x"800b8c08", +554 => x"fc050c8c", +555 => x"08880508", +556 => x"80259338", +557 => x"8c088805", +558 => x"08308c08", +559 => x"88050c81", +560 => x"0b8c08fc", +561 => x"050c8c08", +562 => x"8c050880", +563 => x"258c388c", +564 => x"088c0508", +565 => x"308c088c", +566 => x"050c8153", +567 => x"0b0b8c08", +568 => x"8c050852", +569 => x"8c088805", +570 => x"0851b13f", +571 => x"8008708c", +572 => x"08f8050c", +573 => x"540b0b8c", +574 => x"08fc0508", +575 => x"802e8c38", +576 => x"8c08f805", +577 => x"08308c08", +578 => x"f8050c8c", +579 => x"08f80508", +580 => x"70800c54", +581 => x"0b0b873d", +582 => x"0d8c0c04", +583 => x"8c08028c", +584 => x"0c707070", +585 => x"70810b8c", +586 => x"08fc050c", +587 => x"800b8c08", +588 => x"f8050c8c", +589 => x"088c0508", +590 => x"8c088805", +591 => x"0827ac38", +592 => x"8c08fc05", +593 => x"08802ea3", +594 => x"38800b8c", +595 => x"088c0508", +596 => x"2499388c", +597 => x"088c0508", +598 => x"108c088c", +599 => x"050c8c08", +600 => x"fc050810", +601 => x"8c08fc05", +602 => x"0cc9398c", +603 => x"08fc0508", +604 => x"802e80c9", +605 => x"388c088c", +606 => x"05088c08", +607 => x"88050826", +608 => x"a1388c08", +609 => x"8805088c", +610 => x"088c0508", +611 => x"318c0888", +612 => x"050c8c08", +613 => x"f805088c", +614 => x"08fc0508", +615 => x"078c08f8", +616 => x"050c8c08", +617 => x"fc050881", +618 => x"2a8c08fc", +619 => x"050c8c08", +620 => x"8c050881", +621 => x"2a8c088c", +622 => x"050cffaf", +623 => x"398c0890", +624 => x"0508802e", +625 => x"8f388c08", +626 => x"88050870", +627 => x"8c08f405", +628 => x"0c518d39", +629 => x"8c08f805", +630 => x"08708c08", +631 => x"f4050c51", +632 => x"8c08f405", +633 => x"08800c50", +634 => x"5050508c", +635 => x"0c047086", +636 => x"5186a03f", +637 => x"815180e7", +638 => x"be3ffc3d", +639 => x"0d873d70", +640 => x"70840552", +641 => x"0856530b", +642 => x"0b745281", +643 => x"8a940888", +644 => x"71050852", +645 => x"540b0b9f", +646 => x"e73f863d", +647 => x"0d047070", +648 => x"7070863d", +649 => x"8805530b", +650 => x"0b765275", +651 => x"88710508", +652 => x"52540b0b", +653 => x"9fca3f50", +654 => x"50505004", +655 => x"fc3d0d76", +656 => x"70797b55", +657 => x"5555558f", +658 => x"72278e38", +659 => x"72750783", +660 => x"06510b0b", +661 => x"70802eaf", +662 => x"38ff7205", +663 => x"520b0b71", +664 => x"ff2e9d38", +665 => x"72708105", +666 => x"540b0b33", +667 => x"74708105", +668 => x"5634ff72", +669 => x"05520b0b", +670 => x"71ff2e09", +671 => x"8106e538", +672 => x"74800c86", +673 => x"3d0d0474", +674 => x"51727084", +675 => x"05540b0b", +676 => x"08717084", +677 => x"05530b0b", +678 => x"0c727084", +679 => x"05540b0b", +680 => x"08717084", +681 => x"05530b0b", +682 => x"0c727084", +683 => x"05540b0b", +684 => x"08717084", +685 => x"05530b0b", +686 => x"0c727084", +687 => x"05540b0b", +688 => x"08717084", +689 => x"05530b0b", +690 => x"0cf07205", +691 => x"520b0b71", +692 => x"8f26ffb5", +693 => x"38837227", +694 => x"9c387270", +695 => x"8405540b", +696 => x"0b087170", +697 => x"8405530b", +698 => x"0b0cfc72", +699 => x"05520b0b", +700 => x"718326e6", +701 => x"3870540b", +702 => x"0bfede39", +703 => x"f73d0d7c", +704 => x"7052530b", +705 => x"0b858c3f", +706 => x"72540b0b", +707 => x"80085581", +708 => x"85e05681", +709 => x"57800881", +710 => x"055a8b3d", +711 => x"e4710559", +712 => x"530b0b82", +713 => x"59f47305", +714 => x"527b8871", +715 => x"05085253", +716 => x"0b0bb7ce", +717 => x"3f800830", +718 => x"70800807", +719 => x"9f2c8a07", +720 => x"800c530b", +721 => x"0b8b3d0d", +722 => x"04707073", +723 => x"52818a94", +724 => x"0851ffa8", +725 => x"3f505004", +726 => x"70707070", +727 => x"75530b0b", +728 => x"84d87305", +729 => x"08802e8d", +730 => x"3880530b", +731 => x"0b72800c", +732 => x"50505050", +733 => x"04818052", +734 => x"725180c1", +735 => x"cc3f8008", +736 => x"84d8140c", +737 => x"ff530b0b", +738 => x"8008802e", +739 => x"e0388008", +740 => x"540b0b9f", +741 => x"530b0b80", +742 => x"74708405", +743 => x"560cff73", +744 => x"05530b0b", +745 => x"807324c1", +746 => x"38807470", +747 => x"8405560c", +748 => x"ff730553", +749 => x"0b0b7280", +750 => x"25dd38ff", +751 => x"ac397070", +752 => x"70707577", +753 => x"55530b0b", +754 => x"9f742790", +755 => x"3896730c", +756 => x"ff520b0b", +757 => x"71800c50", +758 => x"50505004", +759 => x"84d87305", +760 => x"08520b0b", +761 => x"71802e97", +762 => x"38731010", +763 => x"72057008", +764 => x"79720c51", +765 => x"520b0b71", +766 => x"800c5050", +767 => x"50500472", +768 => x"51fed53f", +769 => x"ff528008", +770 => x"c93884d8", +771 => x"73050874", +772 => x"10107105", +773 => x"70087a72", +774 => x"0c515152", +775 => x"d839f93d", +776 => x"0d797b58", +777 => x"560b769f", +778 => x"2680f138", +779 => x"84d81608", +780 => x"540b0b73", +781 => x"802ead38", +782 => x"76101014", +783 => x"70085555", +784 => x"0b73802e", +785 => x"be388058", +786 => x"73812e8f", +787 => x"3873ff2e", +788 => x"a7388075", +789 => x"0c765173", +790 => x"2d80580b", +791 => x"0b77800c", +792 => x"893d0d04", +793 => x"7551fdf0", +794 => x"3fff5880", +795 => x"08ed3884", +796 => x"d8160854", +797 => x"0b0bc139", +798 => x"96760c81", +799 => x"0b800c89", +800 => x"3d0d0475", +801 => x"5182873f", +802 => x"76530b0b", +803 => x"80085275", +804 => x"5181be3f", +805 => x"8008800c", +806 => x"893d0d04", +807 => x"96760cff", +808 => x"0b800c89", +809 => x"3d0d04fc", +810 => x"3d0d7678", +811 => x"56530b0b", +812 => x"ff540b0b", +813 => x"749f2680", +814 => x"c13884d8", +815 => x"73050852", +816 => x"0b0b7180", +817 => x"2ebb3874", +818 => x"10107205", +819 => x"7008530b", +820 => x"0b530b0b", +821 => x"81540b0b", +822 => x"71802e9e", +823 => x"3882540b", +824 => x"0b71ff2e", +825 => x"95388354", +826 => x"0b0b7181", +827 => x"2e8c3880", +828 => x"730c7451", +829 => x"712d8054", +830 => x"0b0b7380", +831 => x"0c863d0d", +832 => x"047251fc", +833 => x"d33f8008", +834 => x"f13884d8", +835 => x"73050852", +836 => x"ffb53970", +837 => x"70735281", +838 => x"8a940851", +839 => x"fe803f50", +840 => x"50047070", +841 => x"7075530b", +842 => x"0b745281", +843 => x"8a940851", +844 => x"fd8c3f50", +845 => x"50500470", +846 => x"818a9408", +847 => x"51fc993f", +848 => x"50047070", +849 => x"7352818a", +850 => x"940851fe", +851 => x"da3f5050", +852 => x"04fc3d0d", +853 => x"800b819a", +854 => x"b80c7852", +855 => x"775180df", +856 => x"bc3f8008", +857 => x"540b0b80", +858 => x"08ff2e88", +859 => x"3873800c", +860 => x"863d0d04", +861 => x"819ab808", +862 => x"550b0b74", +863 => x"802eee38", +864 => x"7675710c", +865 => x"530b0b73", +866 => x"800c863d", +867 => x"0d0480df", +868 => x"873f0470", +869 => x"70707075", +870 => x"70718306", +871 => x"530b0b55", +872 => x"5270bf38", +873 => x"71700870", +874 => x"09f7fbfd", +875 => x"ff720506", +876 => x"70f88482", +877 => x"81800651", +878 => x"5152530b", +879 => x"0b70a138", +880 => x"84730570", +881 => x"087009f7", +882 => x"fbfdff72", +883 => x"050670f8", +884 => x"84828180", +885 => x"06515152", +886 => x"530b0b70", +887 => x"802ee138", +888 => x"72520b0b", +889 => x"7133510b", +890 => x"0b70802e", +891 => x"8c388172", +892 => x"05703352", +893 => x"520b70f6", +894 => x"38717431", +895 => x"800c5050", +896 => x"50500470", +897 => x"70707076", +898 => x"88710508", +899 => x"540b0b54", +900 => x"0b0b728d", +901 => x"38728415", +902 => x"0c72800c", +903 => x"50505050", +904 => x"04735275", +905 => x"51b1db3f", +906 => x"800b8815", +907 => x"0c800b84", +908 => x"150c8008", +909 => x"800c5050", +910 => x"505004fd", +911 => x"ad3d0d82", +912 => x"d63d0882", +913 => x"d83d0882", +914 => x"da3d0882", +915 => x"dc3d0844", +916 => x"5b454980", +917 => x"70658c05", +918 => x"2270832a", +919 => x"81327081", +920 => x"06515959", +921 => x"4947750b", +922 => x"672e0981", +923 => x"068c3863", +924 => x"90050867", +925 => x"2e098106", +926 => x"92386351", +927 => x"a2e03fff", +928 => x"56800881", +929 => x"ec38638c", +930 => x"0522570b", +931 => x"0b769a06", +932 => x"560b0b75", +933 => x"8a2ebf38", +934 => x"82c13d70", +935 => x"7182d43d", +936 => x"0c5b4380", +937 => x"0b82d43d", +938 => x"0c800b82", +939 => x"d33d0c80", +940 => x"46785b80", +941 => x"79337081", +942 => x"ff065959", +943 => x"56760b76", +944 => x"2e833881", +945 => x"5676a52e", +946 => x"81b13875", +947 => x"802e81ab", +948 => x"38811959", +949 => x"de39638e", +950 => x"05227090", +951 => x"2b575880", +952 => x"7624ffb4", +953 => x"3876fd06", +954 => x"560b0b75", +955 => x"82a33d23", +956 => x"77028405", +957 => x"89860523", +958 => x"639c0508", +959 => x"82a73d0c", +960 => x"63a40508", +961 => x"82a93d0c", +962 => x"9f3d7082", +963 => x"a13d0c82", +964 => x"a43d0c88", +965 => x"800b82a2", +966 => x"3d0c8880", +967 => x"0b82a53d", +968 => x"0c800b82", +969 => x"a63d0c60", +970 => x"530b0b78", +971 => x"52829f3d", +972 => x"70525695", +973 => x"cb3f8008", +974 => x"57800b80", +975 => x"08248e38", +976 => x"7551a39b", +977 => x"3f800880", +978 => x"2e8338ff", +979 => x"5782a23d", +980 => x"2270862a", +981 => x"70810651", +982 => x"57580b75", +983 => x"802e9038", +984 => x"638c0522", +985 => x"80c00756", +986 => x"0b0b7564", +987 => x"8c052376", +988 => x"560b0b75", +989 => x"800c82d5", +990 => x"3d0d0478", +991 => x"7b31570b", +992 => x"0b76802e", +993 => x"b1387a7a", +994 => x"0c76841b", +995 => x"0c82d33d", +996 => x"081782d4", +997 => x"3d0c881a", +998 => x"82d33d08", +999 => x"81710582", +1000 => x"d53d0c81", +1001 => x"71055157", +1002 => x"5a0b7587", +1003 => x"2480cb38", +1004 => x"65177933", +1005 => x"59460b77", +1006 => x"81ff0656", +1007 => x"0b0b7580", +1008 => x"2e93fe38", +1009 => x"81195980", +1010 => x"70714743", +1011 => x"5fff5e7e", +1012 => x"82d53d34", +1013 => x"7833580b", +1014 => x"0b7781ff", +1015 => x"06811a5a", +1016 => x"5de01d56", +1017 => x"0b0b7580", +1018 => x"d82687a1", +1019 => x"38751010", +1020 => x"81868405", +1021 => x"560b0b75", +1022 => x"080482d5", +1023 => x"3df00552", +1024 => x"6351fbff", +1025 => x"3f80088a", +1026 => x"a5386266", +1027 => x"187a335a", +1028 => x"475affa2", +1029 => x"397e9007", +1030 => x"5f0b0b7e", +1031 => x"842a7081", +1032 => x"0651560b", +1033 => x"0b7592ba", +1034 => x"387e862a", +1035 => x"70810651", +1036 => x"560b0b75", +1037 => x"802e92aa", +1038 => x"38606184", +1039 => x"05827205", +1040 => x"225a4256", +1041 => x"815c800b", +1042 => x"82d53d34", +1043 => x"7d42807e", +1044 => x"2486387e", +1045 => x"feff065f", +1046 => x"62783070", +1047 => x"7a079f2a", +1048 => x"64307066", +1049 => x"079f2a72", +1050 => x"07525951", +1051 => x"585b0b76", +1052 => x"802e918d", +1053 => x"387b812e", +1054 => x"8b9d3881", +1055 => x"7c259281", +1056 => x"387b822e", +1057 => x"8bd63881", +1058 => x"88e85b0b", +1059 => x"0b7a51fa", +1060 => x"823f8008", +1061 => x"5c0b0b7b", +1062 => x"5e7b6225", +1063 => x"8338615e", +1064 => x"82d43d33", +1065 => x"7081ff06", +1066 => x"57580b75", +1067 => x"802e90ba", +1068 => x"38811e5e", +1069 => x"7e818406", +1070 => x"400b0b7f", +1071 => x"80fa3864", +1072 => x"7e315780", +1073 => x"0b772580", +1074 => x"ef389077", +1075 => x"25b93881", +1076 => x"85e47a0c", +1077 => x"900b841b", +1078 => x"0c82d33d", +1079 => x"08900582", +1080 => x"d43d0c88", +1081 => x"1a82d33d", +1082 => x"08817105", +1083 => x"82d53d0c", +1084 => x"81710551", +1085 => x"575a0b75", +1086 => x"872485aa", +1087 => x"38f01757", +1088 => x"0b0b7690", +1089 => x"24c93881", +1090 => x"85e47a0c", +1091 => x"76841b0c", +1092 => x"82d33d08", +1093 => x"1782d43d", +1094 => x"0c881a82", +1095 => x"d33d0881", +1096 => x"710582d5", +1097 => x"3d0c8171", +1098 => x"0551575a", +1099 => x"0b758724", +1100 => x"8ff63882", +1101 => x"d43d3358", +1102 => x"0b0b7781", +1103 => x"ff06560b", +1104 => x"0b75802e", +1105 => x"86e83882", +1106 => x"d53dfc71", +1107 => x"057b0c58", +1108 => x"810b841b", +1109 => x"0c82d33d", +1110 => x"08810582", +1111 => x"d43d0c88", +1112 => x"1a82d33d", +1113 => x"08817105", +1114 => x"82d53d0c", +1115 => x"81710551", +1116 => x"575a0b75", +1117 => x"87248789", +1118 => x"387f8180", +1119 => x"2e84d738", +1120 => x"617c3157", +1121 => x"800b7725", +1122 => x"80fa3890", +1123 => x"7725b938", +1124 => x"8185f47a", +1125 => x"0c900b84", +1126 => x"1b0c82d3", +1127 => x"3d089005", +1128 => x"82d43d0c", +1129 => x"881a82d3", +1130 => x"3d088171", +1131 => x"0582d53d", +1132 => x"0c817105", +1133 => x"51575a0b", +1134 => x"75872484", +1135 => x"8138f017", +1136 => x"570b0b76", +1137 => x"9024c938", +1138 => x"8185f47a", +1139 => x"0c76841b", +1140 => x"0c82d33d", +1141 => x"081782d4", +1142 => x"3d0c881a", +1143 => x"82d33d08", +1144 => x"81710582", +1145 => x"d53d0c81", +1146 => x"71055157", +1147 => x"5a877625", +1148 => x"933882d5", +1149 => x"3df00552", +1150 => x"6351f887", +1151 => x"3f800886", +1152 => x"ad38625a", +1153 => x"7a0b7a0c", +1154 => x"7b841b0c", +1155 => x"82d33d08", +1156 => x"1c82d43d", +1157 => x"0c881a82", +1158 => x"d33d0881", +1159 => x"710582d5", +1160 => x"3d0c8171", +1161 => x"0551575a", +1162 => x"0b758724", +1163 => x"84eb387e", +1164 => x"822a7081", +1165 => x"0651560b", +1166 => x"0b75802e", +1167 => x"81813864", +1168 => x"7e315780", +1169 => x"0b772580", +1170 => x"f6389077", +1171 => x"25b93881", +1172 => x"85e47a0c", +1173 => x"900b841b", +1174 => x"0c82d33d", +1175 => x"08900582", +1176 => x"d43d0c88", +1177 => x"1a82d33d", +1178 => x"08817105", +1179 => x"82d53d0c", +1180 => x"81710551", +1181 => x"575a0b75", +1182 => x"87248485", +1183 => x"38f01757", +1184 => x"0b0b7690", +1185 => x"24c93881", +1186 => x"85e47a0c", +1187 => x"76841b0c", +1188 => x"82d33d08", +1189 => x"1782d43d", +1190 => x"0c82d23d", +1191 => x"08817105", +1192 => x"82d43d0c", +1193 => x"81710551", +1194 => x"56870b76", +1195 => x"25913882", +1196 => x"d53df005", +1197 => x"526351f6", +1198 => x"ca3f8008", +1199 => x"84f0387d", +1200 => x"567d6525", +1201 => x"83386456", +1202 => x"65164682", +1203 => x"d33d0884", +1204 => x"cb38800b", +1205 => x"82d33d0c", +1206 => x"625a6680", +1207 => x"2ef7d238", +1208 => x"6651b2d6", +1209 => x"3f80795c", +1210 => x"47f7c839", +1211 => x"7e90075f", +1212 => x"0b0b7e84", +1213 => x"2a708106", +1214 => x"51560b0b", +1215 => x"758cd538", +1216 => x"7e862a70", +1217 => x"81065156", +1218 => x"0b0b7580", +1219 => x"2e8cc538", +1220 => x"60618405", +1221 => x"82720522", +1222 => x"5a425680", +1223 => x"5c800b82", +1224 => x"d53d34fa", +1225 => x"a7397e90", +1226 => x"075f0b0b", +1227 => x"7e842a70", +1228 => x"81065156", +1229 => x"0b0b758c", +1230 => x"89387e86", +1231 => x"2a708106", +1232 => x"51560b0b", +1233 => x"75802e8b", +1234 => x"f9386061", +1235 => x"84057108", +1236 => x"902b7090", +1237 => x"2c515a42", +1238 => x"56807824", +1239 => x"89ac3881", +1240 => x"5cf9e939", +1241 => x"60618405", +1242 => x"71084742", +1243 => x"56648025", +1244 => x"f8e23864", +1245 => x"30457e84", +1246 => x"07793359", +1247 => x"5ff8d839", +1248 => x"8119597e", +1249 => x"90077933", +1250 => x"595ff8cb", +1251 => x"397c802e", +1252 => x"8caf3882", +1253 => x"b73d5b7c", +1254 => x"0b7b3481", +1255 => x"5c800b82", +1256 => x"d53d34f9", +1257 => x"f03982d5", +1258 => x"3df00552", +1259 => x"6351f4d3", +1260 => x"3f800882", +1261 => x"f93862f0", +1262 => x"18585afa", +1263 => x"c33982d5", +1264 => x"3df00552", +1265 => x"6351f4bb", +1266 => x"3f800882", +1267 => x"e13862f0", +1268 => x"18585afb", +1269 => x"ec39647e", +1270 => x"3157800b", +1271 => x"7725fba0", +1272 => x"38907725", +1273 => x"b9388185", +1274 => x"f47a0c90", +1275 => x"0b841b0c", +1276 => x"82d33d08", +1277 => x"900582d4", +1278 => x"3d0c881a", +1279 => x"82d33d08", +1280 => x"81710582", +1281 => x"d53d0c81", +1282 => x"71055157", +1283 => x"5a0b7587", +1284 => x"2480d638", +1285 => x"f017570b", +1286 => x"0b769024", +1287 => x"c9388185", +1288 => x"f47a0c76", +1289 => x"841b0c82", +1290 => x"d33d0817", +1291 => x"82d43d0c", +1292 => x"881a82d3", +1293 => x"3d088171", +1294 => x"0582d53d", +1295 => x"0c817105", +1296 => x"51575a87", +1297 => x"7625fab8", +1298 => x"3882d53d", +1299 => x"f0055263", +1300 => x"51f3b03f", +1301 => x"800881d6", +1302 => x"3862627d", +1303 => x"31585a0b", +1304 => x"768024fa", +1305 => x"a638fb9c", +1306 => x"3982d53d", +1307 => x"f0055263", +1308 => x"51f3903f", +1309 => x"800881b6", +1310 => x"3862f018", +1311 => x"585aff97", +1312 => x"3982d53d", +1313 => x"f0055263", +1314 => x"51f2f83f", +1315 => x"8008819e", +1316 => x"3862f018", +1317 => x"585afbe8", +1318 => x"3982d53d", +1319 => x"f0055263", +1320 => x"51f2e03f", +1321 => x"80088186", +1322 => x"38625afb", +1323 => x"82397e0a", +1324 => x"100a7081", +1325 => x"0651560b", +1326 => x"0b75802e", +1327 => x"f9bb38b0", +1328 => x"0b82b73d", +1329 => x"347c0284", +1330 => x"0589d505", +1331 => x"3482d53d", +1332 => x"ff84057a", +1333 => x"0c820b84", +1334 => x"1b0c82d3", +1335 => x"3d088205", +1336 => x"82d43d0c", +1337 => x"881a82d3", +1338 => x"3d088171", +1339 => x"0582d53d", +1340 => x"0c817105", +1341 => x"51575a87", +1342 => x"7625f8fd", +1343 => x"3882d53d", +1344 => x"58f01852", +1345 => x"6351f1fb", +1346 => x"3f8008a2", +1347 => x"38625a7f", +1348 => x"81802e09", +1349 => x"8106f8e8", +1350 => x"38fdbb39", +1351 => x"82d53df0", +1352 => x"05526351", +1353 => x"f1dd3f80", +1354 => x"08802efb", +1355 => x"a5386680", +1356 => x"2e863866", +1357 => x"51ae833f", +1358 => x"638c0522", +1359 => x"70862a70", +1360 => x"8106685a", +1361 => x"5157440b", +1362 => x"75802ef4", +1363 => x"a238ff56", +1364 => x"f49f3980", +1365 => x"0b82d53d", +1366 => x"34606184", +1367 => x"0571085d", +1368 => x"42567a80", +1369 => x"2e88d138", +1370 => x"7c80d32e", +1371 => x"85aa387e", +1372 => x"842a7081", +1373 => x"0651560b", +1374 => x"0b75859c", +1375 => x"38807e24", +1376 => x"f689387d", +1377 => x"530b0b75", +1378 => x"527a51ba", +1379 => x"d03f7d5c", +1380 => x"8008802e", +1381 => x"f5ff3880", +1382 => x"087b315c", +1383 => x"7d0b7c25", +1384 => x"f5f3387d", +1385 => x"5cf5ee39", +1386 => x"7e842a70", +1387 => x"81065156", +1388 => x"0b0b7587", +1389 => x"bb387e86", +1390 => x"2a708106", +1391 => x"51560b0b", +1392 => x"75802e87", +1393 => x"ab386061", +1394 => x"84057108", +1395 => x"52425665", +1396 => x"0b762378", +1397 => x"5bf1dc39", +1398 => x"78337081", +1399 => x"ff065758", +1400 => x"0b7580ec", +1401 => x"2efb9938", +1402 => x"7e900778", +1403 => x"81ff0681", +1404 => x"1b5b5e5f", +1405 => x"f3eb3960", +1406 => x"61840571", +1407 => x"085a4256", +1408 => x"820b8189", +1409 => x"84607207", +1410 => x"41495c80", +1411 => x"f85d800b", +1412 => x"82d53d34", +1413 => x"f4b63989", +1414 => x"7827a838", +1415 => x"ff1b5b8a", +1416 => x"52775180", +1417 => x"d8b43f80", +1418 => x"08b00556", +1419 => x"0b0b757b", +1420 => x"348a5277", +1421 => x"5180d7f6", +1422 => x"3f800858", +1423 => x"0b0b7789", +1424 => x"26da38ff", +1425 => x"1bb01957", +1426 => x"5b0b750b", +1427 => x"7b3482d5", +1428 => x"3d707c31", +1429 => x"ffb0055d", +1430 => x"56f4ba39", +1431 => x"ff1b788f", +1432 => x"06690557", +1433 => x"5b0b7533", +1434 => x"7b347784", +1435 => x"2a580b0b", +1436 => x"77802eda", +1437 => x"38ff1b78", +1438 => x"8f066905", +1439 => x"575b0b75", +1440 => x"337b3477", +1441 => x"842a580b", +1442 => x"0b77d138", +1443 => x"c1397e80", +1444 => x"c0077933", +1445 => x"595ff2bf", +1446 => x"3982b73d", +1447 => x"5b7c80c3", +1448 => x"2e91387e", +1449 => x"842a7081", +1450 => x"0651560b", +1451 => x"0b75802e", +1452 => x"82c83888", +1453 => x"530b0b80", +1454 => x"529d3d70", +1455 => x"5256bbcf", +1456 => x"3f75540b", +1457 => x"0b606184", +1458 => x"05710855", +1459 => x"7c540b0b", +1460 => x"6a530b0b", +1461 => x"425686e8", +1462 => x"3f80085c", +1463 => x"8008ff2e", +1464 => x"fccc3880", +1465 => x"0b82d53d", +1466 => x"34f3aa39", +1467 => x"78708105", +1468 => x"5a335d0b", +1469 => x"0b7caa2e", +1470 => x"85ef3880", +1471 => x"0bd01e71", +1472 => x"4057570b", +1473 => x"758926f1", +1474 => x"d8387610", +1475 => x"10107710", +1476 => x"057d05d0", +1477 => x"05797081", +1478 => x"055b33d0", +1479 => x"7105585e", +1480 => x"57897627", +1481 => x"e538765e", +1482 => x"76ff25f1", +1483 => x"b438ff5e", +1484 => x"f1af3981", +1485 => x"89987f84", +1486 => x"2a708106", +1487 => x"5157480b", +1488 => x"75818a38", +1489 => x"7e862a70", +1490 => x"81065156", +1491 => x"0b0b7580", +1492 => x"2e80fa38", +1493 => x"60618405", +1494 => x"82720522", +1495 => x"5a425682", +1496 => x"7f810657", +1497 => x"5c77802e", +1498 => x"f1dc3875", +1499 => x"802ef1d6", +1500 => x"387e7c07", +1501 => x"5f800b82", +1502 => x"d53d34f1", +1503 => x"cf39ab0b", +1504 => x"82d53d34", +1505 => x"783358f0", +1506 => x"ce398057", +1507 => x"0b0b7610", +1508 => x"10107710", +1509 => x"057d05d0", +1510 => x"05797081", +1511 => x"055b33d0", +1512 => x"7105585e", +1513 => x"57897627", +1514 => x"e3387645", +1515 => x"f0b3397e", +1516 => x"81800779", +1517 => x"33595ff0", +1518 => x"9e398189", +1519 => x"847f842a", +1520 => x"70810651", +1521 => x"57480b75", +1522 => x"802efef8", +1523 => x"38606184", +1524 => x"0571085a", +1525 => x"4256ff87", +1526 => x"397e8107", +1527 => x"7933595f", +1528 => x"eff53982", +1529 => x"d43d3356", +1530 => x"0b0b75ef", +1531 => x"e738a00b", +1532 => x"82d53d34", +1533 => x"783358ef", +1534 => x"de396061", +1535 => x"84054256", +1536 => x"8316337b", +1537 => x"34815cf7", +1538 => x"94397730", +1539 => x"58ad0b82", +1540 => x"d53d3481", +1541 => x"5cf0b539", +1542 => x"7a4a8070", +1543 => x"585c8853", +1544 => x"0b0b7b52", +1545 => x"9b3d7052", +1546 => x"58b8e43f", +1547 => x"7b7e2481", +1548 => x"94387610", +1549 => x"106a0556", +1550 => x"0b0b7508", +1551 => x"802eb638", +1552 => x"77540b0b", +1553 => x"7508530b", +1554 => x"0b82d53d", +1555 => x"ff880552", +1556 => x"685183ec", +1557 => x"3f8008ff", +1558 => x"2ef9d338", +1559 => x"80081c56", +1560 => x"0b0b757e", +1561 => x"248f3881", +1562 => x"17765d57", +1563 => x"757e2e09", +1564 => x"8106ffbe", +1565 => x"387b802e", +1566 => x"f09b3881", +1567 => x"1c526851", +1568 => x"a7c73f80", +1569 => x"08478008", +1570 => x"802ef9ac", +1571 => x"3888530b", +1572 => x"0b805277", +1573 => x"51b7f83f", +1574 => x"77557b54", +1575 => x"0b0b82d5", +1576 => x"3df69405", +1577 => x"530b0b66", +1578 => x"52685184", +1579 => x"8a3f8008", +1580 => x"7c2e0981", +1581 => x"06f8f738", +1582 => x"66678008", +1583 => x"05575b80", +1584 => x"7634efd1", +1585 => x"3977557b", +1586 => x"540b0b82", +1587 => x"d53df694", +1588 => x"05530b0b", +1589 => x"7b526851", +1590 => x"83dd3f80", +1591 => x"085c8008", +1592 => x"ff2ef8ca", +1593 => x"387a4aff", +1594 => x"8c397e0a", +1595 => x"100a7081", +1596 => x"0651560b", +1597 => x"0b75802e", +1598 => x"efba3882", +1599 => x"1e5eefb4", +1600 => x"397bfaca", +1601 => x"387e8106", +1602 => x"560b0b75", +1603 => x"802efabe", +1604 => x"380289ff", +1605 => x"055bb00b", +1606 => x"7b3482d5", +1607 => x"3d707c31", +1608 => x"ffb0055d", +1609 => x"56eeee39", +1610 => x"82d53df0", +1611 => x"05526351", +1612 => x"e9d13f80", +1613 => x"08f7f738", +1614 => x"6282d53d", +1615 => x"33595aef", +1616 => x"f7396061", +1617 => x"84057108", +1618 => x"5a425677", +1619 => x"8025f48f", +1620 => x"38fdb739", +1621 => x"60618405", +1622 => x"71085a42", +1623 => x"56805cf3", +1624 => x"bc396061", +1625 => x"84057108", +1626 => x"5a425681", +1627 => x"5cedd739", +1628 => x"60618405", +1629 => x"71086871", +1630 => x"0c527a5d", +1631 => x"4256eab3", +1632 => x"397bee83", +1633 => x"38ff1b78", +1634 => x"b706b007", +1635 => x"585b0b76", +1636 => x"0b7b3477", +1637 => x"832a580b", +1638 => x"0b77ea38", +1639 => x"7e810656", +1640 => x"0b0b7580", +1641 => x"2ef9a738", +1642 => x"76b02ef9", +1643 => x"a138ff1b", +1644 => x"5bb00b7b", +1645 => x"34fee339", +1646 => x"8189ac5b", +1647 => x"865cedd5", +1648 => x"3982d33d", +1649 => x"088a3880", +1650 => x"0b82d33d", +1651 => x"0cf6df39", +1652 => x"82d53df0", +1653 => x"05526351", +1654 => x"e8a93f80", +1655 => x"08f6cf38", +1656 => x"800b82d3", +1657 => x"3d0cf6c6", +1658 => x"39606184", +1659 => x"05710840", +1660 => x"42567d80", +1661 => x"25ebdd38", +1662 => x"ff793359", +1663 => x"5eebd839", +1664 => x"fc3d0d81", +1665 => x"8a940855", +1666 => x"b8150880", +1667 => x"2e973878", +1668 => x"540b0b77", +1669 => x"530b0b76", +1670 => x"52818a94", +1671 => x"0851e89b", +1672 => x"3f863d0d", +1673 => x"04745190", +1674 => x"c13f7854", +1675 => x"0b0b7753", +1676 => x"0b0b7652", +1677 => x"818a9408", +1678 => x"51e8803f", +1679 => x"863d0d04", +1680 => x"f63d0d7c", +1681 => x"7e615956", +1682 => x"58805674", +1683 => x"0b762ea0", +1684 => x"3876540b", +1685 => x"0b7e530b", +1686 => x"0b745277", +1687 => x"5182d53f", +1688 => x"80085580", +1689 => x"08ff2ea6", +1690 => x"3874800c", +1691 => x"8c3d0d04", +1692 => x"76540b0b", +1693 => x"75530b0b", +1694 => x"8c3df405", +1695 => x"52775182", +1696 => x"b33f8008", +1697 => x"558008ff", +1698 => x"2e098106", +1699 => x"dc388077", +1700 => x"0c818a78", +1701 => x"0c74800c", +1702 => x"8c3d0d04", +1703 => x"70707070", +1704 => x"77540b0b", +1705 => x"76530b0b", +1706 => x"7552818a", +1707 => x"940851ff", +1708 => x"8f3f5050", +1709 => x"505004ec", +1710 => x"3d0d6668", +1711 => x"6a6c6e73", +1712 => x"5c405d42", +1713 => x"42420b60", +1714 => x"802e819b", +1715 => x"38806008", +1716 => x"5a5d0b0b", +1717 => x"7c7a2781", +1718 => x"8338933d", +1719 => x"5b7b0884", +1720 => x"1d087d56", +1721 => x"7a08557c", +1722 => x"540b0b63", +1723 => x"530b0b40", +1724 => x"5efecd3f", +1725 => x"80085880", +1726 => x"08ff2e80", +1727 => x"fa38807a", +1728 => x"80083156", +1729 => x"567c7526", +1730 => x"83388156", +1731 => x"80087a27", +1732 => x"80da3875", +1733 => x"802e80d4", +1734 => x"3880081d", +1735 => x"5d60802e", +1736 => x"a7388056", +1737 => x"0b0b7580", +1738 => x"08259738", +1739 => x"751b550b", +1740 => x"0b743377", +1741 => x"70810559", +1742 => x"34811656", +1743 => x"770b7624", +1744 => x"eb387f08", +1745 => x"8405600c", +1746 => x"78708405", +1747 => x"5a08550b", +1748 => x"0b74802e", +1749 => x"b138797d", +1750 => x"26ff8238", +1751 => x"7c550b0b", +1752 => x"74800c96", +1753 => x"3d0d04ff", +1754 => x"5afee239", +1755 => x"7d7c0c7e", +1756 => x"841d0c7c", +1757 => x"55e83981", +1758 => x"8a620c80", +1759 => x"7c0c8008", +1760 => x"800c963d", +1761 => x"0d046080", +1762 => x"2e843874", +1763 => x"600c747c", +1764 => x"0cff1d80", +1765 => x"0c963d0d", +1766 => x"04fc3d0d", +1767 => x"79557854", +1768 => x"0b0b7753", +1769 => x"0b0b7652", +1770 => x"818a9408", +1771 => x"51fe883f", +1772 => x"863d0d04", +1773 => x"f83d0d7b", +1774 => x"7d7f8191", +1775 => x"94540b0b", +1776 => x"595755e3", +1777 => x"ce3f8008", +1778 => x"81269838", +1779 => x"74540b0b", +1780 => x"74802e88", +1781 => x"38757534", +1782 => x"81540b0b", +1783 => x"73800c8a", +1784 => x"3d0d0481", +1785 => x"89b45281", +1786 => x"919451be", +1787 => x"c93f8008", +1788 => x"81d93880", +1789 => x"08540b0b", +1790 => x"74802ee0", +1791 => x"3880ff76", +1792 => x"25d338ff", +1793 => x"8016530b", +1794 => x"0b8eff73", +1795 => x"2785b838", +1796 => x"f0801653", +1797 => x"0b0b83ef", +1798 => x"ff732782", +1799 => x"d038fc80", +1800 => x"8016530b", +1801 => x"0b80fbff", +1802 => x"ff732785", +1803 => x"c2388fff", +1804 => x"0a16530b", +1805 => x"0bf7c00a", +1806 => x"73278689", +1807 => x"38ff540b", +1808 => x"0bc00a76", +1809 => x"25ff9538", +1810 => x"75820a06", +1811 => x"709e2c70", +1812 => x"fc075151", +1813 => x"530b0b72", +1814 => x"75708105", +1815 => x"57347581", +1816 => x"fc0a0670", +1817 => x"982aff80", +1818 => x"0751530b", +1819 => x"0b727570", +1820 => x"81055734", +1821 => x"7587f080", +1822 => x"80067092", +1823 => x"2aff8007", +1824 => x"51530b0b", +1825 => x"72757081", +1826 => x"05573475", +1827 => x"8fe08006", +1828 => x"708c2aff", +1829 => x"80075153", +1830 => x"0b0b7275", +1831 => x"70810557", +1832 => x"34759fc0", +1833 => x"0670862a", +1834 => x"ff800751", +1835 => x"530b0b72", +1836 => x"75708105", +1837 => x"573475ff", +1838 => x"bf06ff80", +1839 => x"07530b0b", +1840 => x"72753486", +1841 => x"0b800c8a", +1842 => x"3d0d0481", +1843 => x"89bc5281", +1844 => x"919451bc", +1845 => x"e13f8008", +1846 => x"81f93875", +1847 => x"81ff0676", +1848 => x"882c7081", +1849 => x"ff068008", +1850 => x"5759540b", +1851 => x"0b587480", +1852 => x"2efde938", +1853 => x"76802efd", +1854 => x"d3388008", +1855 => x"80ff1870", +1856 => x"81ff0651", +1857 => x"540b0b56", +1858 => x"729e2683", +1859 => x"38815680", +1860 => x"08a01870", +1861 => x"81ff0651", +1862 => x"540b0b54", +1863 => x"0b0b728f", +1864 => x"26853881", +1865 => x"540b0b75", +1866 => x"7407530b", +1867 => x"0b72802e", +1868 => x"b4388008", +1869 => x"c019540b", +1870 => x"0b5672be", +1871 => x"26833881", +1872 => x"568008ff", +1873 => x"80197081", +1874 => x"ff065154", +1875 => x"0b0b540b", +1876 => x"0b7280fc", +1877 => x"26853881", +1878 => x"540b0b75", +1879 => x"7407530b", +1880 => x"0b7280da", +1881 => x"38ff0b80", +1882 => x"0c8a3d0d", +1883 => x"04fcd080", +1884 => x"16530b0b", +1885 => x"ff540b0b", +1886 => x"8fff7327", +1887 => x"fcde3875", +1888 => x"83e08006", +1889 => x"708c2ae0", +1890 => x"0751530b", +1891 => x"0b727570", +1892 => x"81055734", +1893 => x"759fc006", +1894 => x"70862aff", +1895 => x"80075153", +1896 => x"0b0b7275", +1897 => x"70810557", +1898 => x"3475ffbf", +1899 => x"06ff8007", +1900 => x"530b0b72", +1901 => x"7534830b", +1902 => x"800c8a3d", +1903 => x"0d047675", +1904 => x"70810557", +1905 => x"34777534", +1906 => x"82540b0b", +1907 => x"73800c8a", +1908 => x"3d0d0481", +1909 => x"89c45281", +1910 => x"919451ba", +1911 => x"d93f8008", +1912 => x"80eb3875", +1913 => x"81ff0676", +1914 => x"882c7081", +1915 => x"ff068008", +1916 => x"5759540b", +1917 => x"0b587480", +1918 => x"2efbe138", +1919 => x"76802efb", +1920 => x"cb388008", +1921 => x"530b0b81", +1922 => x"a0772785", +1923 => x"3881530b", +1924 => x"0b7681ff", +1925 => x"2efece38", +1926 => x"81707406", +1927 => x"540b0b54", +1928 => x"0b0b7280", +1929 => x"2efebe38", +1930 => x"8008530b", +1931 => x"0b81a078", +1932 => x"27853873", +1933 => x"530b0b77", +1934 => x"81ff2efe", +1935 => x"a8387274", +1936 => x"06530b0b", +1937 => x"72802efe", +1938 => x"9c38fef2", +1939 => x"398189cc", +1940 => x"52819194", +1941 => x"51b9df3f", +1942 => x"8008faf0", +1943 => x"38800876", +1944 => x"81ff0677", +1945 => x"882c7081", +1946 => x"ff065955", +1947 => x"59598154", +1948 => x"0b0b7480", +1949 => x"2efae538", +1950 => x"75802e82", +1951 => x"b438df16", +1952 => x"530b0b72", +1953 => x"80dd26fd", +1954 => x"dc38df18", +1955 => x"530b0b72", +1956 => x"80dd26fd", +1957 => x"d0387608", +1958 => x"9c387377", +1959 => x"0c9b7570", +1960 => x"81055734", +1961 => x"a4757081", +1962 => x"05573480", +1963 => x"c2757081", +1964 => x"05573483", +1965 => x"59757570", +1966 => x"81055734", +1967 => x"77753482", +1968 => x"19800c8a", +1969 => x"3d0d0475", +1970 => x"8fc00670", +1971 => x"862ac007", +1972 => x"51530b0b", +1973 => x"72757081", +1974 => x"05573475", +1975 => x"ffbf06ff", +1976 => x"8007530b", +1977 => x"0b727534", +1978 => x"82540b0b", +1979 => x"fdde3975", +1980 => x"80f08080", +1981 => x"0670922a", +1982 => x"f0075153", +1983 => x"0b0b7275", +1984 => x"70810557", +1985 => x"34758fe0", +1986 => x"8006708c", +1987 => x"2aff8007", +1988 => x"51530b0b", +1989 => x"72757081", +1990 => x"05573475", +1991 => x"9fc00670", +1992 => x"862aff80", +1993 => x"0751530b", +1994 => x"0b727570", +1995 => x"81055734", +1996 => x"75ffbf06", +1997 => x"ff800753", +1998 => x"0b0b7275", +1999 => x"34840b80", +2000 => x"0c8a3d0d", +2001 => x"047581c0", +2002 => x"0a067098", +2003 => x"2af80751", +2004 => x"530b0b72", +2005 => x"75708105", +2006 => x"57347587", +2007 => x"f0808006", +2008 => x"70922aff", +2009 => x"80075153", +2010 => x"0b0b7275", +2011 => x"70810557", +2012 => x"34758fe0", +2013 => x"8006708c", +2014 => x"2aff8007", +2015 => x"51530b0b", +2016 => x"72757081", +2017 => x"05573475", +2018 => x"9fc00670", +2019 => x"862aff80", +2020 => x"0751530b", +2021 => x"0b727570", +2022 => x"81055734", +2023 => x"75ffbf06", +2024 => x"ff800753", +2025 => x"0b0b7275", +2026 => x"34850b80", +2027 => x"0c8a3d0d", +2028 => x"04760880", +2029 => x"2e9d3880", +2030 => x"08770c9b", +2031 => x"75708105", +2032 => x"5734a875", +2033 => x"70810557", +2034 => x"3480c275", +2035 => x"70810557", +2036 => x"34835977", +2037 => x"75348119", +2038 => x"800c8a3d", +2039 => x"0d04fa3d", +2040 => x"0d78818a", +2041 => x"9408540b", +2042 => x"0b55b873", +2043 => x"0508802e", +2044 => x"81ce388c", +2045 => x"15227083", +2046 => x"ffff0670", +2047 => x"832a8132", +2048 => x"70810651", +2049 => x"55555672", +2050 => x"802e80ea", +2051 => x"3873842a", +2052 => x"81328106", +2053 => x"57ff530b", +2054 => x"0b76818b", +2055 => x"3873822a", +2056 => x"70810651", +2057 => x"530b0b72", +2058 => x"802ebf38", +2059 => x"b0150854", +2060 => x"0b0b7380", +2061 => x"2e9e3880", +2062 => x"c015530b", +2063 => x"0b73732e", +2064 => x"8f387352", +2065 => x"818a9408", +2066 => x"5188a53f", +2067 => x"8c152256", +2068 => x"76b0160c", +2069 => x"75db0653", +2070 => x"0b0b728c", +2071 => x"1623800b", +2072 => x"84160c90", +2073 => x"1508750c", +2074 => x"72560b0b", +2075 => x"75880753", +2076 => x"0b0b728c", +2077 => x"16239015", +2078 => x"08802e80", +2079 => x"cb388c15", +2080 => x"22708106", +2081 => x"55530b0b", +2082 => x"73a43872", +2083 => x"0a100a70", +2084 => x"81065153", +2085 => x"0b0b7287", +2086 => x"38941508", +2087 => x"540b0b73", +2088 => x"88160c80", +2089 => x"530b0b72", +2090 => x"800c883d", +2091 => x"0d04800b", +2092 => x"88160c94", +2093 => x"15083098", +2094 => x"160c8053", +2095 => x"0b0be839", +2096 => x"725183a6", +2097 => x"3ffeac39", +2098 => x"745194c6", +2099 => x"3f8c1522", +2100 => x"70810655", +2101 => x"530b0b73", +2102 => x"802effaf", +2103 => x"38d039f8", +2104 => x"3d0d7a58", +2105 => x"0b0b7780", +2106 => x"2e81a938", +2107 => x"818a9408", +2108 => x"540b0bb8", +2109 => x"1408802e", +2110 => x"80f9388c", +2111 => x"18227090", +2112 => x"2b70902c", +2113 => x"70832a81", +2114 => x"3281065c", +2115 => x"5157540b", +2116 => x"0b7880d7", +2117 => x"38901808", +2118 => x"570b0b76", +2119 => x"802e80cb", +2120 => x"38770877", +2121 => x"3177790c", +2122 => x"7683067a", +2123 => x"5855550b", +2124 => x"73853894", +2125 => x"1808560b", +2126 => x"0b758819", +2127 => x"0c807525", +2128 => x"aa387453", +2129 => x"0b0b7652", +2130 => x"9c180851", +2131 => x"a4180854", +2132 => x"0b0b732d", +2133 => x"800b8008", +2134 => x"2580cd38", +2135 => x"80081775", +2136 => x"80083156", +2137 => x"570b7480", +2138 => x"24d83880", +2139 => x"0b800c8a", +2140 => x"3d0d0473", +2141 => x"5181f33f", +2142 => x"8c182270", +2143 => x"902b7090", +2144 => x"2c70832a", +2145 => x"81328106", +2146 => x"5c515754", +2147 => x"0b0b78db", +2148 => x"38ff8239", +2149 => x"80c1df52", +2150 => x"818a9408", +2151 => x"5191973f", +2152 => x"8008800c", +2153 => x"8a3d0d04", +2154 => x"8c182280", +2155 => x"c007540b", +2156 => x"0b738c19", +2157 => x"23ff0b80", +2158 => x"0c8a3d0d", +2159 => x"04707251", +2160 => x"800b710c", +2161 => x"800b8472", +2162 => x"050c800b", +2163 => x"8872050c", +2164 => x"028e0522", +2165 => x"8c720523", +2166 => x"02920522", +2167 => x"8e720523", +2168 => x"800b9072", +2169 => x"050c800b", +2170 => x"9472050c", +2171 => x"800b9872", +2172 => x"050c709c", +2173 => x"72050c80", +2174 => x"f3d60ba0", +2175 => x"72050c80", +2176 => x"f4a90ba4", +2177 => x"72050c80", +2178 => x"f5bc0ba8", +2179 => x"72050c80", +2180 => x"f6960bac", +2181 => x"72050c50", +2182 => x"04fa3d0d", +2183 => x"797080dc", +2184 => x"298c7105", +2185 => x"540b0b7a", +2186 => x"530b0b56", +2187 => x"57949a3f", +2188 => x"80088008", +2189 => x"55568008", +2190 => x"802ea838", +2191 => x"80088c05", +2192 => x"540b0b80", +2193 => x"0b80080c", +2194 => x"76800884", +2195 => x"050c7380", +2196 => x"0888050c", +2197 => x"74530b0b", +2198 => x"80527351", +2199 => x"a4b13f75", +2200 => x"540b0b73", +2201 => x"800c883d", +2202 => x"0d04fc3d", +2203 => x"0d7680c7", +2204 => x"940bbc72", +2205 => x"050c5581", +2206 => x"0bb8160c", +2207 => x"800b84dc", +2208 => x"160c830b", +2209 => x"84e0160c", +2210 => x"84e81584", +2211 => x"e4160c74", +2212 => x"540b0b80", +2213 => x"530b0b84", +2214 => x"52841508", +2215 => x"51fe9e3f", +2216 => x"74540b0b", +2217 => x"81530b0b", +2218 => x"89528815", +2219 => x"0851fe8d", +2220 => x"3f74540b", +2221 => x"0b82530b", +2222 => x"0b8a528c", +2223 => x"150851fd", +2224 => x"fc3f863d", +2225 => x"0d04f93d", +2226 => x"0d79818a", +2227 => x"9408540b", +2228 => x"0b57b873", +2229 => x"0508802e", +2230 => x"80ce3884", +2231 => x"dc730556", +2232 => x"88160884", +2233 => x"1708ff05", +2234 => x"55558074", +2235 => x"24a2388c", +2236 => x"15227090", +2237 => x"2b70902c", +2238 => x"51540b0b", +2239 => x"5872802e", +2240 => x"80cd3880", +2241 => x"dc15ff15", +2242 => x"55550b73", +2243 => x"8025e038", +2244 => x"7508530b", +2245 => x"0b72802e", +2246 => x"9f387256", +2247 => x"88160884", +2248 => x"1708ff05", +2249 => x"5555c339", +2250 => x"7251febe", +2251 => x"3f818a94", +2252 => x"0884dc05", +2253 => x"56ffa939", +2254 => x"84527651", +2255 => x"fddb3f80", +2256 => x"08760c80", +2257 => x"08802e80", +2258 => x"c0388008", +2259 => x"56ce3981", +2260 => x"0b8c1623", +2261 => x"72750c72", +2262 => x"88160c72", +2263 => x"84160c72", +2264 => x"90160c72", +2265 => x"94160c72", +2266 => x"98160cff", +2267 => x"0b8e1623", +2268 => x"72b0160c", +2269 => x"72b4160c", +2270 => x"7280c416", +2271 => x"0c7280c8", +2272 => x"160c7480", +2273 => x"0c893d0d", +2274 => x"048c770c", +2275 => x"800b800c", +2276 => x"893d0d04", +2277 => x"707080c1", +2278 => x"df527351", +2279 => x"8d983f50", +2280 => x"50047081", +2281 => x"8a940851", +2282 => x"eb3f5004", +2283 => x"fb3d0d77", +2284 => x"705256a3", +2285 => x"873f8191", +2286 => x"f00b8805", +2287 => x"08847105", +2288 => x"08fc0670", +2289 => x"7b319fef", +2290 => x"05e08006", +2291 => x"e0800556", +2292 => x"56530b0b", +2293 => x"a0807424", +2294 => x"96388052", +2295 => x"7551abbb", +2296 => x"3f8191f8", +2297 => x"0815530b", +2298 => x"0b728008", +2299 => x"2e913875", +2300 => x"51a2ca3f", +2301 => x"80530b0b", +2302 => x"72800c87", +2303 => x"3d0d0473", +2304 => x"30527551", +2305 => x"ab953f80", +2306 => x"08ff2eab", +2307 => x"388191f0", +2308 => x"0b880508", +2309 => x"75753181", +2310 => x"07847205", +2311 => x"0c530b0b", +2312 => x"8191b408", +2313 => x"74318191", +2314 => x"b40c7551", +2315 => x"a28f3f81", +2316 => x"0b800c87", +2317 => x"3d0d0480", +2318 => x"527551aa", +2319 => x"de3f8191", +2320 => x"f00b8805", +2321 => x"08800871", +2322 => x"3156530b", +2323 => x"0b8f7525", +2324 => x"ff9d3880", +2325 => x"088191e4", +2326 => x"08318191", +2327 => x"b40c7481", +2328 => x"0784140c", +2329 => x"7551a1d5", +2330 => x"3f80530b", +2331 => x"0bff8939", +2332 => x"f63d0d7c", +2333 => x"7e540b0b", +2334 => x"5b72802e", +2335 => x"82a2387a", +2336 => x"51a1b93f", +2337 => x"f8730584", +2338 => x"71050870", +2339 => x"fe067073", +2340 => x"05847105", +2341 => x"08fc065d", +2342 => x"5859540b", +2343 => x"0b588191", +2344 => x"f808752e", +2345 => x"83833878", +2346 => x"84160c80", +2347 => x"73810654", +2348 => x"0b0b5a72", +2349 => x"0b7a2e81", +2350 => x"eb387815", +2351 => x"84710508", +2352 => x"81065153", +2353 => x"0b0b72a3", +2354 => x"38781757", +2355 => x"7981fc38", +2356 => x"88150853", +2357 => x"0b0b7281", +2358 => x"91f82e83", +2359 => x"9c388c15", +2360 => x"08708c15", +2361 => x"0c738872", +2362 => x"050c5676", +2363 => x"81078419", +2364 => x"0c761877", +2365 => x"710c530b", +2366 => x"0b79819f", +2367 => x"3883ff77", +2368 => x"2781da38", +2369 => x"76892a77", +2370 => x"832a5653", +2371 => x"0b0b7280", +2372 => x"2e80c038", +2373 => x"76862ab8", +2374 => x"05558473", +2375 => x"27b53880", +2376 => x"db730555", +2377 => x"947327ab", +2378 => x"38768c2a", +2379 => x"80ee0555", +2380 => x"80d47327", +2381 => x"9e38768f", +2382 => x"2a80f705", +2383 => x"5582d473", +2384 => x"27913876", +2385 => x"922a80fc", +2386 => x"05558ad4", +2387 => x"73278438", +2388 => x"80fe550b", +2389 => x"0b741010", +2390 => x"108191f0", +2391 => x"05887105", +2392 => x"0855560b", +2393 => x"730b762e", +2394 => x"82cd3884", +2395 => x"1408fc06", +2396 => x"530b0b76", +2397 => x"73278f38", +2398 => x"88140854", +2399 => x"0b0b7376", +2400 => x"2e098106", +2401 => x"e6388c14", +2402 => x"08708c1a", +2403 => x"0c74881a", +2404 => x"0c788872", +2405 => x"050c5677", +2406 => x"8c150c7a", +2407 => x"519f9e3f", +2408 => x"8c3d0d04", +2409 => x"77087871", +2410 => x"31597705", +2411 => x"88190854", +2412 => x"0b0b5772", +2413 => x"8191f82e", +2414 => x"80ea388c", +2415 => x"1808708c", +2416 => x"150c7388", +2417 => x"72050c56", +2418 => x"fdf03988", +2419 => x"15088c16", +2420 => x"08708c73", +2421 => x"050c5788", +2422 => x"170cfe8f", +2423 => x"3976832a", +2424 => x"70540b0b", +2425 => x"55800b75", +2426 => x"2481a338", +2427 => x"72822c81", +2428 => x"712b8191", +2429 => x"f4080781", +2430 => x"91f00b84", +2431 => x"050c530b", +2432 => x"0b741010", +2433 => x"108191f0", +2434 => x"05887105", +2435 => x"0855560b", +2436 => x"0b758c19", +2437 => x"0c738819", +2438 => x"0c778817", +2439 => x"0c778c15", +2440 => x"0cfef839", +2441 => x"815afd92", +2442 => x"39781773", +2443 => x"8106540b", +2444 => x"0b57729a", +2445 => x"38770878", +2446 => x"71315977", +2447 => x"058c1908", +2448 => x"881a0871", +2449 => x"8c72050c", +2450 => x"8872050c", +2451 => x"57570b0b", +2452 => x"76810784", +2453 => x"190c7781", +2454 => x"91f00b88", +2455 => x"050c8191", +2456 => x"ec087726", +2457 => x"feb53881", +2458 => x"91e80852", +2459 => x"7a51fabc", +2460 => x"3f7a519d", +2461 => x"c83ffea8", +2462 => x"3981788c", +2463 => x"150c7888", +2464 => x"150c738c", +2465 => x"1a0c7388", +2466 => x"1a0c5afc", +2467 => x"de398315", +2468 => x"70822c81", +2469 => x"712b8191", +2470 => x"f4080781", +2471 => x"91f00b84", +2472 => x"050c5153", +2473 => x"0b0b7410", +2474 => x"10108191", +2475 => x"f0058871", +2476 => x"05085556", +2477 => x"fed93974", +2478 => x"530b0b80", +2479 => x"7524a938", +2480 => x"72822c81", +2481 => x"712b8191", +2482 => x"f4080781", +2483 => x"91f00b84", +2484 => x"050c530b", +2485 => x"0b758c19", +2486 => x"0c738819", +2487 => x"0c778817", +2488 => x"0c778c15", +2489 => x"0cfdb439", +2490 => x"83157082", +2491 => x"2c81712b", +2492 => x"8191f408", +2493 => x"078191f0", +2494 => x"0b84050c", +2495 => x"51530b0b", +2496 => x"d439f23d", +2497 => x"0d606288", +2498 => x"71050870", +2499 => x"57575f5a", +2500 => x"74802e81", +2501 => x"9f388c1a", +2502 => x"2270832a", +2503 => x"81327081", +2504 => x"06515558", +2505 => x"0b738638", +2506 => x"901a0893", +2507 => x"387951f1", +2508 => x"ad3fff54", +2509 => x"0b0b8008", +2510 => x"80fa388c", +2511 => x"1a22587d", +2512 => x"08578078", +2513 => x"83ffff06", +2514 => x"700a100a", +2515 => x"70810651", +2516 => x"56575573", +2517 => x"0b752e80", +2518 => x"e2387491", +2519 => x"38760884", +2520 => x"18088819", +2521 => x"5956590b", +2522 => x"74802ef1", +2523 => x"3874540b", +2524 => x"0b888075", +2525 => x"27863888", +2526 => x"80540b0b", +2527 => x"73530b0b", +2528 => x"78529c1a", +2529 => x"0851a41a", +2530 => x"08540b0b", +2531 => x"732d800b", +2532 => x"80082583", +2533 => x"86388008", +2534 => x"19758008", +2535 => x"317f8805", +2536 => x"08800831", +2537 => x"70618805", +2538 => x"0c565659", +2539 => x"73ffab38", +2540 => x"80540b0b", +2541 => x"73800c90", +2542 => x"3d0d0475", +2543 => x"81327081", +2544 => x"06764151", +2545 => x"540b0b73", +2546 => x"802e81d0", +2547 => x"38749138", +2548 => x"76088418", +2549 => x"08881959", +2550 => x"56590b74", +2551 => x"802ef138", +2552 => x"881a0878", +2553 => x"83ffff06", +2554 => x"70892a70", +2555 => x"81065156", +2556 => x"59567380", +2557 => x"2e839e38", +2558 => x"7575278f", +2559 => x"3877872a", +2560 => x"70810651", +2561 => x"540b0b73", +2562 => x"82d63874", +2563 => x"76278338", +2564 => x"74560b0b", +2565 => x"75530b0b", +2566 => x"78527908", +2567 => x"5196f93f", +2568 => x"881a0876", +2569 => x"31881b0c", +2570 => x"7908167a", +2571 => x"0c74560b", +2572 => x"0b751975", +2573 => x"77317f88", +2574 => x"05087831", +2575 => x"70618805", +2576 => x"0c565659", +2577 => x"73802efe", +2578 => x"e7388c1a", +2579 => x"2258fefd", +2580 => x"39777854", +2581 => x"0b0b7953", +2582 => x"0b0b7b52", +2583 => x"5696b93f", +2584 => x"881a0878", +2585 => x"31881b0c", +2586 => x"7908187a", +2587 => x"0c7c7631", +2588 => x"5d0b0b7c", +2589 => x"8e387951", +2590 => x"f0e53f80", +2591 => x"08819c38", +2592 => x"80085f75", +2593 => x"19757731", +2594 => x"7f880508", +2595 => x"78317061", +2596 => x"88050c56", +2597 => x"56597380", +2598 => x"2efe9538", +2599 => x"74819438", +2600 => x"76088418", +2601 => x"08881959", +2602 => x"56590b74", +2603 => x"802ef138", +2604 => x"74530b0b", +2605 => x"8a527851", +2606 => x"94a33f80", +2607 => x"08793181", +2608 => x"055d8008", +2609 => x"84388115", +2610 => x"5d815f7c", +2611 => x"58747d27", +2612 => x"83387458", +2613 => x"941a0888", +2614 => x"1b087105", +2615 => x"575c807a", +2616 => x"085c540b", +2617 => x"0b901a08", +2618 => x"7b278538", +2619 => x"81540b0b", +2620 => x"75782585", +2621 => x"387380c2", +2622 => x"387b7824", +2623 => x"fed3387b", +2624 => x"530b0b78", +2625 => x"529c1a08", +2626 => x"51a41a08", +2627 => x"540b0b73", +2628 => x"2d800856", +2629 => x"80088024", +2630 => x"fed3388c", +2631 => x"1a2280c0", +2632 => x"07540b0b", +2633 => x"738c1b23", +2634 => x"ff540b0b", +2635 => x"73800c90", +2636 => x"3d0d047e", +2637 => x"ff9538fe", +2638 => x"f7397553", +2639 => x"0b0b7852", +2640 => x"7a5194d4", +2641 => x"3f790816", +2642 => x"7a0c7951", +2643 => x"ef913f80", +2644 => x"08c9387c", +2645 => x"76315d0b", +2646 => x"0b7cfea7", +2647 => x"38fe9739", +2648 => x"901a087a", +2649 => x"08713176", +2650 => x"71057056", +2651 => x"5a575281", +2652 => x"8a940851", +2653 => x"97c83f80", +2654 => x"08802eff", +2655 => x"9e388008", +2656 => x"901b0c80", +2657 => x"08167a0c", +2658 => x"77941b0c", +2659 => x"74881b0c", +2660 => x"7456fcf7", +2661 => x"39790858", +2662 => x"901a0878", +2663 => x"27853881", +2664 => x"540b0b75", +2665 => x"75278438", +2666 => x"73bd3894", +2667 => x"1a08560b", +2668 => x"0b757526", +2669 => x"80e13875", +2670 => x"530b0b78", +2671 => x"529c1a08", +2672 => x"51a41a08", +2673 => x"540b0b73", +2674 => x"2d800856", +2675 => x"80088024", +2676 => x"fcdd388c", +2677 => x"1a2280c0", +2678 => x"07540b0b", +2679 => x"738c1b23", +2680 => x"ff540b0b", +2681 => x"fec63975", +2682 => x"530b0b78", +2683 => x"52775193", +2684 => x"a73f7908", +2685 => x"167a0c79", +2686 => x"51ede43f", +2687 => x"8008802e", +2688 => x"fcad388c", +2689 => x"1a2280c0", +2690 => x"07540b0b", +2691 => x"738c1b23", +2692 => x"ff540b0b", +2693 => x"fe963974", +2694 => x"75540b0b", +2695 => x"79530b0b", +2696 => x"78525692", +2697 => x"f33f881a", +2698 => x"08753188", +2699 => x"1b0c7908", +2700 => x"157a0cfb", +2701 => x"fa39f93d", +2702 => x"0d797b58", +2703 => x"530b0b80", +2704 => x"0b818a94", +2705 => x"08530b0b", +2706 => x"5672722e", +2707 => x"80d03884", +2708 => x"dc730555", +2709 => x"0b0b7476", +2710 => x"2e80c338", +2711 => x"88150884", +2712 => x"1608ff05", +2713 => x"540b0b54", +2714 => x"0b0b8073", +2715 => x"24a3388c", +2716 => x"14227090", +2717 => x"2b70902c", +2718 => x"51530b0b", +2719 => x"587180ed", +2720 => x"3880dc14", +2721 => x"ff14540b", +2722 => x"0b540b0b", +2723 => x"728025df", +2724 => x"38740855", +2725 => x"0b0b74c4", +2726 => x"38818a94", +2727 => x"085284dc", +2728 => x"7205550b", +2729 => x"0b74802e", +2730 => x"bd388815", +2731 => x"08841608", +2732 => x"ff05540b", +2733 => x"0b540b0b", +2734 => x"807324a2", +2735 => x"388c1422", +2736 => x"70902b70", +2737 => x"902c5153", +2738 => x"0b0b5871", +2739 => x"b33880dc", +2740 => x"14ff1454", +2741 => x"0b0b540b", +2742 => x"0b728025", +2743 => x"e0387408", +2744 => x"550b0b74", +2745 => x"c5387580", +2746 => x"0c893d0d", +2747 => x"04735176", +2748 => x"2d758008", +2749 => x"0780dc15", +2750 => x"ff155555", +2751 => x"56ff8d39", +2752 => x"7351762d", +2753 => x"75800807", +2754 => x"80dc15ff", +2755 => x"15555556", +2756 => x"c839ea3d", +2757 => x"0d688c71", +2758 => x"0522700a", +2759 => x"100a8106", +2760 => x"57585674", +2761 => x"80ee388e", +2762 => x"16227090", +2763 => x"2b70902c", +2764 => x"51555880", +2765 => x"7424b538", +2766 => x"983dc405", +2767 => x"530b0b73", +2768 => x"52818a94", +2769 => x"0851a298", +2770 => x"3f800b80", +2771 => x"08249938", +2772 => x"7983e080", +2773 => x"06540b0b", +2774 => x"7380c080", +2775 => x"2e819f38", +2776 => x"73828080", +2777 => x"2e81a138", +2778 => x"8c162257", +2779 => x"0b0b7690", +2780 => x"8007540b", +2781 => x"0b738c17", +2782 => x"23888052", +2783 => x"818a9408", +2784 => x"5181c63f", +2785 => x"80089f38", +2786 => x"8c162282", +2787 => x"07540b0b", +2788 => x"738c1723", +2789 => x"80c31670", +2790 => x"770c9017", +2791 => x"0c810b94", +2792 => x"170c983d", +2793 => x"0d04818a", +2794 => x"940880c7", +2795 => x"940bbc72", +2796 => x"050c540b", +2797 => x"0b8c1622", +2798 => x"81800754", +2799 => x"0b0b738c", +2800 => x"17238008", +2801 => x"760c8008", +2802 => x"90170c88", +2803 => x"800b9417", +2804 => x"0c74802e", +2805 => x"cd388e16", +2806 => x"2270902b", +2807 => x"70902c53", +2808 => x"0b0b5558", +2809 => x"aacb3f80", +2810 => x"08802eff", +2811 => x"b5388c16", +2812 => x"22810754", +2813 => x"0b0b738c", +2814 => x"1723983d", +2815 => x"0d04810b", +2816 => x"8c172258", +2817 => x"55fee539", +2818 => x"a8160880", +2819 => x"f5bc2e09", +2820 => x"8106fed4", +2821 => x"388c1622", +2822 => x"88800754", +2823 => x"0b0b738c", +2824 => x"17238880", +2825 => x"0b80cc17", +2826 => x"0cfece39", +2827 => x"70707352", +2828 => x"818a9408", +2829 => x"51933f50", +2830 => x"50047070", +2831 => x"7352818a", +2832 => x"940851f0", +2833 => x"ab3f5050", +2834 => x"04f33d0d", +2835 => x"7f618b71", +2836 => x"0570f806", +2837 => x"5c55555e", +2838 => x"72962683", +2839 => x"38905980", +2840 => x"0b792474", +2841 => x"7a260753", +2842 => x"0b0b8054", +2843 => x"0b0b7274", +2844 => x"2e098106", +2845 => x"80d4387d", +2846 => x"5191c13f", +2847 => x"7883f726", +2848 => x"80cf3878", +2849 => x"832a7010", +2850 => x"10108191", +2851 => x"f0058c71", +2852 => x"05085959", +2853 => x"5a76782e", +2854 => x"83e73884", +2855 => x"1708fc06", +2856 => x"568c1708", +2857 => x"88180871", +2858 => x"8c72050c", +2859 => x"8872050c", +2860 => x"58751784", +2861 => x"71050881", +2862 => x"07847205", +2863 => x"0c530b0b", +2864 => x"7d5190f9", +2865 => x"3f881754", +2866 => x"0b0b7380", +2867 => x"0c8f3d0d", +2868 => x"0478892a", +2869 => x"79832a5b", +2870 => x"530b0b72", +2871 => x"802e80c0", +2872 => x"3878862a", +2873 => x"b8055a84", +2874 => x"7327b538", +2875 => x"80db7305", +2876 => x"5a947327", +2877 => x"ab38788c", +2878 => x"2a80ee05", +2879 => x"5a80d473", +2880 => x"279e3878", +2881 => x"8f2a80f7", +2882 => x"055a82d4", +2883 => x"73279138", +2884 => x"78922a80", +2885 => x"fc055a8a", +2886 => x"d4732784", +2887 => x"3880fe5a", +2888 => x"0b0b7910", +2889 => x"10108191", +2890 => x"f0058c71", +2891 => x"05085855", +2892 => x"0b760b75", +2893 => x"2ea63884", +2894 => x"1708fc06", +2895 => x"707a3155", +2896 => x"560b738f", +2897 => x"2489c638", +2898 => x"738025fe", +2899 => x"d4388c17", +2900 => x"08570b0b", +2901 => x"76752e09", +2902 => x"8106dc38", +2903 => x"811a5a81", +2904 => x"92800857", +2905 => x"0b0b7681", +2906 => x"91f82e82", +2907 => x"ed388417", +2908 => x"08fc0670", +2909 => x"7a315556", +2910 => x"0b738f24", +2911 => x"829c3881", +2912 => x"91f80b81", +2913 => x"92840c81", +2914 => x"91f80b81", +2915 => x"92800c73", +2916 => x"8025fe9d", +2917 => x"3883ff76", +2918 => x"27849d38", +2919 => x"75892a76", +2920 => x"832a5553", +2921 => x"0b0b7280", +2922 => x"2e80cc38", +2923 => x"75862ab8", +2924 => x"05540b0b", +2925 => x"847327bf", +2926 => x"3880db73", +2927 => x"05540b0b", +2928 => x"947327b3", +2929 => x"38758c2a", +2930 => x"80ee0554", +2931 => x"0b0b80d4", +2932 => x"7327a438", +2933 => x"758f2a80", +2934 => x"f705540b", +2935 => x"0b82d473", +2936 => x"27953875", +2937 => x"922a80fc", +2938 => x"05540b0b", +2939 => x"8ad47327", +2940 => x"863880fe", +2941 => x"540b0b73", +2942 => x"10101081", +2943 => x"91f00588", +2944 => x"71050856", +2945 => x"580b740b", +2946 => x"782e87a0", +2947 => x"38841508", +2948 => x"fc06530b", +2949 => x"0b757327", +2950 => x"8f388815", +2951 => x"08550b0b", +2952 => x"74782e09", +2953 => x"8106e638", +2954 => x"8c150881", +2955 => x"91f00b84", +2956 => x"0508718c", +2957 => x"1a0c7688", +2958 => x"1a0c7888", +2959 => x"73050c78", +2960 => x"8c180c5d", +2961 => x"5879530b", +2962 => x"0b807a24", +2963 => x"84983872", +2964 => x"822c8171", +2965 => x"2b5c530b", +2966 => x"0b7a7c26", +2967 => x"81ac387b", +2968 => x"7b06530b", +2969 => x"0b728398", +2970 => x"3879fc06", +2971 => x"84055a7a", +2972 => x"10707d06", +2973 => x"540b0b5b", +2974 => x"72838538", +2975 => x"841a5aef", +2976 => x"3988178c", +2977 => x"71050858", +2978 => x"580b760b", +2979 => x"782e0981", +2980 => x"06fc8838", +2981 => x"821a5afd", +2982 => x"c6397817", +2983 => x"79810784", +2984 => x"190c7081", +2985 => x"92840c70", +2986 => x"8192800c", +2987 => x"8191f80b", +2988 => x"8c72050c", +2989 => x"8c710508", +2990 => x"8872050c", +2991 => x"74810784", +2992 => x"72050c74", +2993 => x"71057571", +2994 => x"0c51530b", +2995 => x"0b7d518c", +2996 => x"ec3f8817", +2997 => x"540b0bfb", +2998 => x"f1398191", +2999 => x"f00b8405", +3000 => x"087a540b", +3001 => x"0b5c7980", +3002 => x"25fee438", +3003 => x"82f8397a", +3004 => x"097c0670", +3005 => x"8191f00b", +3006 => x"84050c5c", +3007 => x"7a105b0b", +3008 => x"0b7a7c26", +3009 => x"85387a85", +3010 => x"f2388191", +3011 => x"f00b8805", +3012 => x"08708472", +3013 => x"0508fc06", +3014 => x"707c317c", +3015 => x"72268f72", +3016 => x"25075757", +3017 => x"5c5d5572", +3018 => x"802e80e3", +3019 => x"38797a16", +3020 => x"8191e808", +3021 => x"1b907105", +3022 => x"5a55575b", +3023 => x"8191e408", +3024 => x"ff2e8938", +3025 => x"a08f7305", +3026 => x"e0800657", +3027 => x"0b0b7652", +3028 => x"7d5194c7", +3029 => x"3f800854", +3030 => x"0b0b8008", +3031 => x"ff2e9038", +3032 => x"80087627", +3033 => x"82b33874", +3034 => x"8191f02e", +3035 => x"82ab3881", +3036 => x"91f00b88", +3037 => x"05085584", +3038 => x"1508fc06", +3039 => x"707a317a", +3040 => x"72268f72", +3041 => x"25075255", +3042 => x"530b0b72", +3043 => x"84913874", +3044 => x"79810784", +3045 => x"170c7916", +3046 => x"708191f0", +3047 => x"0b88050c", +3048 => x"75810784", +3049 => x"72050c54", +3050 => x"0b0b7e52", +3051 => x"578b8e3f", +3052 => x"8817540b", +3053 => x"0bfa9339", +3054 => x"75832a70", +3055 => x"540b0b54", +3056 => x"0b0b8074", +3057 => x"2481a738", +3058 => x"72822c81", +3059 => x"712b8191", +3060 => x"f4080770", +3061 => x"8191f00b", +3062 => x"84050c75", +3063 => x"10101081", +3064 => x"91f00588", +3065 => x"71050858", +3066 => x"5a5d530b", +3067 => x"0b778c18", +3068 => x"0c748818", +3069 => x"0c768819", +3070 => x"0c768c16", +3071 => x"0cfcc639", +3072 => x"797a1010", +3073 => x"108191f0", +3074 => x"05705759", +3075 => x"5d8c1508", +3076 => x"570b0b76", +3077 => x"752ea638", +3078 => x"841708fc", +3079 => x"06707a31", +3080 => x"55560b73", +3081 => x"8f2483ef", +3082 => x"38738025", +3083 => x"84af388c", +3084 => x"1708570b", +3085 => x"0b76752e", +3086 => x"098106dc", +3087 => x"38881581", +3088 => x"1b708306", +3089 => x"555b5572", +3090 => x"c4387c83", +3091 => x"06530b0b", +3092 => x"72802efd", +3093 => x"9a38ff1d", +3094 => x"f819595d", +3095 => x"88180878", +3096 => x"2ee838fd", +3097 => x"9739831a", +3098 => x"530b0bfb", +3099 => x"e2398314", +3100 => x"70822c81", +3101 => x"712b8191", +3102 => x"f4080770", +3103 => x"8191f00b", +3104 => x"84050c76", +3105 => x"10101081", +3106 => x"91f00588", +3107 => x"71050859", +3108 => x"5b5e5153", +3109 => x"0b0bfed5", +3110 => x"398191b4", +3111 => x"08175880", +3112 => x"08762e81", +3113 => x"99388191", +3114 => x"e408ff2e", +3115 => x"849b3873", +3116 => x"76311881", +3117 => x"91b40c73", +3118 => x"87067057", +3119 => x"530b0b72", +3120 => x"802e8838", +3121 => x"88733170", +3122 => x"15555676", +3123 => x"149fff06", +3124 => x"a0807131", +3125 => x"1770540b", +3126 => x"0b7f530b", +3127 => x"0b57530b", +3128 => x"0b91b83f", +3129 => x"8008530b", +3130 => x"0b8008ff", +3131 => x"2e81a738", +3132 => x"8191b408", +3133 => x"16708191", +3134 => x"b40c7475", +3135 => x"8191f00b", +3136 => x"88050c74", +3137 => x"76311870", +3138 => x"81075155", +3139 => x"56587b81", +3140 => x"91f02e83", +3141 => x"c138798f", +3142 => x"2682ee38", +3143 => x"810b8415", +3144 => x"0c841508", +3145 => x"fc06707a", +3146 => x"317a7226", +3147 => x"8f722507", +3148 => x"5255530b", +3149 => x"0b72802e", +3150 => x"fcd53880", +3151 => x"e2398008", +3152 => x"9fff0653", +3153 => x"0b0b72fe", +3154 => x"dd387781", +3155 => x"91b40c81", +3156 => x"91f00b88", +3157 => x"05087b18", +3158 => x"81078472", +3159 => x"050c5581", +3160 => x"91e00878", +3161 => x"27863877", +3162 => x"8191e00c", +3163 => x"8191dc08", +3164 => x"7827fc83", +3165 => x"38778191", +3166 => x"dc0c8415", +3167 => x"08fc0670", +3168 => x"7a317a72", +3169 => x"268f7225", +3170 => x"07525553", +3171 => x"0b0b7280", +3172 => x"2efbfc38", +3173 => x"8a398074", +3174 => x"540b0b56", +3175 => x"fed2397d", +3176 => x"51879a3f", +3177 => x"800b800c", +3178 => x"8f3d0d04", +3179 => x"73530b0b", +3180 => x"807424ab", +3181 => x"3872822c", +3182 => x"81712b81", +3183 => x"91f40807", +3184 => x"708191f0", +3185 => x"0b84050c", +3186 => x"5d530b0b", +3187 => x"778c180c", +3188 => x"7488180c", +3189 => x"7688190c", +3190 => x"768c160c", +3191 => x"f8e73983", +3192 => x"1470822c", +3193 => x"81712b81", +3194 => x"91f40807", +3195 => x"708191f0", +3196 => x"0b84050c", +3197 => x"5e51530b", +3198 => x"0bd2397b", +3199 => x"7b06530b", +3200 => x"0b72fbfc", +3201 => x"38841a7b", +3202 => x"105c5aef", +3203 => x"39ff1a81", +3204 => x"7105515a", +3205 => x"f6c93978", +3206 => x"17798107", +3207 => x"84190c8c", +3208 => x"18088819", +3209 => x"08718c72", +3210 => x"050c8872", +3211 => x"050c5970", +3212 => x"8192840c", +3213 => x"70819280", +3214 => x"0c8191f8", +3215 => x"0b8c7205", +3216 => x"0c8c7105", +3217 => x"08887205", +3218 => x"0c748107", +3219 => x"8472050c", +3220 => x"74710575", +3221 => x"710c5153", +3222 => x"0b0bf8f1", +3223 => x"39751784", +3224 => x"71050881", +3225 => x"07847205", +3226 => x"0c530b0b", +3227 => x"8c170888", +3228 => x"1808718c", +3229 => x"72050c88", +3230 => x"72050c58", +3231 => x"7d5185bd", +3232 => x"3f881754", +3233 => x"0b0bf4c2", +3234 => x"39728415", +3235 => x"0cf41af8", +3236 => x"0670841e", +3237 => x"08810607", +3238 => x"841e0c70", +3239 => x"1d540b0b", +3240 => x"5b850b84", +3241 => x"140c850b", +3242 => x"88140c8f", +3243 => x"7b27fdaf", +3244 => x"38881c52", +3245 => x"7d51e3b8", +3246 => x"3f8191f0", +3247 => x"0b880508", +3248 => x"8191b408", +3249 => x"5955fd97", +3250 => x"39778191", +3251 => x"b40c7381", +3252 => x"91e40cfb", +3253 => x"e2397284", +3254 => x"150cfd83", +3255 => x"39fa3d0d", +3256 => x"7a790288", +3257 => x"05a70533", +3258 => x"5652530b", +3259 => x"0b837327", +3260 => x"8c387083", +3261 => x"06520b0b", +3262 => x"71802eb1", +3263 => x"38ff7305", +3264 => x"530b0b72", +3265 => x"ff2e9b38", +3266 => x"70335273", +3267 => x"0b722e94", +3268 => x"38817105", +3269 => x"ff14540b", +3270 => x"0b5172ff", +3271 => x"2e098106", +3272 => x"e7388051", +3273 => x"0b0b7080", +3274 => x"0c883d0d", +3275 => x"04707257", +3276 => x"55835175", +3277 => x"82802914", +3278 => x"ff720552", +3279 => x"560b7080", +3280 => x"25f13883", +3281 => x"732780cb", +3282 => x"38740876", +3283 => x"327009f7", +3284 => x"fbfdff72", +3285 => x"050670f8", +3286 => x"84828180", +3287 => x"06515151", +3288 => x"0b0b7080", +3289 => x"2e9e3874", +3290 => x"51805270", +3291 => x"3357730b", +3292 => x"772effb0", +3293 => x"38817105", +3294 => x"81730553", +3295 => x"0b0b5183", +3296 => x"7227e838", +3297 => x"fc730584", +3298 => x"1656530b", +3299 => x"0b728326", +3300 => x"ffb73874", +3301 => x"51fee639", +3302 => x"fa3d0d78", +3303 => x"7a7c7272", +3304 => x"72575757", +3305 => x"5956560b", +3306 => x"740b7627", +3307 => x"be387615", +3308 => x"51750b71", +3309 => x"27b53870", +3310 => x"7717ff14", +3311 => x"540b0b55", +3312 => x"530b0b71", +3313 => x"ff2e9d38", +3314 => x"ff14ff14", +3315 => x"540b0b54", +3316 => x"0b0b7233", +3317 => x"7434ff72", +3318 => x"05520b0b", +3319 => x"71ff2e09", +3320 => x"8106e538", +3321 => x"75800c88", +3322 => x"3d0d0476", +3323 => x"8f269c38", +3324 => x"ff720552", +3325 => x"0b0b71ff", +3326 => x"2eea3872", +3327 => x"70810554", +3328 => x"0b0b3374", +3329 => x"70810556", +3330 => x"34e63974", +3331 => x"76078306", +3332 => x"510b0b70", +3333 => x"db387575", +3334 => x"540b0b51", +3335 => x"72708405", +3336 => x"540b0b08", +3337 => x"71708405", +3338 => x"530b0b0c", +3339 => x"72708405", +3340 => x"540b0b08", +3341 => x"71708405", +3342 => x"530b0b0c", +3343 => x"72708405", +3344 => x"540b0b08", +3345 => x"71708405", +3346 => x"530b0b0c", +3347 => x"72708405", +3348 => x"540b0b08", +3349 => x"71708405", +3350 => x"530b0b0c", +3351 => x"f0720552", +3352 => x"0b0b718f", +3353 => x"26ffb538", +3354 => x"8372279c", +3355 => x"38727084", +3356 => x"05540b0b", +3357 => x"08717084", +3358 => x"05530b0b", +3359 => x"0cfc7205", +3360 => x"520b0b71", +3361 => x"8326e638", +3362 => x"70540b0b", +3363 => x"fee239fc", +3364 => x"3d0d7679", +3365 => x"71028c05", +3366 => x"9f053357", +3367 => x"55530b0b", +3368 => x"55837227", +3369 => x"8c387483", +3370 => x"06510b0b", +3371 => x"70802ea8", +3372 => x"38ff7205", +3373 => x"520b0b71", +3374 => x"ff2e9638", +3375 => x"73737081", +3376 => x"055534ff", +3377 => x"7205520b", +3378 => x"0b71ff2e", +3379 => x"098106ec", +3380 => x"3874800c", +3381 => x"863d0d04", +3382 => x"7474882b", +3383 => x"75077071", +3384 => x"902b0751", +3385 => x"540b0b51", +3386 => x"8f7227b0", +3387 => x"38727170", +3388 => x"8405530b", +3389 => x"0b0c7271", +3390 => x"70840553", +3391 => x"0b0b0c72", +3392 => x"71708405", +3393 => x"530b0b0c", +3394 => x"72717084", +3395 => x"05530b0b", +3396 => x"0cf07205", +3397 => x"520b0b71", +3398 => x"8f26d238", +3399 => x"83722795", +3400 => x"38727170", +3401 => x"8405530b", +3402 => x"0b0cfc72", +3403 => x"05520b0b", +3404 => x"718326ed", +3405 => x"3870530b", +3406 => x"0bfef639", +3407 => x"0404ef3d", +3408 => x"0d636567", +3409 => x"405d420b", +3410 => x"7b802e85", +3411 => x"ab386151", +3412 => x"eb3ff81c", +3413 => x"70847205", +3414 => x"0870fc06", +3415 => x"70628b05", +3416 => x"70f80641", +3417 => x"59455b5c", +3418 => x"41579674", +3419 => x"2782e238", +3420 => x"807b247e", +3421 => x"7c260759", +3422 => x"80540b0b", +3423 => x"78742e09", +3424 => x"810682c6", +3425 => x"38777b25", +3426 => x"82913877", +3427 => x"178191f0", +3428 => x"0b880508", +3429 => x"5e560b7c", +3430 => x"0b762e84", +3431 => x"ea388416", +3432 => x"0870fe06", +3433 => x"17847105", +3434 => x"08810651", +3435 => x"55550b73", +3436 => x"82a43874", +3437 => x"fc06597c", +3438 => x"762e858f", +3439 => x"3877195f", +3440 => x"0b0b7e7b", +3441 => x"25829438", +3442 => x"79810654", +3443 => x"0b0b7382", +3444 => x"dc387677", +3445 => x"08318471", +3446 => x"0508fc06", +3447 => x"565a7580", +3448 => x"2e93387c", +3449 => x"762e859c", +3450 => x"38741918", +3451 => x"590b0b78", +3452 => x"7b2584b0", +3453 => x"3879802e", +3454 => x"82b33877", +3455 => x"15567a0b", +3456 => x"762482a9", +3457 => x"388c1a08", +3458 => x"881b0871", +3459 => x"8c72050c", +3460 => x"8872050c", +3461 => x"55797659", +3462 => x"57881761", +3463 => x"fc055759", +3464 => x"0b75a426", +3465 => x"86ab387b", +3466 => x"79555593", +3467 => x"762780cf", +3468 => x"387b7084", +3469 => x"055d087c", +3470 => x"56790c74", +3471 => x"70840556", +3472 => x"088c180c", +3473 => x"9017540b", +3474 => x"0b9b7627", +3475 => x"b2387470", +3476 => x"84055608", +3477 => x"740c7470", +3478 => x"84055608", +3479 => x"94180c98", +3480 => x"17540b0b", +3481 => x"a3762797", +3482 => x"38747084", +3483 => x"05560874", +3484 => x"0c747084", +3485 => x"0556089c", +3486 => x"180ca017", +3487 => x"540b0b74", +3488 => x"70840556", +3489 => x"08747084", +3490 => x"05560c74", +3491 => x"70840556", +3492 => x"08747084", +3493 => x"05560c74", +3494 => x"08740c77", +3495 => x"7b31560b", +3496 => x"0b758f26", +3497 => x"80d13884", +3498 => x"17088106", +3499 => x"78078418", +3500 => x"0c771784", +3501 => x"71050881", +3502 => x"07847205", +3503 => x"0c540b0b", +3504 => x"6151fcf9", +3505 => x"3f881754", +3506 => x"0b0b7380", +3507 => x"0c933d0d", +3508 => x"04905bfd", +3509 => x"9b397856", +3510 => x"fdee398c", +3511 => x"16088817", +3512 => x"08718c72", +3513 => x"050c8872", +3514 => x"050c557e", +3515 => x"707c3157", +3516 => x"588f7627", +3517 => x"ffb1387a", +3518 => x"17841808", +3519 => x"81067c07", +3520 => x"84190c76", +3521 => x"81078472", +3522 => x"050c7671", +3523 => x"05847105", +3524 => x"08810784", +3525 => x"72050c55", +3526 => x"88055261", +3527 => x"51dad13f", +3528 => x"6151fc99", +3529 => x"3f881754", +3530 => x"0b0bff9e", +3531 => x"397d5261", +3532 => x"51ea963f", +3533 => x"80085980", +3534 => x"08802e81", +3535 => x"ab388008", +3536 => x"f8056084", +3537 => x"0508fe06", +3538 => x"61055557", +3539 => x"0b0b7674", +3540 => x"2e848d38", +3541 => x"fc18560b", +3542 => x"0b75a426", +3543 => x"81b0387b", +3544 => x"80085555", +3545 => x"93762780", +3546 => x"dc387470", +3547 => x"84055608", +3548 => x"80087084", +3549 => x"05800c0c", +3550 => x"80087570", +3551 => x"84055708", +3552 => x"71708405", +3553 => x"530b0b0c", +3554 => x"540b0b9b", +3555 => x"7627b638", +3556 => x"74708405", +3557 => x"56087470", +3558 => x"8405560c", +3559 => x"74708405", +3560 => x"56087470", +3561 => x"8405560c", +3562 => x"a3762799", +3563 => x"38747084", +3564 => x"05560874", +3565 => x"70840556", +3566 => x"0c747084", +3567 => x"05560874", +3568 => x"70840556", +3569 => x"0c747084", +3570 => x"05560874", +3571 => x"70840556", +3572 => x"0c747084", +3573 => x"05560874", +3574 => x"70840556", +3575 => x"0c740874", +3576 => x"0c7b5261", +3577 => x"51d9893f", +3578 => x"6151fad1", +3579 => x"3f78540b", +3580 => x"0b73800c", +3581 => x"933d0d04", +3582 => x"7d526151", +3583 => x"e8cb3f80", +3584 => x"08800c93", +3585 => x"3d0d0484", +3586 => x"160855fb", +3587 => x"a6397553", +3588 => x"0b0b7b52", +3589 => x"800851ff", +3590 => x"a4a23f7b", +3591 => x"526151d8", +3592 => x"cf3fc539", +3593 => x"8c160888", +3594 => x"1708718c", +3595 => x"72050c88", +3596 => x"72050c55", +3597 => x"8c1a0888", +3598 => x"1b08718c", +3599 => x"72050c88", +3600 => x"72050c55", +3601 => x"79795957", +3602 => x"fbcf3977", +3603 => x"19901c55", +3604 => x"550b730b", +3605 => x"7524faf0", +3606 => x"387a1770", +3607 => x"8191f00b", +3608 => x"88050c75", +3609 => x"7c318107", +3610 => x"8472050c", +3611 => x"5d841708", +3612 => x"81067b07", +3613 => x"84180c61", +3614 => x"51f9c23f", +3615 => x"8817540b", +3616 => x"0bfcc739", +3617 => x"74191890", +3618 => x"1c555d0b", +3619 => x"730b7d24", +3620 => x"fae3388c", +3621 => x"1a08881b", +3622 => x"08718c72", +3623 => x"050c8872", +3624 => x"050c5588", +3625 => x"1a61fc05", +3626 => x"57590b75", +3627 => x"a42681bc", +3628 => x"387b7955", +3629 => x"55937627", +3630 => x"80cf387b", +3631 => x"7084055d", +3632 => x"087c5679", +3633 => x"0c747084", +3634 => x"0556088c", +3635 => x"1b0c901a", +3636 => x"540b0b9b", +3637 => x"7627b238", +3638 => x"74708405", +3639 => x"5608740c", +3640 => x"74708405", +3641 => x"5608941b", +3642 => x"0c981a54", +3643 => x"0b0ba376", +3644 => x"27973874", +3645 => x"70840556", +3646 => x"08740c74", +3647 => x"70840556", +3648 => x"089c1b0c", +3649 => x"a01a540b", +3650 => x"0b747084", +3651 => x"05560874", +3652 => x"70840556", +3653 => x"0c747084", +3654 => x"05560874", +3655 => x"70840556", +3656 => x"0c740874", +3657 => x"0c7a1a70", +3658 => x"8191f00b", +3659 => x"88050c7d", +3660 => x"7c318107", +3661 => x"8472050c", +3662 => x"540b0b84", +3663 => x"1a088106", +3664 => x"7b07841b", +3665 => x"0c6151f7", +3666 => x"f43f7854", +3667 => x"0b0bfda1", +3668 => x"3975530b", +3669 => x"0b7b5278", +3670 => x"51ffa1e0", +3671 => x"3ffabc39", +3672 => x"841708fc", +3673 => x"06186058", +3674 => x"58fab039", +3675 => x"75530b0b", +3676 => x"7b527851", +3677 => x"ffa1c53f", +3678 => x"7a1a7081", +3679 => x"91f00b88", +3680 => x"050c7d7c", +3681 => x"31810784", +3682 => x"72050c54", +3683 => x"0b0b841a", +3684 => x"0881067b", +3685 => x"07841b0c", +3686 => x"ffab3970", +3687 => x"70707080", +3688 => x"0b819ab8", +3689 => x"0c765187", +3690 => x"853f8008", +3691 => x"530b0b80", +3692 => x"08ff2e89", +3693 => x"3872800c", +3694 => x"50505050", +3695 => x"04819ab8", +3696 => x"08540b0b", +3697 => x"73802eed", +3698 => x"38757471", +3699 => x"0c527280", +3700 => x"0c505050", +3701 => x"5004f93d", +3702 => x"0d797c55", +3703 => x"7b540b0b", +3704 => x"8e710522", +3705 => x"70902b70", +3706 => x"902c5557", +3707 => x"818a9408", +3708 => x"530b0b58", +3709 => x"5685e33f", +3710 => x"80085780", +3711 => x"0b800824", +3712 => x"933880d0", +3713 => x"16088008", +3714 => x"0580d017", +3715 => x"0c76800c", +3716 => x"893d0d04", +3717 => x"8c162283", +3718 => x"dfff0655", +3719 => x"0b0b748c", +3720 => x"17237680", +3721 => x"0c893d0d", +3722 => x"04fa3d0d", +3723 => x"788c7105", +3724 => x"2270882a", +3725 => x"70810651", +3726 => x"57585674", +3727 => x"b1388c16", +3728 => x"2283dfff", +3729 => x"06550b0b", +3730 => x"748c1723", +3731 => x"7a540b0b", +3732 => x"79530b0b", +3733 => x"8e162270", +3734 => x"902b7090", +3735 => x"2c540b0b", +3736 => x"56818a94", +3737 => x"08525682", +3738 => x"fe3f883d", +3739 => x"0d048254", +3740 => x"0b0b8053", +3741 => x"0b0b8e16", +3742 => x"2270902b", +3743 => x"70902c54", +3744 => x"0b0b5681", +3745 => x"8a940852", +3746 => x"5784913f", +3747 => x"8c162283", +3748 => x"dfff0655", +3749 => x"0b0b748c", +3750 => x"17237a54", +3751 => x"0b0b7953", +3752 => x"0b0b8e16", +3753 => x"2270902b", +3754 => x"70902c54", +3755 => x"0b0b5681", +3756 => x"8a940852", +3757 => x"5682b03f", +3758 => x"883d0d04", +3759 => x"f93d0d79", +3760 => x"7c557b54", +3761 => x"0b0b8e71", +3762 => x"05227090", +3763 => x"2b70902c", +3764 => x"5557818a", +3765 => x"9408530b", +3766 => x"0b585683", +3767 => x"bf3f8008", +3768 => x"578008ff", +3769 => x"2e9b388c", +3770 => x"1622a080", +3771 => x"07550b0b", +3772 => x"748c1723", +3773 => x"800880d0", +3774 => x"170c7680", +3775 => x"0c893d0d", +3776 => x"048c1622", +3777 => x"83dfff06", +3778 => x"550b0b74", +3779 => x"8c172376", +3780 => x"800c893d", +3781 => x"0d047070", +3782 => x"70748e71", +3783 => x"05227090", +3784 => x"2b70902c", +3785 => x"55515153", +3786 => x"0b0b818a", +3787 => x"94085181", +3788 => x"f43f5050", +3789 => x"5004fb3d", +3790 => x"0d777970", +3791 => x"72078306", +3792 => x"530b0b54", +3793 => x"0b0b5270", +3794 => x"99387173", +3795 => x"7308540b", +3796 => x"0b56540b", +3797 => x"0b717308", +3798 => x"2e80d038", +3799 => x"7375540b", +3800 => x"0b520b0b", +3801 => x"71337081", +3802 => x"ff065254", +3803 => x"0b0b7080", +3804 => x"2ea33872", +3805 => x"3355700b", +3806 => x"752e0981", +3807 => x"069a3881", +3808 => x"72058114", +3809 => x"71337081", +3810 => x"ff06540b", +3811 => x"0b56540b", +3812 => x"0b5270df", +3813 => x"38723355", +3814 => x"7381ff06", +3815 => x"7581ff06", +3816 => x"71713180", +3817 => x"0c525287", +3818 => x"3d0d0471", +3819 => x"0970f7fb", +3820 => x"fdff1406", +3821 => x"70f88482", +3822 => x"81800651", +3823 => x"51510b0b", +3824 => x"709d3884", +3825 => x"14841671", +3826 => x"08540b0b", +3827 => x"56540b0b", +3828 => x"7175082e", +3829 => x"d6387375", +3830 => x"540b0b52", +3831 => x"ff843980", +3832 => x"0b800c87", +3833 => x"3d0d04fb", +3834 => x"3d0d800b", +3835 => x"819ab80c", +3836 => x"7a530b0b", +3837 => x"79527851", +3838 => x"83c33f80", +3839 => x"08558008", +3840 => x"ff2e8838", +3841 => x"74800c87", +3842 => x"3d0d0481", +3843 => x"9ab80856", +3844 => x"0b0b7580", +3845 => x"2eee3877", +3846 => x"76710c54", +3847 => x"0b0b7480", +3848 => x"0c873d0d", +3849 => x"04707070", +3850 => x"70800b81", +3851 => x"9ab80c76", +3852 => x"5185db3f", +3853 => x"8008530b", +3854 => x"0b8008ff", +3855 => x"2e893872", +3856 => x"800c5050", +3857 => x"50500481", +3858 => x"9ab80854", +3859 => x"0b0b7380", +3860 => x"2eed3875", +3861 => x"74710c52", +3862 => x"72800c50", +3863 => x"50505004", +3864 => x"fc3d0d80", +3865 => x"0b819ab8", +3866 => x"0c785277", +3867 => x"51889c3f", +3868 => x"8008540b", +3869 => x"0b8008ff", +3870 => x"2e883873", +3871 => x"800c863d", +3872 => x"0d04819a", +3873 => x"b808550b", +3874 => x"0b74802e", +3875 => x"ee387675", +3876 => x"710c530b", +3877 => x"0b73800c", +3878 => x"863d0d04", +3879 => x"fb3d0d80", +3880 => x"0b819ab8", +3881 => x"0c7a530b", +3882 => x"0b795278", +3883 => x"5185e63f", +3884 => x"80085580", +3885 => x"08ff2e88", +3886 => x"3874800c", +3887 => x"873d0d04", +3888 => x"819ab808", +3889 => x"560b0b75", +3890 => x"802eee38", +3891 => x"7776710c", +3892 => x"540b0b74", +3893 => x"800c873d", +3894 => x"0d04fb3d", +3895 => x"0d800b81", +3896 => x"9ab80c7a", +3897 => x"530b0b79", +3898 => x"52785182", +3899 => x"cd3f8008", +3900 => x"558008ff", +3901 => x"2e883874", +3902 => x"800c873d", +3903 => x"0d04819a", +3904 => x"b808560b", +3905 => x"0b75802e", +3906 => x"ee387776", +3907 => x"710c540b", +3908 => x"0b74800c", +3909 => x"873d0d04", +3910 => x"810b800c", +3911 => x"04707281", +3912 => x"2e873880", +3913 => x"0b800c50", +3914 => x"04735181", +3915 => x"8a3f7070", +3916 => x"70819abc", +3917 => x"08510b0b", +3918 => x"708a3881", +3919 => x"9ac47081", +3920 => x"9abc0c51", +3921 => x"0b0b7075", +3922 => x"72055252", +3923 => x"ff530b0b", +3924 => x"7087fb80", +3925 => x"80268a38", +3926 => x"70819abc", +3927 => x"0c71530b", +3928 => x"0b72800c", +3929 => x"50505004", +3930 => x"70707070", +3931 => x"800b818a", +3932 => x"8808540b", +3933 => x"0b540b0b", +3934 => x"72812e9e", +3935 => x"3873819a", +3936 => x"c00cff8e", +3937 => x"863fff8c", +3938 => x"f73f8199", +3939 => x"f8528151", +3940 => x"ff90e53f", +3941 => x"80085187", +3942 => x"d53f7281", +3943 => x"9ac00cff", +3944 => x"8de93fff", +3945 => x"8cda3f81", +3946 => x"99f85281", +3947 => x"51ff90c8", +3948 => x"3f800851", +3949 => x"87b83f00", +3950 => x"ff3900ff", +3951 => x"39f53d0d", +3952 => x"7e60819a", +3953 => x"c008705b", +3954 => x"585b5b75", +3955 => x"80c63877", +3956 => x"7a25a338", +3957 => x"771b7033", +3958 => x"7081ff06", +3959 => x"58585975", +3960 => x"8a2e9a38", +3961 => x"7681ff06", +3962 => x"51ff8cfc", +3963 => x"3f811858", +3964 => x"790b7824", +3965 => x"df387980", +3966 => x"0c8d3d0d", +3967 => x"048d51ff", +3968 => x"8ce63f78", +3969 => x"337081ff", +3970 => x"065257ff", +3971 => x"8cda3f81", +3972 => x"1858dd39", +3973 => x"79557a54", +3974 => x"0b0b7d53", +3975 => x"0b0b8552", +3976 => x"8d3dfc05", +3977 => x"51ff8c9c", +3978 => x"3f800856", +3979 => x"86b93f7b", +3980 => x"80080c75", +3981 => x"800c8d3d", +3982 => x"0d04f63d", +3983 => x"0d7d7f81", +3984 => x"9ac00870", +3985 => x"5a585a5a", +3986 => x"7580ca38", +3987 => x"767925b6", +3988 => x"38761a56", +3989 => x"ff8bef3f", +3990 => x"80087634", +3991 => x"800b8008", +3992 => x"81ff0657", +3993 => x"580b758a", +3994 => x"2ea73875", +3995 => x"8d327030", +3996 => x"7080257a", +3997 => x"07515156", +3998 => x"0b0b75bf", +3999 => x"38811757", +4000 => x"780b7724", +4001 => x"cc387656", +4002 => x"0b0b7580", +4003 => x"0c8c3d0d", +4004 => x"048158d7", +4005 => x"39785579", +4006 => x"540b0b7c", +4007 => x"530b0b84", +4008 => x"528c3dfc", +4009 => x"0551ff8b", +4010 => x"9b3f8008", +4011 => x"5685b83f", +4012 => x"7a80080c", +4013 => x"75800c8c", +4014 => x"3d0d0481", +4015 => x"1756c939", +4016 => x"f93d0d79", +4017 => x"57819ac0", +4018 => x"08802eb2", +4019 => x"387651ff", +4020 => x"9dc13f7b", +4021 => x"567a5580", +4022 => x"08810554", +4023 => x"0b0b7653", +4024 => x"0b0b8252", +4025 => x"893dfc05", +4026 => x"51ff8ad8", +4027 => x"3f800857", +4028 => x"84f53f77", +4029 => x"80080c76", +4030 => x"800c893d", +4031 => x"0d0484e7", +4032 => x"3f850b80", +4033 => x"080cff0b", +4034 => x"800c893d", +4035 => x"0d04fb3d", +4036 => x"0d819ac0", +4037 => x"08705654", +4038 => x"0b0b7388", +4039 => x"3874800c", +4040 => x"873d0d04", +4041 => x"77530b0b", +4042 => x"8352873d", +4043 => x"fc0551ff", +4044 => x"8a923f80", +4045 => x"08540b0b", +4046 => x"84ad3f75", +4047 => x"80080c73", +4048 => x"800c873d", +4049 => x"0d04ff0b", +4050 => x"800c04fb", +4051 => x"3d0d7755", +4052 => x"819ac008", +4053 => x"802eae38", +4054 => x"7451ff9c", +4055 => x"b63f8008", +4056 => x"8105540b", +4057 => x"0b74530b", +4058 => x"0b875287", +4059 => x"3dfc0551", +4060 => x"ff89d13f", +4061 => x"80085583", +4062 => x"ee3f7580", +4063 => x"080c7480", +4064 => x"0c873d0d", +4065 => x"0483e03f", +4066 => x"850b8008", +4067 => x"0cff0b80", +4068 => x"0c873d0d", +4069 => x"04fa3d0d", +4070 => x"819ac008", +4071 => x"802ea738", +4072 => x"7a557954", +4073 => x"0b0b7853", +4074 => x"0b0b8652", +4075 => x"883dfc05", +4076 => x"51ff8990", +4077 => x"3f800856", +4078 => x"83ad3f76", +4079 => x"80080c75", +4080 => x"800c883d", +4081 => x"0d04839f", +4082 => x"3f9d0b80", +4083 => x"080cff0b", +4084 => x"800c883d", +4085 => x"0d04fb3d", +4086 => x"0d777956", +4087 => x"56807054", +4088 => x"0b0b540b", +4089 => x"0b737525", +4090 => x"9f387410", +4091 => x"1010f805", +4092 => x"52721670", +4093 => x"3370742b", +4094 => x"76078116", +4095 => x"f8165656", +4096 => x"56515174", +4097 => x"7324ea38", +4098 => x"73800c87", +4099 => x"3d0d04fc", +4100 => x"3d0d7678", +4101 => x"5555bc53", +4102 => x"0b0b8052", +4103 => x"7351e8ef", +4104 => x"3f845274", +4105 => x"51ffaf3f", +4106 => x"80087423", +4107 => x"84528415", +4108 => x"51ffa33f", +4109 => x"80088215", +4110 => x"23845288", +4111 => x"1551ff96", +4112 => x"3f800884", +4113 => x"150c8452", +4114 => x"8c1551ff", +4115 => x"893f8008", +4116 => x"88152384", +4117 => x"52901551", +4118 => x"fefc3f80", +4119 => x"088a1523", +4120 => x"84529415", +4121 => x"51feef3f", +4122 => x"80088c15", +4123 => x"23845298", +4124 => x"1551fee2", +4125 => x"3f80088e", +4126 => x"15238852", +4127 => x"9c1551fe", +4128 => x"d53f8008", +4129 => x"90150c86", +4130 => x"3d0d04e9", +4131 => x"3d0d6a81", +4132 => x"9ac00857", +4133 => x"570b7593", +4134 => x"3880c080", +4135 => x"0b84180c", +4136 => x"75ac180c", +4137 => x"75800c99", +4138 => x"3d0d0489", +4139 => x"3d70556a", +4140 => x"540b0b55", +4141 => x"8a52993d", +4142 => x"ffbc0551", +4143 => x"ff87853f", +4144 => x"80087753", +4145 => x"0b0b7552", +4146 => x"56fec43f", +4147 => x"81993f77", +4148 => x"80080c75", +4149 => x"800c993d", +4150 => x"0d04e93d", +4151 => x"0d695781", +4152 => x"9ac00880", +4153 => x"2ebb3876", +4154 => x"51ff99a7", +4155 => x"3f893d70", +4156 => x"56800881", +4157 => x"05557754", +4158 => x"0b0b568f", +4159 => x"52993dff", +4160 => x"bc0551ff", +4161 => x"86be3f80", +4162 => x"086b530b", +4163 => x"0b765257", +4164 => x"fdfd3f80", +4165 => x"d23f7780", +4166 => x"080c7680", +4167 => x"0c993d0d", +4168 => x"0480c43f", +4169 => x"850b8008", +4170 => x"0cff0b80", +4171 => x"0c993d0d", +4172 => x"04fc3d0d", +4173 => x"81540b0b", +4174 => x"819ac008", +4175 => x"88387380", +4176 => x"0c863d0d", +4177 => x"0476530b", +4178 => x"0b97b952", +4179 => x"863dfc05", +4180 => x"51ff85f0", +4181 => x"3f800854", +4182 => x"0b0b8c3f", +4183 => x"7480080c", +4184 => x"73800c86", +4185 => x"3d0d0481", +4186 => x"8a940880", +4187 => x"0c04f73d", +4188 => x"0d7b818a", +4189 => x"940882c8", +4190 => x"7105085a", +4191 => x"540b0b5a", +4192 => x"77802e80", +4193 => x"eb388188", +4194 => x"18841908", +4195 => x"ff058171", +4196 => x"2b595559", +4197 => x"80742481", +4198 => x"80388074", +4199 => x"2480c138", +4200 => x"73822b78", +4201 => x"71058805", +4202 => x"56568180", +4203 => x"19087706", +4204 => x"530b0b72", +4205 => x"802e80c3", +4206 => x"38781670", +4207 => x"08530b0b", +4208 => x"530b0b79", +4209 => x"51740853", +4210 => x"0b0b722d", +4211 => x"ff14fc17", +4212 => x"fc177981", +4213 => x"2c5a5757", +4214 => x"540b0b73", +4215 => x"8025cb38", +4216 => x"7708580b", +4217 => x"0b77ff9e", +4218 => x"38818a94", +4219 => x"08530b0b", +4220 => x"bc730508", +4221 => x"a9387951", +4222 => x"f7bd3f74", +4223 => x"08530b0b", +4224 => x"722dff14", +4225 => x"fc17fc17", +4226 => x"79812c5a", +4227 => x"5757540b", +4228 => x"0b738025", +4229 => x"ff9438c8", +4230 => x"398057fe", +4231 => x"fd397251", +4232 => x"bc730508", +4233 => x"530b0b72", +4234 => x"2d7951f7", +4235 => x"8a3f8c08", +4236 => x"028c0c70", +4237 => x"70707080", +4238 => x"530b0b8c", +4239 => x"088c0508", +4240 => x"528c0888", +4241 => x"050851ff", +4242 => x"8dd23f80", +4243 => x"0870800c", +4244 => x"540b0b50", +4245 => x"5050508c", +4246 => x"0c048c08", +4247 => x"028c0c70", +4248 => x"70707081", +4249 => x"530b0b8c", +4250 => x"088c0508", +4251 => x"528c0888", +4252 => x"050851ff", +4253 => x"8da63f80", +4254 => x"0870800c", +4255 => x"540b0b50", +4256 => x"5050508c", +4257 => x"0c047070", +4258 => x"819a800b", +4259 => x"fc057008", +4260 => x"52520b70", +4261 => x"ff2e9338", +4262 => x"702dfc72", +4263 => x"05700852", +4264 => x"520b70ff", +4265 => x"2e098106", +4266 => x"ef385050", +4267 => x"0404ff85", +4268 => x"e53f0400", +4269 => x"4379636c", +4270 => x"65732025", +4271 => x"640a0000", +4272 => x"48656c6c", +4273 => x"6f20776f", +4274 => x"726c6420", +4275 => x"310a0000", +4276 => x"48656c6c", +4277 => x"6f20776f", +4278 => x"726c6420", +4279 => x"320a0000", +4280 => x"0a000000", +4281 => x"20202020", +4282 => x"20202020", +4283 => x"20202020", +4284 => x"20202020", +4285 => x"30303030", +4286 => x"30303030", +4287 => x"30303030", +4288 => x"30303030", +4289 => x"000017e3", +4290 => x"0000138d", +4291 => x"0000138d", +4292 => x"000017d9", +4293 => x"0000138d", +4294 => x"0000138d", +4295 => x"0000138d", +4296 => x"0000138d", +4297 => x"0000138d", +4298 => x"0000138d", +4299 => x"00001364", +4300 => x"0000177e", +4301 => x"0000138d", +4302 => x"00001376", +4303 => x"000016ec", +4304 => x"0000138d", +4305 => x"000017af", +4306 => x"0000178a", +4307 => x"0000178a", +4308 => x"0000178a", +4309 => x"0000178a", +4310 => x"0000178a", +4311 => x"0000178a", +4312 => x"0000178a", +4313 => x"0000178a", +4314 => x"0000178a", +4315 => x"0000138d", +4316 => x"0000138d", +4317 => x"0000138d", +4318 => x"0000138d", +4319 => x"0000138d", +4320 => x"0000138d", +4321 => x"0000138d", +4322 => x"0000138d", +4323 => x"0000138d", +4324 => x"00001699", +4325 => x"00001326", +4326 => x"0000138d", +4327 => x"0000138d", +4328 => x"0000138d", +4329 => x"0000138d", +4330 => x"0000138d", +4331 => x"0000138d", +4332 => x"0000138d", +4333 => x"0000138d", +4334 => x"0000138d", +4335 => x"0000138d", +4336 => x"000012ec", +4337 => x"0000138d", +4338 => x"0000138d", +4339 => x"0000138d", +4340 => x"00001553", +4341 => x"0000138d", +4342 => x"00001015", +4343 => x"0000138d", +4344 => x"0000138d", +4345 => x"00001733", +4346 => x"0000138d", +4347 => x"0000138d", +4348 => x"0000138d", +4349 => x"0000138d", +4350 => x"0000138d", +4351 => x"0000138d", +4352 => x"0000138d", +4353 => x"0000138d", +4354 => x"0000138d", +4355 => x"0000138d", +4356 => x"00001699", +4357 => x"0000132a", +4358 => x"0000138d", +4359 => x"0000138d", +4360 => x"0000138d", +4361 => x"0000168e", +4362 => x"0000132a", +4363 => x"0000138d", +4364 => x"0000138d", +4365 => x"000015d8", +4366 => x"0000138d", +4367 => x"000015a8", +4368 => x"000012f0", +4369 => x"000015f7", +4370 => x"00001383", +4371 => x"0000138d", +4372 => x"00001553", +4373 => x"0000138d", +4374 => x"00001019", +4375 => x"0000138d", +4376 => x"0000138d", +4377 => x"000017ba", +4378 => x"62756720", +4379 => x"696e2076", +4380 => x"66707269", +4381 => x"6e74663a", +4382 => x"20626164", +4383 => x"20626173", +4384 => x"65000000", +4385 => x"30313233", +4386 => x"34353637", +4387 => x"38396162", +4388 => x"63646566", +4389 => x"00000000", +4390 => x"30313233", +4391 => x"34353637", +4392 => x"38394142", +4393 => x"43444546", +4394 => x"00000000", +4395 => x"286e756c", +4396 => x"6c290000", +4397 => x"432d5554", +4398 => x"462d3800", +4399 => x"432d534a", +4400 => x"49530000", +4401 => x"432d4555", +4402 => x"434a5000", +4403 => x"432d4a49", +4404 => x"53000000", +4405 => x"43000000", +4406 => x"2e000000", +4407 => x"49534f2d", +4408 => x"38383539", +4409 => x"2d310000", +4410 => x"64756d6d", +4411 => x"792e6578", +4412 => x"65000000", +4413 => x"00ffffff", +4414 => x"ff00ffff", +4415 => x"ffff00ff", +4416 => x"ffffff00", +4417 => x"00000000", +4418 => x"00000000", +4419 => x"00000000", +4420 => x"00004d08", +4421 => x"00004518", +4422 => x"00000000", +4423 => x"00004780", +4424 => x"000047dc", +4425 => x"00004838", +4426 => x"00000000", +4427 => x"00000000", +4428 => x"00000000", +4429 => x"00000000", +4430 => x"00000000", +4431 => x"00000000", +4432 => x"00000000", +4433 => x"00000000", +4434 => x"00000000", +4435 => x"000044d4", +4436 => x"00000000", +4437 => x"00000000", +4438 => x"00000000", +4439 => x"00000000", +4440 => x"00000000", +4441 => x"00000000", +4442 => x"00000000", +4443 => x"00000000", +4444 => x"00000000", +4445 => x"00000000", +4446 => x"00000000", +4447 => x"00000000", +4448 => x"00000000", +4449 => x"00000000", +4450 => x"00000000", +4451 => x"00000000", +4452 => x"00000000", +4453 => x"00000000", +4454 => x"00000000", +4455 => x"00000000", +4456 => x"00000000", +4457 => x"00000000", +4458 => x"00000000", +4459 => x"00000000", +4460 => x"00000000", +4461 => x"00000000", +4462 => x"00000000", +4463 => x"00000000", +4464 => x"00000001", +4465 => x"330eabcd", +4466 => x"1234e66d", +4467 => x"deec0005", +4468 => x"000b0000", +4469 => x"00000000", +4470 => x"00000000", +4471 => x"00000000", +4472 => x"00000000", +4473 => x"00000000", +4474 => x"00000000", +4475 => x"00000000", +4476 => x"00000000", +4477 => x"00000000", +4478 => x"00000000", +4479 => x"00000000", +4480 => x"00000000", +4481 => x"00000000", +4482 => x"00000000", +4483 => x"00000000", +4484 => x"00000000", +4485 => x"00000000", +4486 => x"00000000", +4487 => x"00000000", +4488 => x"00000000", +4489 => x"00000000", +4490 => x"00000000", +4491 => x"00000000", +4492 => x"00000000", +4493 => x"00000000", +4494 => x"00000000", +4495 => x"00000000", +4496 => x"00000000", +4497 => x"00000000", +4498 => x"00000000", +4499 => x"00000000", +4500 => x"00000000", +4501 => x"00000000", +4502 => x"00000000", +4503 => x"00000000", +4504 => x"00000000", +4505 => x"00000000", +4506 => x"00000000", +4507 => x"00000000", +4508 => x"00000000", +4509 => x"00000000", +4510 => x"00000000", +4511 => x"00000000", +4512 => x"00000000", +4513 => x"00000000", +4514 => x"00000000", +4515 => x"00000000", +4516 => x"00000000", +4517 => x"00000000", +4518 => x"00000000", +4519 => x"00000000", +4520 => x"00000000", +4521 => x"00000000", +4522 => x"00000000", +4523 => x"00000000", +4524 => x"00000000", +4525 => x"00000000", +4526 => x"00000000", +4527 => x"00000000", +4528 => x"00000000", +4529 => x"00000000", +4530 => x"00000000", +4531 => x"00000000", +4532 => x"00000000", +4533 => x"00000000", +4534 => x"00000000", +4535 => x"00000000", +4536 => x"00000000", +4537 => x"00000000", +4538 => x"00000000", +4539 => x"00000000", +4540 => x"00000000", +4541 => x"00000000", +4542 => x"00000000", +4543 => x"00000000", +4544 => x"00000000", +4545 => x"00000000", +4546 => x"00000000", +4547 => x"00000000", +4548 => x"00000000", +4549 => x"00000000", +4550 => x"00000000", +4551 => x"00000000", +4552 => x"00000000", +4553 => x"00000000", +4554 => x"00000000", +4555 => x"00000000", +4556 => x"00000000", +4557 => x"00000000", +4558 => x"00000000", +4559 => x"00000000", +4560 => x"00000000", +4561 => x"00000000", +4562 => x"00000000", +4563 => x"00000000", +4564 => x"00000000", +4565 => x"00000000", +4566 => x"00000000", +4567 => x"00000000", +4568 => x"00000000", +4569 => x"00000000", +4570 => x"00000000", +4571 => x"00000000", +4572 => x"00000000", +4573 => x"00000000", +4574 => x"00000000", +4575 => x"00000000", +4576 => x"00000000", +4577 => x"00000000", +4578 => x"00000000", +4579 => x"00000000", +4580 => x"00000000", +4581 => x"00000000", +4582 => x"00000000", +4583 => x"00000000", +4584 => x"00000000", +4585 => x"00000000", +4586 => x"00000000", +4587 => x"00000000", +4588 => x"00000000", +4589 => x"00000000", +4590 => x"00000000", +4591 => x"00000000", +4592 => x"00000000", +4593 => x"00000000", +4594 => x"00000000", +4595 => x"00000000", +4596 => x"00000000", +4597 => x"00000000", +4598 => x"00000000", +4599 => x"00000000", +4600 => x"00000000", +4601 => x"00000000", +4602 => x"00000000", +4603 => x"00000000", +4604 => x"00000000", +4605 => x"00000000", +4606 => x"00000000", +4607 => x"00000000", +4608 => x"00000000", +4609 => x"00000000", +4610 => x"00000000", +4611 => x"00000000", +4612 => x"00000000", +4613 => x"00000000", +4614 => x"00000000", +4615 => x"00000000", +4616 => x"00000000", +4617 => x"00000000", +4618 => x"00000000", +4619 => x"00000000", +4620 => x"00000000", +4621 => x"00000000", +4622 => x"00000000", +4623 => x"00000000", +4624 => x"00000000", +4625 => x"00000000", +4626 => x"00000000", +4627 => x"00000000", +4628 => x"00000000", +4629 => x"00000000", +4630 => x"00000000", +4631 => x"00000000", +4632 => x"00000000", +4633 => x"00000000", +4634 => x"00000000", +4635 => x"00000000", +4636 => x"00000000", +4637 => x"00000000", +4638 => x"00000000", +4639 => x"00000000", +4640 => x"00000000", +4641 => x"00000000", +4642 => x"00000000", +4643 => x"00000000", +4644 => x"00000000", +4645 => x"43000000", +4646 => x"00000000", +4647 => x"00000000", +4648 => x"00000000", +4649 => x"00000000", +4650 => x"00000000", +4651 => x"00000001", +4652 => x"000044dc", +4653 => x"00000000", +4654 => x"00000000", +4655 => x"00000000", +4656 => x"00000000", +4657 => x"00000000", +4658 => x"00000000", +4659 => x"00000000", +4660 => x"00000000", +4661 => x"00000000", +4662 => x"00000000", +4663 => x"00000000", +4664 => x"00000000", +4665 => x"ffffffff", +4666 => x"00000000", +4667 => x"00020000", +4668 => x"00000000", +4669 => x"00000000", +4670 => x"000048f0", +4671 => x"000048f0", +4672 => x"000048f8", +4673 => x"000048f8", +4674 => x"00004900", +4675 => x"00004900", +4676 => x"00004908", +4677 => x"00004908", +4678 => x"00004910", +4679 => x"00004910", +4680 => x"00004918", +4681 => x"00004918", +4682 => x"00004920", +4683 => x"00004920", +4684 => x"00004928", +4685 => x"00004928", +4686 => x"00004930", +4687 => x"00004930", +4688 => x"00004938", +4689 => x"00004938", +4690 => x"00004940", +4691 => x"00004940", +4692 => x"00004948", +4693 => x"00004948", +4694 => x"00004950", +4695 => x"00004950", +4696 => x"00004958", +4697 => x"00004958", +4698 => x"00004960", +4699 => x"00004960", +4700 => x"00004968", +4701 => x"00004968", +4702 => x"00004970", +4703 => x"00004970", +4704 => x"00004978", +4705 => x"00004978", +4706 => x"00004980", +4707 => x"00004980", +4708 => x"00004988", +4709 => x"00004988", +4710 => x"00004990", +4711 => x"00004990", +4712 => x"00004998", +4713 => x"00004998", +4714 => x"000049a0", +4715 => x"000049a0", +4716 => x"000049a8", +4717 => x"000049a8", +4718 => x"000049b0", +4719 => x"000049b0", +4720 => x"000049b8", +4721 => x"000049b8", +4722 => x"000049c0", +4723 => x"000049c0", +4724 => x"000049c8", +4725 => x"000049c8", +4726 => x"000049d0", +4727 => x"000049d0", +4728 => x"000049d8", +4729 => x"000049d8", +4730 => x"000049e0", +4731 => x"000049e0", +4732 => x"000049e8", +4733 => x"000049e8", +4734 => x"000049f0", +4735 => x"000049f0", +4736 => x"000049f8", +4737 => x"000049f8", +4738 => x"00004a00", +4739 => x"00004a00", +4740 => x"00004a08", +4741 => x"00004a08", +4742 => x"00004a10", +4743 => x"00004a10", +4744 => x"00004a18", +4745 => x"00004a18", +4746 => x"00004a20", +4747 => x"00004a20", +4748 => x"00004a28", +4749 => x"00004a28", +4750 => x"00004a30", +4751 => x"00004a30", +4752 => x"00004a38", +4753 => x"00004a38", +4754 => x"00004a40", +4755 => x"00004a40", +4756 => x"00004a48", +4757 => x"00004a48", +4758 => x"00004a50", +4759 => x"00004a50", +4760 => x"00004a58", +4761 => x"00004a58", +4762 => x"00004a60", +4763 => x"00004a60", +4764 => x"00004a68", +4765 => x"00004a68", +4766 => x"00004a70", +4767 => x"00004a70", +4768 => x"00004a78", +4769 => x"00004a78", +4770 => x"00004a80", +4771 => x"00004a80", +4772 => x"00004a88", +4773 => x"00004a88", +4774 => x"00004a90", +4775 => x"00004a90", +4776 => x"00004a98", +4777 => x"00004a98", +4778 => x"00004aa0", +4779 => x"00004aa0", +4780 => x"00004aa8", +4781 => x"00004aa8", +4782 => x"00004ab0", +4783 => x"00004ab0", +4784 => x"00004ab8", +4785 => x"00004ab8", +4786 => x"00004ac0", +4787 => x"00004ac0", +4788 => x"00004ac8", +4789 => x"00004ac8", +4790 => x"00004ad0", +4791 => x"00004ad0", +4792 => x"00004ad8", +4793 => x"00004ad8", +4794 => x"00004ae0", +4795 => x"00004ae0", +4796 => x"00004ae8", +4797 => x"00004ae8", +4798 => x"00004af0", +4799 => x"00004af0", +4800 => x"00004af8", +4801 => x"00004af8", +4802 => x"00004b00", +4803 => x"00004b00", +4804 => x"00004b08", +4805 => x"00004b08", +4806 => x"00004b10", +4807 => x"00004b10", +4808 => x"00004b18", +4809 => x"00004b18", +4810 => x"00004b20", +4811 => x"00004b20", +4812 => x"00004b28", +4813 => x"00004b28", +4814 => x"00004b30", +4815 => x"00004b30", +4816 => x"00004b38", +4817 => x"00004b38", +4818 => x"00004b40", +4819 => x"00004b40", +4820 => x"00004b48", +4821 => x"00004b48", +4822 => x"00004b50", +4823 => x"00004b50", +4824 => x"00004b58", +4825 => x"00004b58", +4826 => x"00004b60", +4827 => x"00004b60", +4828 => x"00004b68", +4829 => x"00004b68", +4830 => x"00004b70", +4831 => x"00004b70", +4832 => x"00004b78", +4833 => x"00004b78", +4834 => x"00004b80", +4835 => x"00004b80", +4836 => x"00004b88", +4837 => x"00004b88", +4838 => x"00004b90", +4839 => x"00004b90", +4840 => x"00004b98", +4841 => x"00004b98", +4842 => x"00004ba0", +4843 => x"00004ba0", +4844 => x"00004ba8", +4845 => x"00004ba8", +4846 => x"00004bb0", +4847 => x"00004bb0", +4848 => x"00004bb8", +4849 => x"00004bb8", +4850 => x"00004bc0", +4851 => x"00004bc0", +4852 => x"00004bc8", +4853 => x"00004bc8", +4854 => x"00004bd0", +4855 => x"00004bd0", +4856 => x"00004bd8", +4857 => x"00004bd8", +4858 => x"00004be0", +4859 => x"00004be0", +4860 => x"00004be8", +4861 => x"00004be8", +4862 => x"00004bf0", +4863 => x"00004bf0", +4864 => x"00004bf8", +4865 => x"00004bf8", +4866 => x"00004c00", +4867 => x"00004c00", +4868 => x"00004c08", +4869 => x"00004c08", +4870 => x"00004c10", +4871 => x"00004c10", +4872 => x"00004c18", +4873 => x"00004c18", +4874 => x"00004c20", +4875 => x"00004c20", +4876 => x"00004c28", +4877 => x"00004c28", +4878 => x"00004c30", +4879 => x"00004c30", +4880 => x"00004c38", +4881 => x"00004c38", +4882 => x"00004c40", +4883 => x"00004c40", +4884 => x"00004c48", +4885 => x"00004c48", +4886 => x"00004c50", +4887 => x"00004c50", +4888 => x"00004c58", +4889 => x"00004c58", +4890 => x"00004c60", +4891 => x"00004c60", +4892 => x"00004c68", +4893 => x"00004c68", +4894 => x"00004c70", +4895 => x"00004c70", +4896 => x"00004c78", +4897 => x"00004c78", +4898 => x"00004c80", +4899 => x"00004c80", +4900 => x"00004c88", +4901 => x"00004c88", +4902 => x"00004c90", +4903 => x"00004c90", +4904 => x"00004c98", +4905 => x"00004c98", +4906 => x"00004ca0", +4907 => x"00004ca0", +4908 => x"00004ca8", +4909 => x"00004ca8", +4910 => x"00004cb0", +4911 => x"00004cb0", +4912 => x"00004cb8", +4913 => x"00004cb8", +4914 => x"00004cc0", +4915 => x"00004cc0", +4916 => x"00004cc8", +4917 => x"00004cc8", +4918 => x"00004cd0", +4919 => x"00004cd0", +4920 => x"00004cd8", +4921 => x"00004cd8", +4922 => x"00004ce0", +4923 => x"00004ce0", +4924 => x"00004ce8", +4925 => x"00004ce8", +4926 => x"000044e8", +4927 => x"ffffffff", +4928 => x"00000000", +4929 => x"ffffffff", +4930 => x"00000000", + others => x"00000000" +); + +begin + +process (clk) +begin + if (clk'event and clk = '1') then + if (memAWriteEnable = '1') and (memBWriteEnable = '1') and (memAAddr=memBAddr) and (memAWrite/=memBWrite) then + report "write collision" severity failure; + end if; + + if (memAWriteEnable = '1') then + ram(conv_integer(memAAddr)) := memAWrite; + memARead <= memAWrite; + else + memARead <= ram(conv_integer(memAAddr)); + end if; + end if; +end process; + +process (clk) +begin + if (clk'event and clk = '1') then + if (memBWriteEnable = '1') then + ram(conv_integer(memBAddr)) := memBWrite; + memBRead <= memBWrite; + else + memBRead <= ram(conv_integer(memBAddr)); + end if; + end if; +end process; + + + + +end dualport_ram_arch; diff --git a/zpu/hdl/zpu3/src/dualport_ram_synplicity.vhd b/zpu/hdl/zpu3/src/dualport_ram_synplicity.vhd new file mode 100644 index 0000000..83a7de2 --- /dev/null +++ b/zpu/hdl/zpu3/src/dualport_ram_synplicity.vhd @@ -0,0 +1,5012 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + + +library zylin; +use zylin.zpu_config.all; +use zylin.zpupkg.all; + +entity dualport_ram is +port (clk : in std_logic; + memAWriteEnable : in std_logic; + memAAddr : in std_logic_vector(maxAddrBit downto minAddrBit); + memAWrite : in std_logic_vector(wordSize-1 downto 0); + memARead : out std_logic_vector(wordSize-1 downto 0); + memBWriteEnable : in std_logic; + memBAddr : in std_logic_vector(maxAddrBit downto minAddrBit); + memBWrite : in std_logic_vector(wordSize-1 downto 0); + memBRead : out std_logic_vector(wordSize-1 downto 0)); +end dualport_ram; + +architecture dualport_ram_arch of dualport_ram is + + +type ram_type is array(0 to ((2**(maxAddrBit+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); + + +--shared variable ram : ram_type := +signal ram : ram_type := +( +0 => x"800b0b0b", +1 => x"0b0b8070", +2 => x"0b0b818a", +3 => x"dc0c3a0b", +4 => x"0b80dab4", +5 => x"04000000", +6 => x"00000000", +7 => x"00000000", +8 => x"80088408", +9 => x"88080b0b", +10 => x"80db972d", +11 => x"880c840c", +12 => x"800c0400", +13 => x"00000000", +14 => x"00000000", +15 => x"00000000", +16 => x"71fd0608", +17 => x"72830609", +18 => x"81058205", +19 => x"832b0b2a", +20 => x"83ffff06", +21 => x"52810504", +22 => x"00000000", +23 => x"00000000", +24 => x"71fd0608", +25 => x"83ffff73", +26 => x"83060981", +27 => x"05820583", +28 => x"2b0b2b09", +29 => x"067383ff", +30 => x"ff0b0b0b", +31 => x"0b83a704", +32 => x"72098105", +33 => x"72057373", +34 => x"09060906", +35 => x"73097306", +36 => x"070a8106", +37 => x"53518105", +38 => x"04000000", +39 => x"00000000", +40 => x"72722473", +41 => x"732e0753", +42 => x"51810504", +43 => x"00000000", +44 => x"00000000", +45 => x"00000000", +46 => x"00000000", +47 => x"00000000", +48 => x"71737109", +49 => x"71068106", +50 => x"30720a10", +51 => x"0a720a10", +52 => x"0a31050a", +53 => x"81065151", +54 => x"53518105", +55 => x"04000000", +56 => x"72722673", +57 => x"732e0753", +58 => x"51810504", +59 => x"00000000", +60 => x"00000000", +61 => x"00000000", +62 => x"00000000", +63 => x"00000000", +64 => x"72ff0571", +65 => x"81050673", +66 => x"ff050972", +67 => x"74058005", +68 => x"06075350", +69 => x"50040000", +70 => x"00000000", +71 => x"00000000", +72 => x"0b0b0b8c", +73 => x"f8040000", +74 => x"00000000", +75 => x"00000000", +76 => x"00000000", +77 => x"00000000", +78 => x"00000000", +79 => x"00000000", +80 => x"720a722b", +81 => x"0a535181", +82 => x"05040000", +83 => x"00000000", +84 => x"00000000", +85 => x"00000000", +86 => x"00000000", +87 => x"00000000", +88 => x"72729f06", +89 => x"0981050b", +90 => x"0b0b88a7", +91 => x"05040000", +92 => x"00000000", +93 => x"00000000", +94 => x"00000000", +95 => x"00000000", +96 => x"72722aff", +97 => x"739f062a", +98 => x"0974090a", +99 => x"8106ff05", +100 => x"06075351", +101 => x"81050400", +102 => x"00000000", +103 => x"00000000", +104 => x"71718105", +105 => x"53510406", +106 => x"73830609", +107 => x"81058205", +108 => x"832b0b2b", +109 => x"0772fc06", +110 => x"0c515181", +111 => x"05040000", +112 => x"72098105", +113 => x"72050970", +114 => x"81050906", +115 => x"0a810653", +116 => x"51810504", +117 => x"00000000", +118 => x"00000000", +119 => x"00000000", +120 => x"72098105", +121 => x"72050970", +122 => x"81050906", +123 => x"0a098106", +124 => x"53518105", +125 => x"04000000", +126 => x"00000000", +127 => x"00000000", +128 => x"71098105", +129 => x"52810504", +130 => x"00000000", +131 => x"00000000", +132 => x"00000000", +133 => x"00000000", +134 => x"00000000", +135 => x"00000000", +136 => x"72720981", +137 => x"05055351", +138 => x"81050409", +139 => x"81058305", +140 => x"1010102b", +141 => x"0772fc06", +142 => x"0c515181", +143 => x"05040000", +144 => x"72097206", +145 => x"73730906", +146 => x"07535181", +147 => x"05040000", +148 => x"00000000", +149 => x"00000000", +150 => x"00000000", +151 => x"00000000", +152 => x"71fc0608", +153 => x"72830609", +154 => x"81058305", +155 => x"1010102a", +156 => x"81ff0652", +157 => x"81050400", +158 => x"00000000", +159 => x"00000000", +160 => x"71fc0608", +161 => x"0b0b818a", +162 => x"88738306", +163 => x"10100508", +164 => x"067381ff", +165 => x"06738306", +166 => x"0b0b0b84", +167 => x"ab040000", +168 => x"80088408", +169 => x"88087575", +170 => x"0b0b0bb3", +171 => x"912d5050", +172 => x"80085688", +173 => x"0c840c80", +174 => x"0c810551", +175 => x"04000000", +176 => x"80088408", +177 => x"88087575", +178 => x"0b0b0bb4", +179 => x"8a2d5050", +180 => x"80085688", +181 => x"0c840c80", +182 => x"0c810551", +183 => x"04000000", +184 => x"72097081", +185 => x"0509060a", +186 => x"8106ff05", +187 => x"70547181", +188 => x"05067309", +189 => x"72740580", +190 => x"05060753", +191 => x"50500400", +192 => x"72097081", +193 => x"0509060a", +194 => x"098106ff", +195 => x"05705471", +196 => x"81050673", +197 => x"09727405", +198 => x"80050607", +199 => x"53505004", +200 => x"05800504", +201 => x"00000000", +202 => x"00000000", +203 => x"00000000", +204 => x"00000000", +205 => x"00000000", +206 => x"00000000", +207 => x"00000000", +208 => x"810b0b0b", +209 => x"818ad80c", +210 => x"51810504", +211 => x"00000000", +212 => x"00000000", +213 => x"00000000", +214 => x"00000000", +215 => x"00000000", +216 => x"72830610", +217 => x"10728306", +218 => x"0710100b", +219 => x"0b818a98", +220 => x"05080400", +221 => x"00000000", +222 => x"00000000", +223 => x"00000000", +224 => x"00000000", +225 => x"00000000", +226 => x"00000000", +227 => x"00000000", +228 => x"00000000", +229 => x"00000000", +230 => x"00000000", +231 => x"00000000", +232 => x"02840572", +233 => x"10100552", +234 => x"81050400", +235 => x"00000000", +236 => x"00000000", +237 => x"00000000", +238 => x"00000000", +239 => x"00000000", +240 => x"00000000", +241 => x"00000000", +242 => x"00000000", +243 => x"00000000", +244 => x"00000000", +245 => x"00000000", +246 => x"00000000", +247 => x"00000000", +248 => x"71710571", +249 => x"81055351", +250 => x"04000000", +251 => x"00000000", +252 => x"00000000", +253 => x"00000000", +254 => x"00000000", +255 => x"00000000", +256 => x"8db33f80", +257 => x"f39e3f04", +258 => x"10101010", +259 => x"10101010", +260 => x"10101010", +261 => x"10101010", +262 => x"10101010", +263 => x"10101010", +264 => x"10101010", +265 => x"10101053", +266 => x"51810504", +267 => x"72fc0608", +268 => x"81ff0a06", +269 => x"72fc0670", +270 => x"5408fe80", +271 => x"0a060772", +272 => x"0c515181", +273 => x"050472fc", +274 => x"06080a10", +275 => x"10101010", +276 => x"1010100a", +277 => x"87fc8080", +278 => x"0672fc06", +279 => x"08f883ff", +280 => x"ff060772", +281 => x"fc060c51", +282 => x"51810504", +283 => x"72fc0608", +284 => x"0a101010", +285 => x"10101010", +286 => x"10101010", +287 => x"10101010", +288 => x"100a83fe", +289 => x"800672fc", +290 => x"0608fc81", +291 => x"ff060772", +292 => x"fc060c51", +293 => x"51810504", +294 => x"72fc0608", +295 => x"0a101010", +296 => x"10101010", +297 => x"10101010", +298 => x"10101010", +299 => x"10101010", +300 => x"10101010", +301 => x"100a81ff", +302 => x"0672fc06", +303 => x"08fe8006", +304 => x"0772fc06", +305 => x"0c515181", +306 => x"050472fc", +307 => x"06081010", +308 => x"10101010", +309 => x"101081ff", +310 => x"0a0672fc", +311 => x"0608fe80", +312 => x"0a060772", +313 => x"fc060c51", +314 => x"51810504", +315 => x"72fc0608", +316 => x"87fc8080", +317 => x"0672fc06", +318 => x"705408f8", +319 => x"83ffff06", +320 => x"07720c51", +321 => x"51810504", +322 => x"72fc0608", +323 => x"0a101010", +324 => x"10101010", +325 => x"100a83fe", +326 => x"800672fc", +327 => x"0608fc81", +328 => x"ff060772", +329 => x"fc060c51", +330 => x"51810504", +331 => x"72fc0608", +332 => x"0a101010", +333 => x"10101010", +334 => x"10101010", +335 => x"10101010", +336 => x"100a81ff", +337 => x"0672fc06", +338 => x"08fe8006", +339 => x"0772fc06", +340 => x"0c515181", +341 => x"050472fc", +342 => x"06081010", +343 => x"10101010", +344 => x"10101010", +345 => x"10101010", +346 => x"101081ff", +347 => x"0a0672fc", +348 => x"0608fe80", +349 => x"0a060772", +350 => x"fc060c51", +351 => x"51810504", +352 => x"72fc0608", +353 => x"10101010", +354 => x"10101010", +355 => x"87fc8080", +356 => x"0672fc06", +357 => x"08f883ff", +358 => x"ff060772", +359 => x"fc060c51", +360 => x"51810504", +361 => x"72fc0608", +362 => x"83fe8006", +363 => x"72fc0670", +364 => x"5408fc81", +365 => x"ff060772", +366 => x"0c515181", +367 => x"050472fc", +368 => x"06080a10", +369 => x"10101010", +370 => x"1010100a", +371 => x"81ff0672", +372 => x"fc0608fe", +373 => x"80060772", +374 => x"fc060c51", +375 => x"51810504", +376 => x"72fc0608", +377 => x"10101010", +378 => x"10101010", +379 => x"10101010", +380 => x"10101010", +381 => x"10101010", +382 => x"10101010", +383 => x"81ff0a06", +384 => x"72fc0608", +385 => x"fe800a06", +386 => x"0772fc06", +387 => x"0c515181", +388 => x"050472fc", +389 => x"06081010", +390 => x"10101010", +391 => x"10101010", +392 => x"10101010", +393 => x"101087fc", +394 => x"80800672", +395 => x"fc0608f8", +396 => x"83ffff06", +397 => x"0772fc06", +398 => x"0c515181", +399 => x"050472fc", +400 => x"06081010", +401 => x"10101010", +402 => x"101083fe", +403 => x"800672fc", +404 => x"0608fc81", +405 => x"ff060772", +406 => x"fc060c51", +407 => x"51810504", +408 => x"72fc0608", +409 => x"81ff0672", +410 => x"fc067054", +411 => x"08fe8006", +412 => x"07720c51", +413 => x"51810504", +414 => x"72728072", +415 => x"8106ff05", +416 => x"09720605", +417 => x"71105272", +418 => x"0a100a53", +419 => x"728106ff", +420 => x"05097206", +421 => x"05711052", +422 => x"720a100a", +423 => x"53728106", +424 => x"ff050972", +425 => x"06057110", +426 => x"52720a10", +427 => x"0a537281", +428 => x"06ff0509", +429 => x"72060571", +430 => x"1052720a", +431 => x"100a5372", +432 => x"8106ff05", +433 => x"09720605", +434 => x"71105272", +435 => x"0a100a53", +436 => x"728106ff", +437 => x"05097206", +438 => x"05711052", +439 => x"720a100a", +440 => x"53728106", +441 => x"ff050972", +442 => x"06057110", +443 => x"52720a10", +444 => x"0a537281", +445 => x"06ff0509", +446 => x"72060571", +447 => x"1052720a", +448 => x"100a5372", +449 => x"83a13772", +450 => x"8106ff05", +451 => x"09720605", +452 => x"71105272", +453 => x"0a100a53", +454 => x"728106ff", +455 => x"05097206", +456 => x"05711052", +457 => x"720a100a", +458 => x"53728106", +459 => x"ff050972", +460 => x"06057110", +461 => x"52720a10", +462 => x"0a537281", +463 => x"06ff0509", +464 => x"72060571", +465 => x"1052720a", +466 => x"100a5372", +467 => x"8106ff05", +468 => x"09720605", +469 => x"71105272", +470 => x"0a100a53", +471 => x"728106ff", +472 => x"05097206", +473 => x"05711052", +474 => x"720a100a", +475 => x"53728106", +476 => x"ff050972", +477 => x"06057110", +478 => x"52720a10", +479 => x"0a537281", +480 => x"06ff0509", +481 => x"72060571", +482 => x"1052720a", +483 => x"100a5372", +484 => x"82953772", +485 => x"8106ff05", +486 => x"09720605", +487 => x"71105272", +488 => x"0a100a53", +489 => x"728106ff", +490 => x"05097206", +491 => x"05711052", +492 => x"720a100a", +493 => x"53728106", +494 => x"ff050972", +495 => x"06057110", +496 => x"52720a10", +497 => x"0a537281", +498 => x"06ff0509", +499 => x"72060571", +500 => x"1052720a", +501 => x"100a5372", +502 => x"8106ff05", +503 => x"09720605", +504 => x"71105272", +505 => x"0a100a53", +506 => x"728106ff", +507 => x"05097206", +508 => x"05711052", +509 => x"720a100a", +510 => x"53728106", +511 => x"ff050972", +512 => x"06057110", +513 => x"52720a10", +514 => x"0a537281", +515 => x"06ff0509", +516 => x"72060571", +517 => x"1052720a", +518 => x"100a5372", +519 => x"81893772", +520 => x"8106ff05", +521 => x"09720605", +522 => x"71105272", +523 => x"0a100a53", +524 => x"728106ff", +525 => x"05097206", +526 => x"05711052", +527 => x"720a100a", +528 => x"53728106", +529 => x"ff050972", +530 => x"06057110", +531 => x"52720a10", +532 => x"0a537281", +533 => x"06ff0509", +534 => x"72060571", +535 => x"1052720a", +536 => x"100a5372", +537 => x"8106ff05", +538 => x"09720605", +539 => x"71105272", +540 => x"0a100a53", +541 => x"728106ff", +542 => x"05097206", +543 => x"05711052", +544 => x"720a100a", +545 => x"53728106", +546 => x"ff050972", +547 => x"06057110", +548 => x"52720a10", +549 => x"0a537281", +550 => x"06ff0509", +551 => x"72060571", +552 => x"1052720a", +553 => x"100a5351", +554 => x"51535181", +555 => x"05043c04", +556 => x"70700b0b", +557 => x"819acc08", +558 => x"52841208", +559 => x"70810651", +560 => x"51700970", +561 => x"81050906", +562 => x"0a098106", +563 => x"ff0509e9", +564 => x"0bf70506", +565 => x"84010505", +566 => x"04710881", +567 => x"ff06800c", +568 => x"50500470", +569 => x"700b0b81", +570 => x"9acc0852", +571 => x"84120870", +572 => x"0a100a70", +573 => x"81065151", +574 => x"51700970", +575 => x"81050906", +576 => x"0a098106", +577 => x"ff0509e4", +578 => x"0bf70506", +579 => x"84010505", +580 => x"0473720c", +581 => x"50500481", +582 => x"8ad80809", +583 => x"70810509", +584 => x"060a8106", +585 => x"ff0509b0", +586 => x"0bf70506", +587 => x"84010505", +588 => x"04838080", +589 => x"0b0b0b81", +590 => x"9acc0c82", +591 => x"a0800b0b", +592 => x"0b819ad0", +593 => x"0c829080", +594 => x"0b819ae0", +595 => x"0c0b0b81", +596 => x"9ad40b81", +597 => x"9ae40c04", +598 => x"f8808080", +599 => x"a40b0b0b", +600 => x"819acc0c", +601 => x"f8808082", +602 => x"800b0b0b", +603 => x"819ad00c", +604 => x"f8808084", +605 => x"800b819a", +606 => x"e00cf880", +607 => x"8080940b", +608 => x"819ae40c", +609 => x"f8808080", +610 => x"9c0b819a", +611 => x"dc0cf880", +612 => x"8080a00b", +613 => x"819ae80c", +614 => x"04f23d0d", +615 => x"600b0b81", +616 => x"9ad00856", +617 => x"5d82750c", +618 => x"8059805a", +619 => x"800b8f3d", +620 => x"71101017", +621 => x"70085957", +622 => x"5d5b8076", +623 => x"81ff067c", +624 => x"832b5658", +625 => x"5276537b", +626 => x"519ede3f", +627 => x"7d7f7a72", +628 => x"077c7207", +629 => x"71716081", +630 => x"05415f5d", +631 => x"5b595755", +632 => x"7a8724ff", +633 => x"050980ce", +634 => x"0bf70506", +635 => x"84010505", +636 => x"040b0b81", +637 => x"9ad0087b", +638 => x"10101170", +639 => x"08585155", +640 => x"807681ff", +641 => x"067c832b", +642 => x"56585276", +643 => x"537b519e", +644 => x"983f7d7f", +645 => x"7a72077c", +646 => x"72077171", +647 => x"60810541", +648 => x"5f5d5b59", +649 => x"5755877b", +650 => x"25ff0509", +651 => x"c40bf705", +652 => x"06840105", +653 => x"0504767d", +654 => x"0c77841e", +655 => x"0c7c800c", +656 => x"903d0d04", +657 => x"7070819a", +658 => x"d8335170", +659 => x"09708105", +660 => x"09060a09", +661 => x"8106ff05", +662 => x"0980d60b", +663 => x"f7050684", +664 => x"01050504", +665 => x"818ae408", +666 => x"70085252", +667 => x"70097081", +668 => x"0509060a", +669 => x"8106ff05", +670 => x"09b10bf7", +671 => x"05068401", +672 => x"05050484", +673 => x"12818ae4", +674 => x"0c702d81", +675 => x"8ae40870", +676 => x"08525270", +677 => x"09708105", +678 => x"09060a09", +679 => x"8106ff05", +680 => x"09e10bf7", +681 => x"05068401", +682 => x"05050481", +683 => x"0b819ad8", +684 => x"34505004", +685 => x"04700b0b", +686 => x"819ac808", +687 => x"09708105", +688 => x"09060a81", +689 => x"06ff0509", +690 => x"a50bf705", +691 => x"06840105", +692 => x"05040b0b", +693 => x"0b0b8009", +694 => x"70810509", +695 => x"060a0981", +696 => x"06ff0509", +697 => x"8b0bf705", +698 => x"06840105", +699 => x"05045004", +700 => x"0b0b819a", +701 => x"c8510b0b", +702 => x"0bea853f", +703 => x"50040470", +704 => x"70028f05", +705 => x"33527109", +706 => x"81058a05", +707 => x"09708105", +708 => x"09060a81", +709 => x"06ff0509", +710 => x"910bf705", +711 => x"06840105", +712 => x"05047151", +713 => x"fbbd3f50", +714 => x"50048d51", +715 => x"fbb53f71", +716 => x"51fbb03f", +717 => x"505004cd", +718 => x"3d0db63d", +719 => x"70708405", +720 => x"520895ff", +721 => x"5d56a63d", +722 => x"5f5d8075", +723 => x"70810557", +724 => x"33765c55", +725 => x"59730981", +726 => x"05790509", +727 => x"70810509", +728 => x"060a8106", +729 => x"ff050981", +730 => x"ad0bf705", +731 => x"06840105", +732 => x"05048f3d", +733 => x"5c730981", +734 => x"05a50509", +735 => x"70810509", +736 => x"060a0981", +737 => x"06ff0509", +738 => x"819c0bf7", +739 => x"05068401", +740 => x"05050479", +741 => x"7081055b", +742 => x"33547309", +743 => x"810580e4", +744 => x"05097081", +745 => x"0509060a", +746 => x"8106ff05", +747 => x"0982ee0b", +748 => x"f7050684", +749 => x"01050504", +750 => x"7380e424", +751 => x"ff050981", +752 => x"900bf705", +753 => x"06840105", +754 => x"05047309", +755 => x"810580e3", +756 => x"05097081", +757 => x"0509060a", +758 => x"8106ff05", +759 => x"09bf0bf7", +760 => x"05068401", +761 => x"05050480", +762 => x"52a5517a", +763 => x"2d805273", +764 => x"517a2d82", +765 => x"19597970", +766 => x"81055b33", +767 => x"54730970", +768 => x"81050906", +769 => x"0a098106", +770 => x"ff0509fe", +771 => x"e80bf705", +772 => x"06840105", +773 => x"05047880", +774 => x"0cb53d0d", +775 => x"047c841e", +776 => x"83123356", +777 => x"5e578052", +778 => x"73517a2d", +779 => x"81197a70", +780 => x"81055c33", +781 => x"55597309", +782 => x"70810509", +783 => x"060a0981", +784 => x"06ff0509", +785 => x"feaf0bf7", +786 => x"05068401", +787 => x"050504c6", +788 => x"39730981", +789 => x"0580f305", +790 => x"09708105", +791 => x"09060a09", +792 => x"8106ff05", +793 => x"09ff800b", +794 => x"f7050684", +795 => x"01050504", +796 => x"7c841e71", +797 => x"08595e56", +798 => x"80773356", +799 => x"56740981", +800 => x"05760509", +801 => x"70810509", +802 => x"060a8106", +803 => x"ff0509aa", +804 => x"0bf70506", +805 => x"84010505", +806 => x"04811670", +807 => x"1870335a", +808 => x"55567709", +809 => x"70810509", +810 => x"060a0981", +811 => x"06ff0509", +812 => x"e80bf705", +813 => x"06840105", +814 => x"0504ff16", +815 => x"55807625", +816 => x"ff0509fe", +817 => x"b10bf705", +818 => x"06840105", +819 => x"05047670", +820 => x"81055833", +821 => x"58805277", +822 => x"517a2d81", +823 => x"1975ff17", +824 => x"57575980", +825 => x"7625ff05", +826 => x"09fe8b0b", +827 => x"f7050684", +828 => x"01050504", +829 => x"76708105", +830 => x"58335880", +831 => x"5277517a", +832 => x"2d811975", +833 => x"ff175757", +834 => x"59758024", +835 => x"ff0509ff", +836 => x"bd0bf705", +837 => x"06840105", +838 => x"0504fdda", +839 => x"397c841e", +840 => x"71087071", +841 => x"9f2c5953", +842 => x"595e5680", +843 => x"7524ff05", +844 => x"0981f80b", +845 => x"f7050684", +846 => x"01050504", +847 => x"757e7d58", +848 => x"59558057", +849 => x"74098105", +850 => x"77050970", +851 => x"81050906", +852 => x"0a098106", +853 => x"ff050980", +854 => x"f40bf705", +855 => x"06840105", +856 => x"0504b07c", +857 => x"3402b905", +858 => x"567b0981", +859 => x"05760509", +860 => x"70810509", +861 => x"060a8106", +862 => x"ff0509b3", +863 => x"0bf70506", +864 => x"84010505", +865 => x"04ff1656", +866 => x"75787081", +867 => x"055a3b81", +868 => x"17577b09", +869 => x"81057605", +870 => x"09708105", +871 => x"09060a09", +872 => x"8106ff05", +873 => x"09df0bf7", +874 => x"05068401", +875 => x"05050480", +876 => x"7834767e", +877 => x"ff125758", +878 => x"56758024", +879 => x"ff0509fe", +880 => x"8d0bf705", +881 => x"06840105", +882 => x"0504fcaa", +883 => x"398a7536", +884 => x"0b0b80fb", +885 => x"fc055473", +886 => x"76708105", +887 => x"583b8a75", +888 => x"35557409", +889 => x"70810509", +890 => x"060a8106", +891 => x"ff0509fe", +892 => x"f80bf705", +893 => x"06840105", +894 => x"05048a75", +895 => x"360b0b80", +896 => x"fbfc0554", +897 => x"73767081", +898 => x"05583b8a", +899 => x"75355574", +900 => x"09708105", +901 => x"09060a09", +902 => x"8106ff05", +903 => x"09ffae0b", +904 => x"f7050684", +905 => x"01050504", +906 => x"febf3974", +907 => x"527653b5", +908 => x"3dffb805", +909 => x"5195c73f", +910 => x"a43d0856", +911 => x"fdfe3970", +912 => x"80c10b81", +913 => x"e9983480", +914 => x"0b81eaf0", +915 => x"0c70800c", +916 => x"50047070", +917 => x"800b81e9", +918 => x"98335252", +919 => x"70098105", +920 => x"80c10509", +921 => x"70810509", +922 => x"060a8106", +923 => x"ff0509a0", +924 => x"0bf70506", +925 => x"84010505", +926 => x"047181ea", +927 => x"f0080781", +928 => x"eaf00c80", +929 => x"c20b81e9", +930 => x"9c347080", +931 => x"0c505004", +932 => x"810b81ea", +933 => x"f0080781", +934 => x"eaf00c80", +935 => x"c20b81e9", +936 => x"9c347080", +937 => x"0c505004", +938 => x"70707070", +939 => x"7570088a", +940 => x"05535381", +941 => x"e9983351", +942 => x"70098105", +943 => x"80c10509", +944 => x"70810509", +945 => x"060a8106", +946 => x"ff0509a9", +947 => x"0bf70506", +948 => x"84010505", +949 => x"04730970", +950 => x"81050906", +951 => x"0a098106", +952 => x"ff0509cf", +953 => x"0bf70506", +954 => x"84010505", +955 => x"0470800c", +956 => x"50505050", +957 => x"04ff1270", +958 => x"81e99408", +959 => x"31740c80", +960 => x"0c505050", +961 => x"5004fc3d", +962 => x"0d81e9a0", +963 => x"08557409", +964 => x"70810509", +965 => x"060a8106", +966 => x"ff050994", +967 => x"0bf70506", +968 => x"84010505", +969 => x"04767508", +970 => x"710c81e9", +971 => x"a0085654", +972 => x"8c155381", +973 => x"e9940852", +974 => x"8a5190ac", +975 => x"3f73800c", +976 => x"863d0d04", +977 => x"fb3d0d77", +978 => x"70085656", +979 => x"b05381e9", +980 => x"a0085274", +981 => x"51acb53f", +982 => x"850b8c17", +983 => x"0c850b8c", +984 => x"160c7508", +985 => x"750c81e9", +986 => x"a0085473", +987 => x"09708105", +988 => x"09060a81", +989 => x"06ff0509", +990 => x"920bf705", +991 => x"06840105", +992 => x"05047308", +993 => x"750c81e9", +994 => x"a008548c", +995 => x"145381e9", +996 => x"9408528a", +997 => x"518fd13f", +998 => x"84150809", +999 => x"70810509", +1000 => x"060a0981", +1001 => x"06ff0509", +1002 => x"b50bf705", +1003 => x"06840105", +1004 => x"0504860b", +1005 => x"8c160c88", +1006 => x"15528816", +1007 => x"08518dd3", +1008 => x"3f81e9a0", +1009 => x"08700876", +1010 => x"0c548c15", +1011 => x"7054548a", +1012 => x"52730851", +1013 => x"8f923f73", +1014 => x"800c873d", +1015 => x"0d047508", +1016 => x"54b05373", +1017 => x"527551ab", +1018 => x"a33f7380", +1019 => x"0c873d0d", +1020 => x"04e13d0d", +1021 => x"b05196c2", +1022 => x"3f800881", +1023 => x"e9900cb0", +1024 => x"5196b73f", +1025 => x"800881e9", +1026 => x"a00c81e9", +1027 => x"90088008", +1028 => x"0c800b80", +1029 => x"0884050c", +1030 => x"820b8008", +1031 => x"88050ca8", +1032 => x"0b80088c", +1033 => x"050c9f53", +1034 => x"0b0b80fc", +1035 => x"88528008", +1036 => x"900551aa", +1037 => x"d73f993d", +1038 => x"5c9f530b", +1039 => x"0b80fca8", +1040 => x"527b51aa", +1041 => x"c73f8a0b", +1042 => x"81a7d80c", +1043 => x"0b0b8186", +1044 => x"cc51f5e3", +1045 => x"3f0b0b80", +1046 => x"fcc851f5", +1047 => x"da3f0b0b", +1048 => x"8186cc51", +1049 => x"f5d13f81", +1050 => x"8aec0809", +1051 => x"70810509", +1052 => x"060a8106", +1053 => x"ff05098a", +1054 => x"ef0bf705", +1055 => x"06840105", +1056 => x"05040b0b", +1057 => x"80fcf851", +1058 => x"f5ad3f0b", +1059 => x"0b8186cc", +1060 => x"51f5a43f", +1061 => x"818ae808", +1062 => x"520b0b80", +1063 => x"fda451f5", +1064 => x"963f8051", +1065 => x"80c5a13f", +1066 => x"8008819a", +1067 => x"f80c810b", +1068 => x"923d5c58", +1069 => x"800b818a", +1070 => x"e80825ff", +1071 => x"05098492", +1072 => x"0bf70506", +1073 => x"84010505", +1074 => x"048e3d5d", +1075 => x"80c10b81", +1076 => x"e9983481", +1077 => x"0b81eaf0", +1078 => x"0c80c20b", +1079 => x"81e99c34", +1080 => x"825e835a", +1081 => x"9f530b0b", +1082 => x"80fdd452", +1083 => x"7a51a99c", +1084 => x"3f815f80", +1085 => x"7b537c52", +1086 => x"558eba3f", +1087 => x"80080981", +1088 => x"05750509", +1089 => x"70810509", +1090 => x"060a0981", +1091 => x"06ff0509", +1092 => x"8b0bf705", +1093 => x"06840105", +1094 => x"05048155", +1095 => x"7481eaf0", +1096 => x"0c7d7057", +1097 => x"55748325", +1098 => x"ff0509b4", +1099 => x"0bf70506", +1100 => x"84010505", +1101 => x"04741010", +1102 => x"15fd0540", +1103 => x"a13dffbc", +1104 => x"05538352", +1105 => x"75518ca0", +1106 => x"3f811e70", +1107 => x"5f705755", +1108 => x"837524ff", +1109 => x"0509de0b", +1110 => x"f7050684", +1111 => x"01050504", +1112 => x"7f547453", +1113 => x"819afc52", +1114 => x"81e9a851", +1115 => x"8c863f81", +1116 => x"e9a00870", +1117 => x"085757b0", +1118 => x"53765275", +1119 => x"51a88d3f", +1120 => x"850b8c18", +1121 => x"0c850b8c", +1122 => x"170c7608", +1123 => x"760c81e9", +1124 => x"a0085574", +1125 => x"09708105", +1126 => x"09060a81", +1127 => x"06ff0509", +1128 => x"920bf705", +1129 => x"06840105", +1130 => x"05047408", +1131 => x"760c81e9", +1132 => x"a008558c", +1133 => x"155381e9", +1134 => x"9408528a", +1135 => x"518ba93f", +1136 => x"84160809", +1137 => x"70810509", +1138 => x"060a0981", +1139 => x"06ff0509", +1140 => x"889f0bf7", +1141 => x"05068401", +1142 => x"05050486", +1143 => x"0b8c170c", +1144 => x"88165288", +1145 => x"17085189", +1146 => x"aa3f81e9", +1147 => x"a0087008", +1148 => x"770c578c", +1149 => x"16705455", +1150 => x"8a527408", +1151 => x"518ae93f", +1152 => x"80c10b81", +1153 => x"e99c3356", +1154 => x"56757526", +1155 => x"ff050980", +1156 => x"cc0bf705", +1157 => x"06840105", +1158 => x"050480c3", +1159 => x"5275518b", +1160 => x"d33f8008", +1161 => x"0981057f", +1162 => x"05097081", +1163 => x"0509060a", +1164 => x"8106ff05", +1165 => x"0987f50b", +1166 => x"f7050684", +1167 => x"01050504", +1168 => x"81167081", +1169 => x"ff0681e9", +1170 => x"9c335257", +1171 => x"55747627", +1172 => x"ff0509c6", +1173 => x"0bf70506", +1174 => x"84010505", +1175 => x"04797e29", +1176 => x"60707235", +1177 => x"70417272", +1178 => x"31707011", +1179 => x"11111111", +1180 => x"11517231", +1181 => x"5e538a05", +1182 => x"81e99833", +1183 => x"81e99408", +1184 => x"5a525258", +1185 => x"55760981", +1186 => x"0580c105", +1187 => x"09708105", +1188 => x"09060a81", +1189 => x"06ff0509", +1190 => x"87c10bf7", +1191 => x"05068401", +1192 => x"05050478", +1193 => x"09708105", +1194 => x"09060a09", +1195 => x"8106ff05", +1196 => x"09d30bf7", +1197 => x"05068401", +1198 => x"05050481", +1199 => x"1858818a", +1200 => x"e8087825", +1201 => x"ff0509fc", +1202 => x"830bf705", +1203 => x"06840105", +1204 => x"05048051", +1205 => x"80c0f13f", +1206 => x"800881e9", +1207 => x"8c0c0b0b", +1208 => x"80fdf451", +1209 => x"f0d13f0b", +1210 => x"0b8186cc", +1211 => x"51f0c83f", +1212 => x"0b0b80fe", +1213 => x"8451f0bf", +1214 => x"3f0b0b81", +1215 => x"86cc51f0", +1216 => x"b63f81e9", +1217 => x"9408520b", +1218 => x"0b80febc", +1219 => x"51f0a83f", +1220 => x"85520b0b", +1221 => x"80fed851", +1222 => x"f09d3f81", +1223 => x"eaf00852", +1224 => x"0b0b80fe", +1225 => x"f451f08f", +1226 => x"3f81520b", +1227 => x"0b80fed8", +1228 => x"51f0843f", +1229 => x"81e99833", +1230 => x"520b0b80", +1231 => x"ff9051ef", +1232 => x"f63f80c1", +1233 => x"520b0b80", +1234 => x"ffac51ef", +1235 => x"ea3f81e9", +1236 => x"9c33520b", +1237 => x"0b80ffc8", +1238 => x"51efdc3f", +1239 => x"80c2520b", +1240 => x"0b80ffac", +1241 => x"51efd03f", +1242 => x"81e9c808", +1243 => x"520b0b80", +1244 => x"ffe451ef", +1245 => x"c23f8752", +1246 => x"0b0b80fe", +1247 => x"d851efb7", +1248 => x"3f81a7d8", +1249 => x"08520b0b", +1250 => x"81808051", +1251 => x"efa93f0b", +1252 => x"0b81809c", +1253 => x"51efa03f", +1254 => x"0b0b8180", +1255 => x"c851ef97", +1256 => x"3f81e9a0", +1257 => x"08700853", +1258 => x"560b0b81", +1259 => x"80d451ef", +1260 => x"863f0b0b", +1261 => x"8180f051", +1262 => x"eefd3f81", +1263 => x"e9a00884", +1264 => x"1108535d", +1265 => x"0b0b8181", +1266 => x"a451eeeb", +1267 => x"3f80520b", +1268 => x"0b80fed8", +1269 => x"51eee03f", +1270 => x"81e9a008", +1271 => x"88110853", +1272 => x"580b0b81", +1273 => x"81c051ee", +1274 => x"ce3f8252", +1275 => x"0b0b80fe", +1276 => x"d851eec3", +1277 => x"3f81e9a0", +1278 => x"088c1108", +1279 => x"53590b0b", +1280 => x"8181dc51", +1281 => x"eeb13f91", +1282 => x"520b0b80", +1283 => x"fed851ee", +1284 => x"a63f81e9", +1285 => x"a0089005", +1286 => x"520b0b81", +1287 => x"81f851ee", +1288 => x"963f0b0b", +1289 => x"81829451", +1290 => x"ee8d3f0b", +1291 => x"0b8182cc", +1292 => x"51ee843f", +1293 => x"81e99008", +1294 => x"70085357", +1295 => x"0b0b8180", +1296 => x"d451edf3", +1297 => x"3f0b0b81", +1298 => x"82e051ed", +1299 => x"ea3f81e9", +1300 => x"90088411", +1301 => x"0853550b", +1302 => x"0b8181a4", +1303 => x"51edd83f", +1304 => x"80520b0b", +1305 => x"80fed851", +1306 => x"edcd3f81", +1307 => x"e9900888", +1308 => x"11085356", +1309 => x"0b0b8181", +1310 => x"c051edbb", +1311 => x"3f81520b", +1312 => x"0b80fed8", +1313 => x"51edb03f", +1314 => x"81e99008", +1315 => x"8c110853", +1316 => x"5d0b0b81", +1317 => x"81dc51ed", +1318 => x"9e3f9252", +1319 => x"0b0b80fe", +1320 => x"d851ed93", +1321 => x"3f81e990", +1322 => x"08900552", +1323 => x"0b0b8181", +1324 => x"f851ed83", +1325 => x"3f0b0b81", +1326 => x"829451ec", +1327 => x"fa3f7d52", +1328 => x"0b0b8183", +1329 => x"a051ecef", +1330 => x"3f85520b", +1331 => x"0b80fed8", +1332 => x"51ece43f", +1333 => x"79520b0b", +1334 => x"8183bc51", +1335 => x"ecd93f8d", +1336 => x"520b0b80", +1337 => x"fed851ec", +1338 => x"ce3f7f52", +1339 => x"0b0b8183", +1340 => x"d851ecc3", +1341 => x"3f87520b", +1342 => x"0b80fed8", +1343 => x"51ecb83f", +1344 => x"7e520b0b", +1345 => x"8183f451", +1346 => x"ecad3f81", +1347 => x"520b0b80", +1348 => x"fed851ec", +1349 => x"a23f7b52", +1350 => x"0b0b8184", +1351 => x"9051ec97", +1352 => x"3f0b0b81", +1353 => x"84ac51ec", +1354 => x"8e3f7a52", +1355 => x"0b0b8184", +1356 => x"e451ec83", +1357 => x"3f0b0b81", +1358 => x"858051eb", +1359 => x"fa3f0b0b", +1360 => x"8186cc51", +1361 => x"ebf13f81", +1362 => x"e98c0881", +1363 => x"9af80831", +1364 => x"70819af4", +1365 => x"0c520b0b", +1366 => x"8185b851", +1367 => x"ebd93f81", +1368 => x"9af40856", +1369 => x"817625ff", +1370 => x"0509819d", +1371 => x"0bf70506", +1372 => x"84010505", +1373 => x"04818ae8", +1374 => x"087077bd", +1375 => x"84c0290b", +1376 => x"35819aec", +1377 => x"0c767135", +1378 => x"819af00c", +1379 => x"768ddd29", +1380 => x"7187e829", +1381 => x"0b3581e9", +1382 => x"a40c5b0b", +1383 => x"0b8185c8", +1384 => x"51eb943f", +1385 => x"819aec08", +1386 => x"520b0b81", +1387 => x"85f851eb", +1388 => x"863f0b0b", +1389 => x"81868051", +1390 => x"eafd3f81", +1391 => x"9af00852", +1392 => x"0b0b8185", +1393 => x"f851eaef", +1394 => x"3f81e9a4", +1395 => x"08520b0b", +1396 => x"8186b051", +1397 => x"eae13f0b", +1398 => x"0b8186cc", +1399 => x"51ead83f", +1400 => x"800b800c", +1401 => x"a13d0d04", +1402 => x"0b0b8186", +1403 => x"d051f598", +1404 => x"39760856", +1405 => x"b0537552", +1406 => x"76519f90", +1407 => x"3f80c10b", +1408 => x"81e99c33", +1409 => x"5656f881", +1410 => x"390b0b81", +1411 => x"878051ea", +1412 => x"a63f0b0b", +1413 => x"8187b851", +1414 => x"ea9d3f0b", +1415 => x"0b8186cc", +1416 => x"51ea943f", +1417 => x"800b800c", +1418 => x"a13d0d04", +1419 => x"a13dffb8", +1420 => x"05528051", +1421 => x"80dd3f9f", +1422 => x"530b0b81", +1423 => x"87d8527a", +1424 => x"519ec93f", +1425 => x"777881e9", +1426 => x"940c8117", +1427 => x"7081ff06", +1428 => x"81e99c33", +1429 => x"5258565a", +1430 => x"f7f339ff", +1431 => x"15707731", +1432 => x"7e0c5980", +1433 => x"0b811959", +1434 => x"59818ae8", +1435 => x"087825ff", +1436 => x"0509f4d8", +1437 => x"0bf70506", +1438 => x"84010505", +1439 => x"04f8d339", +1440 => x"70707382", +1441 => x"32703070", +1442 => x"72078025", +1443 => x"800c5252", +1444 => x"50500470", +1445 => x"70707476", +1446 => x"71535452", +1447 => x"71098105", +1448 => x"82050970", +1449 => x"81050906", +1450 => x"0a8106ff", +1451 => x"05098b0b", +1452 => x"f7050684", +1453 => x"01050504", +1454 => x"83517109", +1455 => x"81058105", +1456 => x"09708105", +1457 => x"09060a81", +1458 => x"06ff0509", +1459 => x"80dd0bf7", +1460 => x"05068401", +1461 => x"05050481", +1462 => x"7226ff05", +1463 => x"0980e10b", +1464 => x"f7050684", +1465 => x"01050504", +1466 => x"71098105", +1467 => x"82050970", +1468 => x"81050906", +1469 => x"0a8106ff", +1470 => x"050980e2", +1471 => x"0bf70506", +1472 => x"84010505", +1473 => x"04710981", +1474 => x"05840509", +1475 => x"70810509", +1476 => x"060a8106", +1477 => x"ff0509bc", +1478 => x"0bf70506", +1479 => x"84010505", +1480 => x"0470730c", +1481 => x"70800c50", +1482 => x"50500480", +1483 => x"e40b81e9", +1484 => x"940825ff", +1485 => x"0509930b", +1486 => x"f7050684", +1487 => x"01050504", +1488 => x"80730c70", +1489 => x"800c5050", +1490 => x"50048373", +1491 => x"0c70800c", +1492 => x"50505004", +1493 => x"82730c70", +1494 => x"800c5050", +1495 => x"50048173", +1496 => x"0c70800c", +1497 => x"50505004", +1498 => x"70747414", +1499 => x"8205710c", +1500 => x"800c5004", +1501 => x"f73d0d7b", +1502 => x"7d7f6185", +1503 => x"1270822b", +1504 => x"75117074", +1505 => x"71708405", +1506 => x"530c5a5a", +1507 => x"5d5b760c", +1508 => x"7980f818", +1509 => x"0c798612", +1510 => x"5257585a", +1511 => x"5a767624", +1512 => x"ff0509ac", +1513 => x"0bf70506", +1514 => x"84010505", +1515 => x"0476b329", +1516 => x"822b7911", +1517 => x"51537673", +1518 => x"70840555", +1519 => x"0c811454", +1520 => x"757425ff", +1521 => x"0509ef0b", +1522 => x"f7050684", +1523 => x"01050504", +1524 => x"7681cc29", +1525 => x"19fc1108", +1526 => x"8105fc12", +1527 => x"0c7a1970", +1528 => x"089fa013", +1529 => x"0c585685", +1530 => x"0b81e994", +1531 => x"0c75800c", +1532 => x"8b3d0d04", +1533 => x"70707002", +1534 => x"93053351", +1535 => x"80028405", +1536 => x"97053354", +1537 => x"52700981", +1538 => x"05730509", +1539 => x"70810509", +1540 => x"060a8106", +1541 => x"ff050990", +1542 => x"0bf70506", +1543 => x"84010505", +1544 => x"0471800c", +1545 => x"50505004", +1546 => x"7081e998", +1547 => x"34810b80", +1548 => x"0c505050", +1549 => x"04f83d0d", +1550 => x"7a7c5956", +1551 => x"820b8319", +1552 => x"55557416", +1553 => x"70337533", +1554 => x"5b515372", +1555 => x"09810579", +1556 => x"05097081", +1557 => x"0509060a", +1558 => x"8106ff05", +1559 => x"0981860b", +1560 => x"f7050684", +1561 => x"01050504", +1562 => x"80c10b81", +1563 => x"16811656", +1564 => x"56578275", +1565 => x"25ff0509", +1566 => x"c90bf705", +1567 => x"06840105", +1568 => x"0504ffa9", +1569 => x"177081ff", +1570 => x"06555973", +1571 => x"8226ff05", +1572 => x"098b0bf7", +1573 => x"05068401", +1574 => x"05050487", +1575 => x"55815376", +1576 => x"09810580", +1577 => x"d2050970", +1578 => x"81050906", +1579 => x"0a8106ff", +1580 => x"0509ab0b", +1581 => x"f7050684", +1582 => x"01050504", +1583 => x"77527551", +1584 => x"9cb43f80", +1585 => x"53728008", +1586 => x"25ff0509", +1587 => x"910bf705", +1588 => x"06840105", +1589 => x"05048715", +1590 => x"81e9940c", +1591 => x"81537280", +1592 => x"0c8a3d0d", +1593 => x"047281e9", +1594 => x"98348275", +1595 => x"25ff0509", +1596 => x"fed00bf7", +1597 => x"05068401", +1598 => x"050504ff", +1599 => x"8539f93d", +1600 => x"0d797b7d", +1601 => x"54587259", +1602 => x"77307970", +1603 => x"30707207", +1604 => x"9f2a7371", +1605 => x"315a5259", +1606 => x"77795673", +1607 => x"0c537384", +1608 => x"130c5480", +1609 => x"0c893d0d", +1610 => x"04f93d0d", +1611 => x"797b7d7f", +1612 => x"56545254", +1613 => x"72097081", +1614 => x"0509060a", +1615 => x"8106ff05", +1616 => x"09b30bf7", +1617 => x"05068401", +1618 => x"05050470", +1619 => x"577158a0", +1620 => x"73315280", +1621 => x"7225ff05", +1622 => x"09a90bf7", +1623 => x"05068401", +1624 => x"05050477", +1625 => x"70742b57", +1626 => x"70732a78", +1627 => x"752b0756", +1628 => x"51747653", +1629 => x"5170740c", +1630 => x"7184150c", +1631 => x"73800c89", +1632 => x"3d0d0480", +1633 => x"56777230", +1634 => x"0b2b5574", +1635 => x"765351e5", +1636 => x"39fb3d0d", +1637 => x"77795555", +1638 => x"80567575", +1639 => x"24ff0509", +1640 => x"80d00bf7", +1641 => x"05068401", +1642 => x"05050480", +1643 => x"7424ff05", +1644 => x"09b70bf7", +1645 => x"05068401", +1646 => x"05050480", +1647 => x"53735274", +1648 => x"51819c3f", +1649 => x"80085475", +1650 => x"09708105", +1651 => x"09060a81", +1652 => x"06ff0509", +1653 => x"8d0bf705", +1654 => x"06840105", +1655 => x"05048008", +1656 => x"30547380", +1657 => x"0c873d0d", +1658 => x"04733076", +1659 => x"81325754", +1660 => x"ca397430", +1661 => x"55815673", +1662 => x"8025ff05", +1663 => x"09ffbc0b", +1664 => x"f7050684", +1665 => x"01050504", +1666 => x"e039fa3d", +1667 => x"0d787a57", +1668 => x"55805776", +1669 => x"7524ff05", +1670 => x"09be0bf7", +1671 => x"05068401", +1672 => x"05050475", +1673 => x"9f2c5481", +1674 => x"53757432", +1675 => x"74315274", +1676 => x"51ad3f80", +1677 => x"08547609", +1678 => x"70810509", +1679 => x"060a8106", +1680 => x"ff05098d", +1681 => x"0bf70506", +1682 => x"84010505", +1683 => x"04800830", +1684 => x"5473800c", +1685 => x"883d0d04", +1686 => x"74305581", +1687 => x"57c539fc", +1688 => x"3d0d7678", +1689 => x"53548153", +1690 => x"80747326", +1691 => x"52557209", +1692 => x"70810509", +1693 => x"060a8106", +1694 => x"ff050980", +1695 => x"d50bf705", +1696 => x"06840105", +1697 => x"05047009", +1698 => x"70810509", +1699 => x"060a8106", +1700 => x"ff050980", +1701 => x"ea0bf705", +1702 => x"06840105", +1703 => x"05048072", +1704 => x"24ff0509", +1705 => x"80d90bf7", +1706 => x"05068401", +1707 => x"05050471", +1708 => x"10731075", +1709 => x"72265354", +1710 => x"52720970", +1711 => x"81050906", +1712 => x"0a098106", +1713 => x"ff0509ff", +1714 => x"bd0bf705", +1715 => x"06840105", +1716 => x"05047351", +1717 => x"78097081", +1718 => x"0509060a", +1719 => x"098106ff", +1720 => x"05098b0b", +1721 => x"f7050684", +1722 => x"01050504", +1723 => x"74517080", +1724 => x"0c863d0d", +1725 => x"04720a10", +1726 => x"0a720a10", +1727 => x"0a535372", +1728 => x"09708105", +1729 => x"09060a81", +1730 => x"06ff0509", +1731 => x"c50bf705", +1732 => x"06840105", +1733 => x"05047174", +1734 => x"26ff0509", +1735 => x"d80bf705", +1736 => x"06840105", +1737 => x"05047372", +1738 => x"31757407", +1739 => x"740a100a", +1740 => x"740a100a", +1741 => x"55555654", +1742 => x"c6397070", +1743 => x"73528193", +1744 => x"b4085193", +1745 => x"3f505004", +1746 => x"70707352", +1747 => x"8193b408", +1748 => x"519bc43f", +1749 => x"505004f4", +1750 => x"3d0d7e60", +1751 => x"8b1170f8", +1752 => x"065b5555", +1753 => x"5d729626", +1754 => x"ff05098b", +1755 => x"0bf70506", +1756 => x"84010505", +1757 => x"04905880", +1758 => x"78247479", +1759 => x"26075580", +1760 => x"54740981", +1761 => x"05740509", +1762 => x"70810509", +1763 => x"060a0981", +1764 => x"06ff0509", +1765 => x"80f40bf7", +1766 => x"05068401", +1767 => x"0505047c", +1768 => x"5195f13f", +1769 => x"7783f726", +1770 => x"ff050980", +1771 => x"e40bf705", +1772 => x"06840105", +1773 => x"05047783", +1774 => x"2a701010", +1775 => x"10818bac", +1776 => x"058c1108", +1777 => x"58585475", +1778 => x"09810577", +1779 => x"05097081", +1780 => x"0509060a", +1781 => x"8106ff05", +1782 => x"0983b60b", +1783 => x"f7050684", +1784 => x"01050504", +1785 => x"841608fc", +1786 => x"068c1708", +1787 => x"88180871", +1788 => x"8c120c88", +1789 => x"120c5b76", +1790 => x"05841108", +1791 => x"81078412", +1792 => x"0c537c51", +1793 => x"958f3f88", +1794 => x"16547380", +1795 => x"0c8e3d0d", +1796 => x"0477892a", +1797 => x"78832a58", +1798 => x"54730970", +1799 => x"81050906", +1800 => x"0a8106ff", +1801 => x"05098180", +1802 => x"0bf70506", +1803 => x"84010505", +1804 => x"0477862a", +1805 => x"b8055784", +1806 => x"7427ff05", +1807 => x"0980e90b", +1808 => x"f7050684", +1809 => x"01050504", +1810 => x"80db1457", +1811 => x"947427ff", +1812 => x"050980d4", +1813 => x"0bf70506", +1814 => x"84010505", +1815 => x"04778c2a", +1816 => x"80ee0557", +1817 => x"80d47427", +1818 => x"ff0509bc", +1819 => x"0bf70506", +1820 => x"84010505", +1821 => x"04778f2a", +1822 => x"80f70557", +1823 => x"82d47427", +1824 => x"ff0509a4", +1825 => x"0bf70506", +1826 => x"84010505", +1827 => x"0477922a", +1828 => x"80fc0557", +1829 => x"8ad47427", +1830 => x"ff05098c", +1831 => x"0bf70506", +1832 => x"84010505", +1833 => x"0480fe57", +1834 => x"76101010", +1835 => x"818bac05", +1836 => x"8c110856", +1837 => x"53740981", +1838 => x"05730509", +1839 => x"70810509", +1840 => x"060a8106", +1841 => x"ff050980", +1842 => x"d70bf705", +1843 => x"06840105", +1844 => x"05048415", +1845 => x"08fc0670", +1846 => x"79315556", +1847 => x"738f24ff", +1848 => x"05098fb7", +1849 => x"0bf70506", +1850 => x"84010505", +1851 => x"04738025", +1852 => x"ff05098f", +1853 => x"ae0bf705", +1854 => x"06840105", +1855 => x"05048c15", +1856 => x"08557409", +1857 => x"81057305", +1858 => x"09708105", +1859 => x"09060a09", +1860 => x"8106ff05", +1861 => x"09ffbb0b", +1862 => x"f7050684", +1863 => x"01050504", +1864 => x"81175981", +1865 => x"8bbc0856", +1866 => x"75098105", +1867 => x"818bb405", +1868 => x"09708105", +1869 => x"09060a81", +1870 => x"06ff0509", +1871 => x"84ce0bf7", +1872 => x"05068401", +1873 => x"05050484", +1874 => x"1608fc06", +1875 => x"70793155", +1876 => x"55738f24", +1877 => x"ff050980", +1878 => x"e30bf705", +1879 => x"06840105", +1880 => x"0504818b", +1881 => x"b40b818b", +1882 => x"c00c818b", +1883 => x"b40b818b", +1884 => x"bc0c8074", +1885 => x"24ff0509", +1886 => x"80f80bf7", +1887 => x"05068401", +1888 => x"05050474", +1889 => x"16841108", +1890 => x"81078412", +1891 => x"0c53fcf2", +1892 => x"3988168c", +1893 => x"11085759", +1894 => x"75098105", +1895 => x"79050970", +1896 => x"81050906", +1897 => x"0a098106", +1898 => x"ff0509fc", +1899 => x"b70bf705", +1900 => x"06840105", +1901 => x"05048214", +1902 => x"59fee839", +1903 => x"77167881", +1904 => x"0784180c", +1905 => x"70818bc0", +1906 => x"0c70818b", +1907 => x"bc0c818b", +1908 => x"b40b8c12", +1909 => x"0c8c1108", +1910 => x"88120c74", +1911 => x"81078412", +1912 => x"0c740574", +1913 => x"710c5b7c", +1914 => x"5191aa3f", +1915 => x"881654fc", +1916 => x"993983ff", +1917 => x"7527ff05", +1918 => x"0985ff0b", +1919 => x"f7050684", +1920 => x"01050504", +1921 => x"74892a75", +1922 => x"832a5454", +1923 => x"73097081", +1924 => x"0509060a", +1925 => x"8106ff05", +1926 => x"0981800b", +1927 => x"f7050684", +1928 => x"01050504", +1929 => x"74862ab8", +1930 => x"05538474", +1931 => x"27ff0509", +1932 => x"80e90bf7", +1933 => x"05068401", +1934 => x"05050480", +1935 => x"db145394", +1936 => x"7427ff05", +1937 => x"0980d40b", +1938 => x"f7050684", +1939 => x"01050504", +1940 => x"748c2a80", +1941 => x"ee055380", +1942 => x"d47427ff", +1943 => x"0509bc0b", +1944 => x"f7050684", +1945 => x"01050504", +1946 => x"748f2a80", +1947 => x"f7055382", +1948 => x"d47427ff", +1949 => x"0509a40b", +1950 => x"f7050684", +1951 => x"01050504", +1952 => x"74922a80", +1953 => x"fc05538a", +1954 => x"d47427ff", +1955 => x"05098c0b", +1956 => x"f7050684", +1957 => x"01050504", +1958 => x"80fe5372", +1959 => x"10101081", +1960 => x"8bac0588", +1961 => x"11085557", +1962 => x"73098105", +1963 => x"77050970", +1964 => x"81050906", +1965 => x"0a8106ff", +1966 => x"05098aec", +1967 => x"0bf70506", +1968 => x"84010505", +1969 => x"04841408", +1970 => x"fc065b74", +1971 => x"7b27ff05", +1972 => x"09aa0bf7", +1973 => x"05068401", +1974 => x"05050488", +1975 => x"14085473", +1976 => x"09810577", +1977 => x"05097081", +1978 => x"0509060a", +1979 => x"098106ff", +1980 => x"0509d20b", +1981 => x"f7050684", +1982 => x"01050504", +1983 => x"8c140881", +1984 => x"8bac0b84", +1985 => x"0508718c", +1986 => x"190c7588", +1987 => x"190c7788", +1988 => x"130c5c57", +1989 => x"758c150c", +1990 => x"78538079", +1991 => x"24ff0509", +1992 => x"86860bf7", +1993 => x"05068401", +1994 => x"05050472", +1995 => x"822c8171", +1996 => x"2b565674", +1997 => x"7b26ff05", +1998 => x"0981a80b", +1999 => x"f7050684", +2000 => x"01050504", +2001 => x"7a750657", +2002 => x"76097081", +2003 => x"0509060a", +2004 => x"098106ff", +2005 => x"050983ee", +2006 => x"0bf70506", +2007 => x"84010505", +2008 => x"0478fc06", +2009 => x"84055974", +2010 => x"10707c06", +2011 => x"55557309", +2012 => x"70810509", +2013 => x"060a0981", +2014 => x"06ff0509", +2015 => x"83c80bf7", +2016 => x"05068401", +2017 => x"05050484", +2018 => x"1959dc39", +2019 => x"818bac0b", +2020 => x"84050879", +2021 => x"545b7880", +2022 => x"25ff0509", +2023 => x"ff8d0bf7", +2024 => x"05068401", +2025 => x"05050484", +2026 => x"ff397409", +2027 => x"7b067081", +2028 => x"8bac0b84", +2029 => x"050c5b74", +2030 => x"1055747b", +2031 => x"26ff0509", +2032 => x"a20bf705", +2033 => x"06840105", +2034 => x"05047409", +2035 => x"70810509", +2036 => x"060a0981", +2037 => x"06ff0509", +2038 => x"899c0bf7", +2039 => x"05068401", +2040 => x"05050481", +2041 => x"8bac0b88", +2042 => x"05087084", +2043 => x"1208fc06", +2044 => x"707b317b", +2045 => x"72268f72", +2046 => x"25075d57", +2047 => x"5c5c5578", +2048 => x"09708105", +2049 => x"09060a81", +2050 => x"06ff0509", +2051 => x"81c60bf7", +2052 => x"05068401", +2053 => x"05050479", +2054 => x"15818ba4", +2055 => x"08199011", +2056 => x"59545681", +2057 => x"8ba00809", +2058 => x"8105ff05", +2059 => x"09708105", +2060 => x"09060a81", +2061 => x"06ff0509", +2062 => x"900bf705", +2063 => x"06840105", +2064 => x"0504a08f", +2065 => x"13e08006", +2066 => x"5776527c", +2067 => x"518cc73f", +2068 => x"80085480", +2069 => x"08098105", +2070 => x"ff050970", +2071 => x"81050906", +2072 => x"0a8106ff", +2073 => x"0509ba0b", +2074 => x"f7050684", +2075 => x"01050504", +2076 => x"80087627", +2077 => x"ff050983", +2078 => x"e90bf705", +2079 => x"06840105", +2080 => x"05047409", +2081 => x"8105818b", +2082 => x"ac050970", +2083 => x"81050906", +2084 => x"0a8106ff", +2085 => x"050983ca", +2086 => x"0bf70506", +2087 => x"84010505", +2088 => x"04818bac", +2089 => x"0b880508", +2090 => x"55841508", +2091 => x"fc067079", +2092 => x"31797226", +2093 => x"8f722507", +2094 => x"5d555a7a", +2095 => x"09708105", +2096 => x"09060a09", +2097 => x"8106ff05", +2098 => x"0986d00b", +2099 => x"f7050684", +2100 => x"01050504", +2101 => x"77810784", +2102 => x"160c7715", +2103 => x"70818bac", +2104 => x"0b88050c", +2105 => x"74810784", +2106 => x"120c567c", +2107 => x"518ba63f", +2108 => x"88155473", +2109 => x"800c8e3d", +2110 => x"0d047483", +2111 => x"2a705454", +2112 => x"807424ff", +2113 => x"050982a6", +2114 => x"0bf70506", +2115 => x"84010505", +2116 => x"0472822c", +2117 => x"81712b81", +2118 => x"8bb00807", +2119 => x"70818bac", +2120 => x"0b84050c", +2121 => x"75101010", +2122 => x"818bac05", +2123 => x"88110871", +2124 => x"8c1b0c70", +2125 => x"881b0c79", +2126 => x"88130c57", +2127 => x"555c5575", +2128 => x"8c150cfb", +2129 => x"d3397879", +2130 => x"10101081", +2131 => x"8bac0570", +2132 => x"565b5c8c", +2133 => x"14085675", +2134 => x"09810574", +2135 => x"05097081", +2136 => x"0509060a", +2137 => x"8106ff05", +2138 => x"0980d70b", +2139 => x"f7050684", +2140 => x"01050504", +2141 => x"841608fc", +2142 => x"06707931", +2143 => x"5853768f", +2144 => x"24ff0509", +2145 => x"86c10bf7", +2146 => x"05068401", +2147 => x"05050476", +2148 => x"8025ff05", +2149 => x"0986f40b", +2150 => x"f7050684", +2151 => x"01050504", +2152 => x"8c160856", +2153 => x"75098105", +2154 => x"74050970", +2155 => x"81050906", +2156 => x"0a098106", +2157 => x"ff0509ff", +2158 => x"bb0bf705", +2159 => x"06840105", +2160 => x"05048814", +2161 => x"811a7083", +2162 => x"06555a54", +2163 => x"72097081", +2164 => x"0509060a", +2165 => x"098106ff", +2166 => x"0509fef7", +2167 => x"0bf70506", +2168 => x"84010505", +2169 => x"047b8306", +2170 => x"56750970", +2171 => x"81050906", +2172 => x"0a8106ff", +2173 => x"0509fbb2", +2174 => x"0bf70506", +2175 => x"84010505", +2176 => x"04ff1cf8", +2177 => x"1b5b5c88", +2178 => x"1a080981", +2179 => x"057a0509", +2180 => x"70810509", +2181 => x"060a8106", +2182 => x"ff0509c9", +2183 => x"0bf70506", +2184 => x"84010505", +2185 => x"04fb9039", +2186 => x"831953f9", +2187 => x"fe398314", +2188 => x"70822c81", +2189 => x"712b818b", +2190 => x"b0080770", +2191 => x"818bac0b", +2192 => x"84050c76", +2193 => x"10101081", +2194 => x"8bac0588", +2195 => x"1108718c", +2196 => x"1c0c7088", +2197 => x"1c0c7a88", +2198 => x"130c5853", +2199 => x"5d5653fd", +2200 => x"de39818a", +2201 => x"f0081759", +2202 => x"80080981", +2203 => x"05760509", +2204 => x"70810509", +2205 => x"060a8106", +2206 => x"ff050982", +2207 => x"870bf705", +2208 => x"06840105", +2209 => x"0504818b", +2210 => x"a0080981", +2211 => x"05ff0509", +2212 => x"70810509", +2213 => x"060a8106", +2214 => x"ff050985", +2215 => x"db0bf705", +2216 => x"06840105", +2217 => x"05047376", +2218 => x"3119818a", +2219 => x"f00c7387", +2220 => x"06705653", +2221 => x"72097081", +2222 => x"0509060a", +2223 => x"8106ff05", +2224 => x"09900bf7", +2225 => x"05068401", +2226 => x"05050488", +2227 => x"73317015", +2228 => x"55557614", +2229 => x"9fff06a0", +2230 => x"80713116", +2231 => x"70547e53", +2232 => x"515387b2", +2233 => x"3f800856", +2234 => x"80080981", +2235 => x"05ff0509", +2236 => x"70810509", +2237 => x"060a8106", +2238 => x"ff050982", +2239 => x"970bf705", +2240 => x"06840105", +2241 => x"0504818a", +2242 => x"f0081370", +2243 => x"818af00c", +2244 => x"7475818b", +2245 => x"ac0b8805", +2246 => x"0c777631", +2247 => x"15810755", +2248 => x"56597a09", +2249 => x"8105818b", +2250 => x"ac050970", +2251 => x"81050906", +2252 => x"0a8106ff", +2253 => x"050984cd", +2254 => x"0bf70506", +2255 => x"84010505", +2256 => x"04798f26", +2257 => x"ff050983", +2258 => x"e60bf705", +2259 => x"06840105", +2260 => x"0504810b", +2261 => x"84150c84", +2262 => x"1508fc06", +2263 => x"70793179", +2264 => x"72268f72", +2265 => x"25075d55", +2266 => x"5a7a0970", +2267 => x"81050906", +2268 => x"0a8106ff", +2269 => x"0509fadc", +2270 => x"0bf70506", +2271 => x"84010505", +2272 => x"04819839", +2273 => x"80089fff", +2274 => x"06557409", +2275 => x"70810509", +2276 => x"060a0981", +2277 => x"06ff0509", +2278 => x"fdec0bf7", +2279 => x"05068401", +2280 => x"05050478", +2281 => x"818af00c", +2282 => x"818bac0b", +2283 => x"8805087a", +2284 => x"18810784", +2285 => x"120c5581", +2286 => x"8b9c0879", +2287 => x"27ff0509", +2288 => x"8e0bf705", +2289 => x"06840105", +2290 => x"05047881", +2291 => x"8b9c0c81", +2292 => x"8b980879", +2293 => x"27ff0509", +2294 => x"f9cf0bf7", +2295 => x"05068401", +2296 => x"05050478", +2297 => x"818b980c", +2298 => x"841508fc", +2299 => x"06707931", +2300 => x"7972268f", +2301 => x"7225075d", +2302 => x"555a7a09", +2303 => x"70810509", +2304 => x"060a8106", +2305 => x"ff0509f9", +2306 => x"cb0bf705", +2307 => x"06840105", +2308 => x"05048839", +2309 => x"80745753", +2310 => x"fdec397c", +2311 => x"5184f63f", +2312 => x"800b800c", +2313 => x"8e3d0d04", +2314 => x"807324ff", +2315 => x"0509ad0b", +2316 => x"f7050684", +2317 => x"01050504", +2318 => x"72822c81", +2319 => x"712b818b", +2320 => x"b0080770", +2321 => x"818bac0b", +2322 => x"84050c5c", +2323 => x"5a768c17", +2324 => x"0c738817", +2325 => x"0c758818", +2326 => x"0cf5b939", +2327 => x"83137082", +2328 => x"2c81712b", +2329 => x"818bb008", +2330 => x"0770818b", +2331 => x"ac0b8405", +2332 => x"0c5d5b53", +2333 => x"d8397a75", +2334 => x"065c7b09", +2335 => x"70810509", +2336 => x"060a0981", +2337 => x"06ff0509", +2338 => x"f9bc0bf7", +2339 => x"05068401", +2340 => x"05050484", +2341 => x"19751056", +2342 => x"59dc39ff", +2343 => x"17810559", +2344 => x"f181398c", +2345 => x"15088816", +2346 => x"08718c12", +2347 => x"0c88120c", +2348 => x"59751584", +2349 => x"11088107", +2350 => x"84120c58", +2351 => x"7c5183d5", +2352 => x"3f881554", +2353 => x"f8ad3977", +2354 => x"16788107", +2355 => x"84180c8c", +2356 => x"17088818", +2357 => x"08718c12", +2358 => x"0c88120c", +2359 => x"5c70818b", +2360 => x"c00c7081", +2361 => x"8bbc0c81", +2362 => x"8bb40b8c", +2363 => x"120c8c11", +2364 => x"0888120c", +2365 => x"77810784", +2366 => x"120c7705", +2367 => x"77710c55", +2368 => x"7c518391", +2369 => x"3f881654", +2370 => x"ee803972", +2371 => x"16841108", +2372 => x"81078412", +2373 => x"0c588c16", +2374 => x"08881708", +2375 => x"718c120c", +2376 => x"88120c57", +2377 => x"7c5182ed", +2378 => x"3f881654", +2379 => x"eddc3972", +2380 => x"84150cf4", +2381 => x"1af80670", +2382 => x"841d0881", +2383 => x"0607841d", +2384 => x"0c701c55", +2385 => x"56850b84", +2386 => x"150c850b", +2387 => x"88150c8f", +2388 => x"7627ff05", +2389 => x"09fce00b", +2390 => x"f7050684", +2391 => x"01050504", +2392 => x"881b527c", +2393 => x"5187b03f", +2394 => x"818bac0b", +2395 => x"88050881", +2396 => x"8af0085a", +2397 => x"55fcc039", +2398 => x"78818af0", +2399 => x"0c73818b", +2400 => x"a00cfaaa", +2401 => x"39728415", +2402 => x"0cfcac39", +2403 => x"fb3d0d77", +2404 => x"707a7c58", +2405 => x"5553568f", +2406 => x"7527ff05", +2407 => x"0981a40b", +2408 => x"f7050684", +2409 => x"01050504", +2410 => x"72760783", +2411 => x"06517009", +2412 => x"70810509", +2413 => x"060a0981", +2414 => x"06ff0509", +2415 => x"81850bf7", +2416 => x"05068401", +2417 => x"05050475", +2418 => x"73525470", +2419 => x"70840552", +2420 => x"08747084", +2421 => x"05560c73", +2422 => x"71708405", +2423 => x"53087170", +2424 => x"8405530c", +2425 => x"71708405", +2426 => x"53087170", +2427 => x"8405530c", +2428 => x"71708405", +2429 => x"53087170", +2430 => x"8405530c", +2431 => x"f0165654", +2432 => x"748f26ff", +2433 => x"0509c40b", +2434 => x"f7050684", +2435 => x"01050504", +2436 => x"837527ff", +2437 => x"0509a80b", +2438 => x"f7050684", +2439 => x"01050504", +2440 => x"70708405", +2441 => x"52087470", +2442 => x"8405560c", +2443 => x"fc155574", +2444 => x"8326ff05", +2445 => x"09ea0bf7", +2446 => x"05068401", +2447 => x"05050473", +2448 => x"715452ff", +2449 => x"15517009", +2450 => x"8105ff05", +2451 => x"09708105", +2452 => x"09060a81", +2453 => x"06ff0509", +2454 => x"b40bf705", +2455 => x"06840105", +2456 => x"05047270", +2457 => x"81055472", +2458 => x"70810554", +2459 => x"3bff1151", +2460 => x"70098105", +2461 => x"ff050970", +2462 => x"81050906", +2463 => x"0a098106", +2464 => x"ff0509de", +2465 => x"0bf70506", +2466 => x"84010505", +2467 => x"0475800c", +2468 => x"873d0d04", +2469 => x"04047070", +2470 => x"7070800b", +2471 => x"81eaf40c", +2472 => x"76518cc1", +2473 => x"3f800853", +2474 => x"80080981", +2475 => x"05ff0509", +2476 => x"70810509", +2477 => x"060a8106", +2478 => x"ff050991", +2479 => x"0bf70506", +2480 => x"84010505", +2481 => x"0472800c", +2482 => x"50505050", +2483 => x"0481eaf4", +2484 => x"08547309", +2485 => x"70810509", +2486 => x"060a8106", +2487 => x"ff0509e5", +2488 => x"0bf70506", +2489 => x"84010505", +2490 => x"04757471", +2491 => x"0c527280", +2492 => x"0c505050", +2493 => x"5004fb3d", +2494 => x"0d777970", +2495 => x"72078306", +2496 => x"53545270", +2497 => x"09708105", +2498 => x"09060a09", +2499 => x"8106ff05", +2500 => x"09b20bf7", +2501 => x"05068401", +2502 => x"05050471", +2503 => x"73730854", +2504 => x"56547109", +2505 => x"81057308", +2506 => x"05097081", +2507 => x"0509060a", +2508 => x"8106ff05", +2509 => x"0981890b", +2510 => x"f7050684", +2511 => x"01050504", +2512 => x"73755452", +2513 => x"71337081", +2514 => x"ff065254", +2515 => x"70097081", +2516 => x"0509060a", +2517 => x"8106ff05", +2518 => x"0980cf0b", +2519 => x"f7050684", +2520 => x"01050504", +2521 => x"72335570", +2522 => x"09810575", +2523 => x"05097081", +2524 => x"0509060a", +2525 => x"098106ff", +2526 => x"0509b20b", +2527 => x"f7050684", +2528 => x"01050504", +2529 => x"81128114", +2530 => x"71337081", +2531 => x"ff065456", +2532 => x"54527009", +2533 => x"70810509", +2534 => x"060a0981", +2535 => x"06ff0509", +2536 => x"c30bf705", +2537 => x"06840105", +2538 => x"05047233", +2539 => x"557381ff", +2540 => x"067581ff", +2541 => x"06717131", +2542 => x"800c5552", +2543 => x"873d0d04", +2544 => x"7109f7fb", +2545 => x"fdff1306", +2546 => x"f8848281", +2547 => x"80065271", +2548 => x"09708105", +2549 => x"09060a09", +2550 => x"8106ff05", +2551 => x"09b70bf7", +2552 => x"05068401", +2553 => x"05050484", +2554 => x"14841671", +2555 => x"08545654", +2556 => x"71098105", +2557 => x"75080509", +2558 => x"70810509", +2559 => x"060a8106", +2560 => x"ff0509ff", +2561 => x"bb0bf705", +2562 => x"06840105", +2563 => x"05047375", +2564 => x"5452feb0", +2565 => x"39800b80", +2566 => x"0c873d0d", +2567 => x"04fb3d0d", +2568 => x"77705256", +2569 => x"fcee3f81", +2570 => x"8bac0b88", +2571 => x"05088411", +2572 => x"08fc0670", +2573 => x"7b319fef", +2574 => x"05e08006", +2575 => x"e0800552", +2576 => x"5555a080", +2577 => x"7524ff05", +2578 => x"09b30bf7", +2579 => x"05068401", +2580 => x"05050480", +2581 => x"527551fc", +2582 => x"bd3f818b", +2583 => x"b4081453", +2584 => x"72098105", +2585 => x"80080509", +2586 => x"70810509", +2587 => x"060a8106", +2588 => x"ff050997", +2589 => x"0bf70506", +2590 => x"84010505", +2591 => x"047551fc", +2592 => x"943f8053", +2593 => x"72800c87", +2594 => x"3d0d0474", +2595 => x"30527551", +2596 => x"fc843f80", +2597 => x"08098105", +2598 => x"ff050970", +2599 => x"81050906", +2600 => x"0a8106ff", +2601 => x"0509b00b", +2602 => x"f7050684", +2603 => x"01050504", +2604 => x"818bac0b", +2605 => x"88050874", +2606 => x"76318107", +2607 => x"84120c53", +2608 => x"818af008", +2609 => x"7531818a", +2610 => x"f00c7551", +2611 => x"fbc73f81", +2612 => x"0b800c87", +2613 => x"3d0d0480", +2614 => x"527551fb", +2615 => x"b93f818b", +2616 => x"ac0b8805", +2617 => x"08800871", +2618 => x"3154548f", +2619 => x"7325ff05", +2620 => x"09ff8a0b", +2621 => x"f7050684", +2622 => x"01050504", +2623 => x"8008818b", +2624 => x"a0083181", +2625 => x"8af00c72", +2626 => x"81078415", +2627 => x"0c7551fb", +2628 => x"843f8053", +2629 => x"feee39f7", +2630 => x"3d0d7b7d", +2631 => x"545a7209", +2632 => x"70810509", +2633 => x"060a8106", +2634 => x"ff050984", +2635 => x"9e0bf705", +2636 => x"06840105", +2637 => x"05047951", +2638 => x"fada3ff8", +2639 => x"13841108", +2640 => x"70fe0670", +2641 => x"13841108", +2642 => x"fc065c57", +2643 => x"58545781", +2644 => x"8bb40809", +2645 => x"81057405", +2646 => x"09708105", +2647 => x"09060a81", +2648 => x"06ff0509", +2649 => x"85840bf7", +2650 => x"05068401", +2651 => x"05050477", +2652 => x"84150c80", +2653 => x"73810656", +2654 => x"59740981", +2655 => x"05790509", +2656 => x"70810509", +2657 => x"060a8106", +2658 => x"ff050983", +2659 => x"c20bf705", +2660 => x"06840105", +2661 => x"05047714", +2662 => x"84110881", +2663 => x"06565374", +2664 => x"09708105", +2665 => x"09060a09", +2666 => x"8106ff05", +2667 => x"0980d40b", +2668 => x"f7050684", +2669 => x"01050504", +2670 => x"77165678", +2671 => x"09708105", +2672 => x"09060a09", +2673 => x"8106ff05", +2674 => x"0983bf0b", +2675 => x"f7050684", +2676 => x"01050504", +2677 => x"88140855", +2678 => x"74098105", +2679 => x"818bb405", +2680 => x"09708105", +2681 => x"09060a81", +2682 => x"06ff0509", +2683 => x"84e60bf7", +2684 => x"05068401", +2685 => x"0505048c", +2686 => x"1408708c", +2687 => x"170c7588", +2688 => x"120c5875", +2689 => x"81078418", +2690 => x"0c751776", +2691 => x"710c5478", +2692 => x"09708105", +2693 => x"09060a09", +2694 => x"8106ff05", +2695 => x"0982a70b", +2696 => x"f7050684", +2697 => x"01050504", +2698 => x"83ff7627", +2699 => x"ff050982", +2700 => x"ea0bf705", +2701 => x"06840105", +2702 => x"05047589", +2703 => x"2a76832a", +2704 => x"54547309", +2705 => x"70810509", +2706 => x"060a8106", +2707 => x"ff050981", +2708 => x"800bf705", +2709 => x"06840105", +2710 => x"05047586", +2711 => x"2ab80553", +2712 => x"847427ff", +2713 => x"050980e9", +2714 => x"0bf70506", +2715 => x"84010505", +2716 => x"0480db14", +2717 => x"53947427", +2718 => x"ff050980", +2719 => x"d40bf705", +2720 => x"06840105", +2721 => x"0504758c", +2722 => x"2a80ee05", +2723 => x"5380d474", +2724 => x"27ff0509", +2725 => x"bc0bf705", +2726 => x"06840105", +2727 => x"0504758f", +2728 => x"2a80f705", +2729 => x"5382d474", +2730 => x"27ff0509", +2731 => x"a40bf705", +2732 => x"06840105", +2733 => x"05047592", +2734 => x"2a80fc05", +2735 => x"538ad474", +2736 => x"27ff0509", +2737 => x"8c0bf705", +2738 => x"06840105", +2739 => x"050480fe", +2740 => x"53721010", +2741 => x"10818bac", +2742 => x"05881108", +2743 => x"55557309", +2744 => x"81057505", +2745 => x"09708105", +2746 => x"09060a81", +2747 => x"06ff0509", +2748 => x"83a90bf7", +2749 => x"05068401", +2750 => x"05050484", +2751 => x"1408fc06", +2752 => x"59757927", +2753 => x"ff0509aa", +2754 => x"0bf70506", +2755 => x"84010505", +2756 => x"04881408", +2757 => x"54730981", +2758 => x"05750509", +2759 => x"70810509", +2760 => x"060a0981", +2761 => x"06ff0509", +2762 => x"d20bf705", +2763 => x"06840105", +2764 => x"05048c14", +2765 => x"08708c19", +2766 => x"0c748819", +2767 => x"0c778812", +2768 => x"0c55768c", +2769 => x"150c7951", +2770 => x"f6cb3f8b", +2771 => x"3d0d0476", +2772 => x"08777131", +2773 => x"58760588", +2774 => x"18085656", +2775 => x"74098105", +2776 => x"818bb405", +2777 => x"09708105", +2778 => x"09060a81", +2779 => x"06ff0509", +2780 => x"80f30bf7", +2781 => x"05068401", +2782 => x"0505048c", +2783 => x"1708708c", +2784 => x"170c7588", +2785 => x"120c53fc", +2786 => x"8d398814", +2787 => x"088c1508", +2788 => x"708c130c", +2789 => x"5988190c", +2790 => x"fce93975", +2791 => x"832a7054", +2792 => x"54807424", +2793 => x"ff050981", +2794 => x"c00bf705", +2795 => x"06840105", +2796 => x"05047282", +2797 => x"2c81712b", +2798 => x"818bb008", +2799 => x"07818bac", +2800 => x"0b84050c", +2801 => x"74101010", +2802 => x"818bac05", +2803 => x"88110871", +2804 => x"8c1b0c70", +2805 => x"881b0c79", +2806 => x"88130c56", +2807 => x"5a55768c", +2808 => x"150cfee2", +2809 => x"398159fb", +2810 => x"ad397716", +2811 => x"73810654", +2812 => x"55720970", +2813 => x"81050906", +2814 => x"0a098106", +2815 => x"ff0509a0", +2816 => x"0bf70506", +2817 => x"84010505", +2818 => x"04760877", +2819 => x"71315875", +2820 => x"058c1808", +2821 => x"88190871", +2822 => x"8c120c88", +2823 => x"120c5555", +2824 => x"74810784", +2825 => x"180c7681", +2826 => x"8bac0b88", +2827 => x"050c818b", +2828 => x"a8087526", +2829 => x"ff0509fe", +2830 => x"8d0bf705", +2831 => x"06840105", +2832 => x"0504818b", +2833 => x"a4085279", +2834 => x"51f7d23f", +2835 => x"7951f4c5", +2836 => x"3ffdf839", +2837 => x"81778c17", +2838 => x"0c778817", +2839 => x"0c758c19", +2840 => x"0c758819", +2841 => x"0c59fb9b", +2842 => x"39831470", +2843 => x"822c8171", +2844 => x"2b818bb0", +2845 => x"0807818b", +2846 => x"ac0b8405", +2847 => x"0c751010", +2848 => x"10818bac", +2849 => x"05881108", +2850 => x"718c1c0c", +2851 => x"70881c0c", +2852 => x"7a88130c", +2853 => x"575b5653", +2854 => x"fec43980", +2855 => x"7324ff05", +2856 => x"09ab0bf7", +2857 => x"05068401", +2858 => x"05050472", +2859 => x"822c8171", +2860 => x"2b818bb0", +2861 => x"0807818b", +2862 => x"ac0b8405", +2863 => x"0c58748c", +2864 => x"180c7388", +2865 => x"180c7688", +2866 => x"160cfcf6", +2867 => x"39831370", +2868 => x"822c8171", +2869 => x"2b818bb0", +2870 => x"0807818b", +2871 => x"ac0b8405", +2872 => x"0c5953da", +2873 => x"39707070", +2874 => x"81eaf808", +2875 => x"51700970", +2876 => x"81050906", +2877 => x"0a098106", +2878 => x"ff050992", +2879 => x"0bf70506", +2880 => x"84010505", +2881 => x"0481eb80", +2882 => x"7081eaf8", +2883 => x"0c517411", +2884 => x"52ff5371", +2885 => x"87fb8080", +2886 => x"26ff0509", +2887 => x"900bf705", +2888 => x"06840105", +2889 => x"05047181", +2890 => x"eaf80c70", +2891 => x"5372800c", +2892 => x"50505004", +2893 => x"70707070", +2894 => x"800b818a", +2895 => x"dc085454", +2896 => x"72098105", +2897 => x"81050970", +2898 => x"81050906", +2899 => x"0a8106ff", +2900 => x"0509a50b", +2901 => x"f7050684", +2902 => x"01050504", +2903 => x"7381eafc", +2904 => x"0cffb7b3", +2905 => x"3fffad98", +2906 => x"3f819ab4", +2907 => x"528151c5", +2908 => x"803f8008", +2909 => x"518cbe3f", +2910 => x"7281eafc", +2911 => x"0cffb797", +2912 => x"3fffacfc", +2913 => x"3f819ab4", +2914 => x"528151c4", +2915 => x"e43f8008", +2916 => x"518ca23f", +2917 => x"00ff3900", +2918 => x"ff39f53d", +2919 => x"0d7e6081", +2920 => x"eafc0870", +2921 => x"5b585b5b", +2922 => x"75097081", +2923 => x"0509060a", +2924 => x"098106ff", +2925 => x"050980fb", +2926 => x"0bf70506", +2927 => x"84010505", +2928 => x"04777a25", +2929 => x"ff050980", +2930 => x"cc0bf705", +2931 => x"06840105", +2932 => x"0504771b", +2933 => x"70337081", +2934 => x"ff065858", +2935 => x"59750981", +2936 => x"058a0509", +2937 => x"70810509", +2938 => x"060a8106", +2939 => x"ff0509ac", +2940 => x"0bf70506", +2941 => x"84010505", +2942 => x"047681ff", +2943 => x"0651ffb5", +2944 => x"e23f8118", +2945 => x"58797824", +2946 => x"ff0509c6", +2947 => x"0bf70506", +2948 => x"84010505", +2949 => x"0479800c", +2950 => x"8d3d0d04", +2951 => x"8d51ffb5", +2952 => x"c23f7833", +2953 => x"7081ff06", +2954 => x"5257ffb5", +2955 => x"b63f8118", +2956 => x"58d33979", +2957 => x"557a547d", +2958 => x"5385528d", +2959 => x"3dfc0551", +2960 => x"ffb4eb3f", +2961 => x"8008568a", +2962 => x"e53f7b80", +2963 => x"080c7580", +2964 => x"0c8d3d0d", +2965 => x"04f63d0d", +2966 => x"7d7f81ea", +2967 => x"fc08705a", +2968 => x"585a5a75", +2969 => x"09708105", +2970 => x"09060a09", +2971 => x"8106ff05", +2972 => x"0981930b", +2973 => x"f7050684", +2974 => x"01050504", +2975 => x"767925ff", +2976 => x"050980f4", +2977 => x"0bf70506", +2978 => x"84010505", +2979 => x"04761a58", +2980 => x"ffb49d3f", +2981 => x"80087834", +2982 => x"800b8008", +2983 => x"81ff0657", +2984 => x"58750981", +2985 => x"058a0509", +2986 => x"70810509", +2987 => x"060a8106", +2988 => x"ff050980", +2989 => x"cc0bf705", +2990 => x"06840105", +2991 => x"0504758d", +2992 => x"32703070", +2993 => x"80257a07", +2994 => x"51515675", +2995 => x"09708105", +2996 => x"09060a09", +2997 => x"8106ff05", +2998 => x"0980cd0b", +2999 => x"f7050684", +3000 => x"01050504", +3001 => x"81175778", +3002 => x"7724ff05", +3003 => x"09ff9e0b", +3004 => x"f7050684", +3005 => x"01050504", +3006 => x"76567580", +3007 => x"0c8c3d0d", +3008 => x"048158ff", +3009 => x"b9397855", +3010 => x"79547c53", +3011 => x"84528c3d", +3012 => x"fc0551ff", +3013 => x"b3983f80", +3014 => x"08568992", +3015 => x"3f7a8008", +3016 => x"0c75800c", +3017 => x"8c3d0d04", +3018 => x"811756ce", +3019 => x"39f93d0d", +3020 => x"795781ea", +3021 => x"fc080970", +3022 => x"81050906", +3023 => x"0a8106ff", +3024 => x"0509b50b", +3025 => x"f7050684", +3026 => x"01050504", +3027 => x"76518d88", +3028 => x"3f7b567a", +3029 => x"55800881", +3030 => x"05547653", +3031 => x"8252893d", +3032 => x"fc0551ff", +3033 => x"b2c83f80", +3034 => x"085788c2", +3035 => x"3f778008", +3036 => x"0c76800c", +3037 => x"893d0d04", +3038 => x"88b43f85", +3039 => x"0b80080c", +3040 => x"ff0b800c", +3041 => x"893d0d04", +3042 => x"fb3d0d81", +3043 => x"eafc0870", +3044 => x"56547309", +3045 => x"70810509", +3046 => x"060a0981", +3047 => x"06ff0509", +3048 => x"900bf705", +3049 => x"06840105", +3050 => x"05047480", +3051 => x"0c873d0d", +3052 => x"04775383", +3053 => x"52873dfc", +3054 => x"0551ffb1", +3055 => x"f13f8008", +3056 => x"5487eb3f", +3057 => x"7580080c", +3058 => x"73800c87", +3059 => x"3d0d04ff", +3060 => x"0b800c04", +3061 => x"fb3d0d77", +3062 => x"5581eafc", +3063 => x"08097081", +3064 => x"0509060a", +3065 => x"8106ff05", +3066 => x"09b10bf7", +3067 => x"05068401", +3068 => x"05050474", +3069 => x"518be13f", +3070 => x"80088105", +3071 => x"54745387", +3072 => x"52873dfc", +3073 => x"0551ffb1", +3074 => x"a53f8008", +3075 => x"55879f3f", +3076 => x"7580080c", +3077 => x"74800c87", +3078 => x"3d0d0487", +3079 => x"913f850b", +3080 => x"80080cff", +3081 => x"0b800c87", +3082 => x"3d0d04fa", +3083 => x"3d0d81ea", +3084 => x"fc080970", +3085 => x"81050906", +3086 => x"0a8106ff", +3087 => x"0509ab0b", +3088 => x"f7050684", +3089 => x"01050504", +3090 => x"7a557954", +3091 => x"78538652", +3092 => x"883dfc05", +3093 => x"51ffb0d6", +3094 => x"3f800856", +3095 => x"86d03f76", +3096 => x"80080c75", +3097 => x"800c883d", +3098 => x"0d0486c2", +3099 => x"3f9d0b80", +3100 => x"080cff0b", +3101 => x"800c883d", +3102 => x"0d04f73d", +3103 => x"0d7b7d5b", +3104 => x"59bc5380", +3105 => x"52795188", +3106 => x"cd3f8070", +3107 => x"56579856", +3108 => x"74197033", +3109 => x"70782b79", +3110 => x"078118f8", +3111 => x"1a5a5859", +3112 => x"55588475", +3113 => x"24ff0509", +3114 => x"e70bf705", +3115 => x"06840105", +3116 => x"0504767a", +3117 => x"23841958", +3118 => x"80705657", +3119 => x"98567418", +3120 => x"70337078", +3121 => x"2b790781", +3122 => x"18f81a5a", +3123 => x"58595154", +3124 => x"847524ff", +3125 => x"0509e70b", +3126 => x"f7050684", +3127 => x"01050504", +3128 => x"76821b23", +3129 => x"88195880", +3130 => x"70565798", +3131 => x"56741870", +3132 => x"3370782b", +3133 => x"79078118", +3134 => x"f81a5a58", +3135 => x"59515484", +3136 => x"7524ff05", +3137 => x"09e70bf7", +3138 => x"05068401", +3139 => x"05050476", +3140 => x"841b0c8c", +3141 => x"19588070", +3142 => x"56579856", +3143 => x"74187033", +3144 => x"70782b79", +3145 => x"078118f8", +3146 => x"1a5a5859", +3147 => x"51548475", +3148 => x"24ff0509", +3149 => x"e70bf705", +3150 => x"06840105", +3151 => x"05047688", +3152 => x"1b239019", +3153 => x"58807056", +3154 => x"57985674", +3155 => x"18703370", +3156 => x"782b7907", +3157 => x"8118f81a", +3158 => x"5a585951", +3159 => x"54847524", +3160 => x"ff0509e7", +3161 => x"0bf70506", +3162 => x"84010505", +3163 => x"04768a1b", +3164 => x"23941958", +3165 => x"80705657", +3166 => x"98567418", +3167 => x"70337078", +3168 => x"2b790781", +3169 => x"18f81a5a", +3170 => x"58595154", +3171 => x"847524ff", +3172 => x"0509e70b", +3173 => x"f7050684", +3174 => x"01050504", +3175 => x"768c1b23", +3176 => x"98195880", +3177 => x"70565798", +3178 => x"56741870", +3179 => x"3370782b", +3180 => x"79078118", +3181 => x"f81a5a58", +3182 => x"59515484", +3183 => x"7524ff05", +3184 => x"09e70bf7", +3185 => x"05068401", +3186 => x"05050476", +3187 => x"8e1b239c", +3188 => x"19588070", +3189 => x"5657b856", +3190 => x"74187033", +3191 => x"70782b79", +3192 => x"078118f8", +3193 => x"1a5a5859", +3194 => x"5a548875", +3195 => x"24ff0509", +3196 => x"e70bf705", +3197 => x"06840105", +3198 => x"05047690", +3199 => x"1b0c8b3d", +3200 => x"0d04e93d", +3201 => x"0d6a81ea", +3202 => x"fc085757", +3203 => x"75097081", +3204 => x"0509060a", +3205 => x"098106ff", +3206 => x"05099b0b", +3207 => x"f7050684", +3208 => x"01050504", +3209 => x"80c0800b", +3210 => x"84180c75", +3211 => x"ac180c75", +3212 => x"800c993d", +3213 => x"0d04893d", +3214 => x"70556a54", +3215 => x"558a5299", +3216 => x"3dffbc05", +3217 => x"51fface6", +3218 => x"3f800877", +3219 => x"53755256", +3220 => x"fca83f82", +3221 => x"d93f7780", +3222 => x"080c7580", +3223 => x"0c993d0d", +3224 => x"04e93d0d", +3225 => x"695781ea", +3226 => x"fc080970", +3227 => x"81050906", +3228 => x"0a8106ff", +3229 => x"0509be0b", +3230 => x"f7050684", +3231 => x"01050504", +3232 => x"765186d4", +3233 => x"3f893d70", +3234 => x"56800881", +3235 => x"05557754", +3236 => x"568f5299", +3237 => x"3dffbc05", +3238 => x"51ffac92", +3239 => x"3f80086b", +3240 => x"53765257", +3241 => x"fbd43f82", +3242 => x"853f7780", +3243 => x"080c7680", +3244 => x"0c993d0d", +3245 => x"0481f73f", +3246 => x"850b8008", +3247 => x"0cff0b80", +3248 => x"0c993d0d", +3249 => x"04fc3d0d", +3250 => x"815481ea", +3251 => x"fc080970", +3252 => x"81050906", +3253 => x"0a098106", +3254 => x"ff050990", +3255 => x"0bf70506", +3256 => x"84010505", +3257 => x"0473800c", +3258 => x"863d0d04", +3259 => x"765397b9", +3260 => x"52863dfc", +3261 => x"0551ffab", +3262 => x"b53f8008", +3263 => x"5481af3f", +3264 => x"7480080c", +3265 => x"73800c86", +3266 => x"3d0d04f4", +3267 => x"3d0d7e81", +3268 => x"9ae00870", +3269 => x"0881ff06", +3270 => x"913df805", +3271 => x"54515959", +3272 => x"ffacf63f", +3273 => x"77578054", +3274 => x"76557b7d", +3275 => x"58527653", +3276 => x"8e3df005", +3277 => x"5186e23f", +3278 => x"797b5879", +3279 => x"0c76841a", +3280 => x"0c78800c", +3281 => x"8e3d0d04", +3282 => x"f43d0d7e", +3283 => x"819ae008", +3284 => x"70087081", +3285 => x"ff06923d", +3286 => x"f8055551", +3287 => x"5a5759ff", +3288 => x"acb73f77", +3289 => x"57800b8b", +3290 => x"3d595476", +3291 => x"557b7d58", +3292 => x"52765377", +3293 => x"5186a23f", +3294 => x"8056bd84", +3295 => x"c0765555", +3296 => x"797b5852", +3297 => x"76537751", +3298 => x"868f3f7a", +3299 => x"57780970", +3300 => x"81050906", +3301 => x"0a8106ff", +3302 => x"05098c0b", +3303 => x"f7050684", +3304 => x"01050504", +3305 => x"76790c76", +3306 => x"800c8e3d", +3307 => x"0d048193", +3308 => x"b408800c", +3309 => x"04f73d0d", +3310 => x"7b8193b4", +3311 => x"0882c811", +3312 => x"085a545a", +3313 => x"77097081", +3314 => x"0509060a", +3315 => x"8106ff05", +3316 => x"0981ac0b", +3317 => x"f7050684", +3318 => x"01050504", +3319 => x"81881884", +3320 => x"1908ff05", +3321 => x"81712b59", +3322 => x"55598074", +3323 => x"24ff0509", +3324 => x"81d20bf7", +3325 => x"05068401", +3326 => x"05050480", +3327 => x"7424ff05", +3328 => x"0980db0b", +3329 => x"f7050684", +3330 => x"01050504", +3331 => x"73822b78", +3332 => x"11880556", +3333 => x"56818019", +3334 => x"08770653", +3335 => x"72097081", +3336 => x"0509060a", +3337 => x"8106ff05", +3338 => x"0980f30b", +3339 => x"f7050684", +3340 => x"01050504", +3341 => x"78167008", +3342 => x"53537951", +3343 => x"74085372", +3344 => x"2dff14fc", +3345 => x"17fc1779", +3346 => x"812c5a57", +3347 => x"57547380", +3348 => x"25ff0509", +3349 => x"c00bf705", +3350 => x"06840105", +3351 => x"05047708", +3352 => x"58770970", +3353 => x"81050906", +3354 => x"0a098106", +3355 => x"ff0509fe", +3356 => x"eb0bf705", +3357 => x"06840105", +3358 => x"05048193", +3359 => x"b40853bc", +3360 => x"13080970", +3361 => x"81050906", +3362 => x"0a098106", +3363 => x"ff0509b9", +3364 => x"0bf70506", +3365 => x"84010505", +3366 => x"047951f1", +3367 => x"f73f7408", +3368 => x"53722dff", +3369 => x"14fc17fc", +3370 => x"1779812c", +3371 => x"5a575754", +3372 => x"738025ff", +3373 => x"0509fedd", +3374 => x"0bf70506", +3375 => x"84010505", +3376 => x"04ff9b39", +3377 => x"8057feb3", +3378 => x"397251bc", +3379 => x"13085473", +3380 => x"2d7951f1", +3381 => x"bf3ffb3d", +3382 => x"0d777a71", +3383 => x"028c05a3", +3384 => x"05335854", +3385 => x"54568373", +3386 => x"27ff0509", +3387 => x"819d0bf7", +3388 => x"05068401", +3389 => x"05050475", +3390 => x"83065170", +3391 => x"09708105", +3392 => x"09060a09", +3393 => x"8106ff05", +3394 => x"0981800b", +3395 => x"f7050684", +3396 => x"01050504", +3397 => x"74882b75", +3398 => x"07707190", +3399 => x"2b075551", +3400 => x"8f7327ff", +3401 => x"0509ba0b", +3402 => x"f7050684", +3403 => x"01050504", +3404 => x"73727084", +3405 => x"05540c71", +3406 => x"74717084", +3407 => x"05530c74", +3408 => x"71708405", +3409 => x"530c7471", +3410 => x"70840553", +3411 => x"0cf01454", +3412 => x"52728f26", +3413 => x"ff0509d8", +3414 => x"0bf70506", +3415 => x"84010505", +3416 => x"04837327", +3417 => x"ff0509a3", +3418 => x"0bf70506", +3419 => x"84010505", +3420 => x"04737270", +3421 => x"8405540c", +3422 => x"fc135372", +3423 => x"8326ff05", +3424 => x"09ef0bf7", +3425 => x"05068401", +3426 => x"050504ff", +3427 => x"13517009", +3428 => x"8105ff05", +3429 => x"09708105", +3430 => x"09060a81", +3431 => x"06ff0509", +3432 => x"b00bf705", +3433 => x"06840105", +3434 => x"05047472", +3435 => x"70810554", +3436 => x"34ff1151", +3437 => x"70098105", +3438 => x"ff050970", +3439 => x"81050906", +3440 => x"0a098106", +3441 => x"ff0509e2", +3442 => x"0bf70506", +3443 => x"84010505", +3444 => x"0475800c", +3445 => x"873d0d04", +3446 => x"70707070", +3447 => x"75707183", +3448 => x"06535552", +3449 => x"70097081", +3450 => x"0509060a", +3451 => x"098106ff", +3452 => x"050980e3", +3453 => x"0bf70506", +3454 => x"84010505", +3455 => x"04717008", +3456 => x"7009f7fb", +3457 => x"fdff1206", +3458 => x"f8848281", +3459 => x"80065452", +3460 => x"53710970", +3461 => x"81050906", +3462 => x"0a098106", +3463 => x"ff0509b5", +3464 => x"0bf70506", +3465 => x"84010505", +3466 => x"04841370", +3467 => x"087009f7", +3468 => x"fbfdff12", +3469 => x"06f88482", +3470 => x"81800654", +3471 => x"52537109", +3472 => x"70810509", +3473 => x"060a8106", +3474 => x"ff0509dd", +3475 => x"0bf70506", +3476 => x"84010505", +3477 => x"04725271", +3478 => x"33537209", +3479 => x"70810509", +3480 => x"060a8106", +3481 => x"ff0509a7", +3482 => x"0bf70506", +3483 => x"84010505", +3484 => x"04811270", +3485 => x"33545272", +3486 => x"09708105", +3487 => x"09060a09", +3488 => x"8106ff05", +3489 => x"09eb0bf7", +3490 => x"05068401", +3491 => x"05050471", +3492 => x"7431800c", +3493 => x"50505050", +3494 => x"04e43d0d", +3495 => x"6ea13d08", +3496 => x"a33d0859", +3497 => x"575f8076", +3498 => x"4d774ea3", +3499 => x"3d08a53d", +3500 => x"08574b75", +3501 => x"4c5e7d6c", +3502 => x"24ff0509", +3503 => x"8b860bf7", +3504 => x"05068401", +3505 => x"05050480", +3506 => x"6a24ff05", +3507 => x"098b9b0b", +3508 => x"f7050684", +3509 => x"01050504", +3510 => x"696b5856", +3511 => x"6b6d5d46", +3512 => x"7b477544", +3513 => x"76456464", +3514 => x"68685c5c", +3515 => x"56567409", +3516 => x"70810509", +3517 => x"060a0981", +3518 => x"06ff0509", +3519 => x"82ee0bf7", +3520 => x"05068401", +3521 => x"05050478", +3522 => x"7627ff05", +3523 => x"09848f0b", +3524 => x"f7050684", +3525 => x"01050504", +3526 => x"7581ff26", +3527 => x"832b5583", +3528 => x"ffff7627", +3529 => x"ff05099f", +3530 => x"0bf70506", +3531 => x"84010505", +3532 => x"049055fe", +3533 => x"800a7627", +3534 => x"ff05098b", +3535 => x"0bf70506", +3536 => x"84010505", +3537 => x"04985575", +3538 => x"752a8188", +3539 => x"88057033", +3540 => x"a0773171", +3541 => x"31575557", +3542 => x"74097081", +3543 => x"0509060a", +3544 => x"8106ff05", +3545 => x"099d0bf7", +3546 => x"05068401", +3547 => x"05050475", +3548 => x"752ba076", +3549 => x"317a772b", +3550 => x"7c722a07", +3551 => x"7c782b5d", +3552 => x"5b595675", +3553 => x"902a7683", +3554 => x"ffff0671", +3555 => x"547a5359", +3556 => x"578c803f", +3557 => x"80085b8b", +3558 => x"e93f8008", +3559 => x"80087929", +3560 => x"7c902b7c", +3561 => x"902a0756", +3562 => x"56597375", +3563 => x"27ff0509", +3564 => x"b20bf705", +3565 => x"06840105", +3566 => x"05048008", +3567 => x"ff057615", +3568 => x"55597574", +3569 => x"26ff0509", +3570 => x"9a0bf705", +3571 => x"06840105", +3572 => x"05047474", +3573 => x"26ff0509", +3574 => x"8b9f0bf7", +3575 => x"05068401", +3576 => x"05050476", +3577 => x"52737531", +3578 => x"518ba83f", +3579 => x"8008558b", +3580 => x"913f8008", +3581 => x"80087929", +3582 => x"7b83ffff", +3583 => x"0677902b", +3584 => x"07565957", +3585 => x"737827ff", +3586 => x"0509a90b", +3587 => x"f7050684", +3588 => x"01050504", +3589 => x"8008ff05", +3590 => x"76155557", +3591 => x"757426ff", +3592 => x"0509910b", +3593 => x"f7050684", +3594 => x"01050504", +3595 => x"77742677", +3596 => x"71315856", +3597 => x"78902b77", +3598 => x"0758805b", +3599 => x"7a407741", +3600 => x"7f615654", +3601 => x"7d097081", +3602 => x"0509060a", +3603 => x"098106ff", +3604 => x"050981ac", +3605 => x"0bf70506", +3606 => x"84010505", +3607 => x"04737f0c", +3608 => x"747f8405", +3609 => x"0c7e800c", +3610 => x"9e3d0d04", +3611 => x"80705c58", +3612 => x"747926ff", +3613 => x"0509c50b", +3614 => x"f7050684", +3615 => x"01050504", +3616 => x"7481ff26", +3617 => x"832b5774", +3618 => x"83ffff26", +3619 => x"ff050983", +3620 => x"e90bf705", +3621 => x"06840105", +3622 => x"05047477", +3623 => x"2a818888", +3624 => x"057033a0", +3625 => x"79317131", +3626 => x"595c5d76", +3627 => x"09708105", +3628 => x"09060a09", +3629 => x"8106ff05", +3630 => x"0983ff0b", +3631 => x"f7050684", +3632 => x"01050504", +3633 => x"76547479", +3634 => x"27ff0509", +3635 => x"8b0bf705", +3636 => x"06840105", +3637 => x"05048154", +3638 => x"79762774", +3639 => x"07598158", +3640 => x"78097081", +3641 => x"0509060a", +3642 => x"098106ff", +3643 => x"0509feca", +3644 => x"0bf70506", +3645 => x"84010505", +3646 => x"04765880", +3647 => x"5bfebd39", +3648 => x"73527453", +3649 => x"9e3de805", +3650 => x"51ffbff2", +3651 => x"3f676956", +3652 => x"7f0c747f", +3653 => x"84050c7e", +3654 => x"800c9e3d", +3655 => x"0d047509", +3656 => x"70810509", +3657 => x"060a8106", +3658 => x"ff050982", +3659 => x"c00bf705", +3660 => x"06840105", +3661 => x"05047581", +3662 => x"ff26832b", +3663 => x"5583ffff", +3664 => x"7627ff05", +3665 => x"099f0bf7", +3666 => x"05068401", +3667 => x"05050490", +3668 => x"55fe800a", +3669 => x"7627ff05", +3670 => x"098b0bf7", +3671 => x"05068401", +3672 => x"05050498", +3673 => x"5575752a", +3674 => x"81888805", +3675 => x"7033a077", +3676 => x"31713157", +3677 => x"5e547409", +3678 => x"70810509", +3679 => x"060a0981", +3680 => x"06ff0509", +3681 => x"86810bf7", +3682 => x"05068401", +3683 => x"05050478", +3684 => x"76315481", +3685 => x"76902a77", +3686 => x"83ffff06", +3687 => x"5f5d5b7b", +3688 => x"52735187", +3689 => x"ee3f8008", +3690 => x"5787d73f", +3691 => x"80088008", +3692 => x"7e297890", +3693 => x"2b7c902a", +3694 => x"07565659", +3695 => x"737527ff", +3696 => x"0509b20b", +3697 => x"f7050684", +3698 => x"01050504", +3699 => x"8008ff05", +3700 => x"76155559", +3701 => x"757426ff", +3702 => x"05099a0b", +3703 => x"f7050684", +3704 => x"01050504", +3705 => x"747426ff", +3706 => x"05098784", +3707 => x"0bf70506", +3708 => x"84010505", +3709 => x"047b5273", +3710 => x"75315187", +3711 => x"963f8008", +3712 => x"5586ff3f", +3713 => x"80088008", +3714 => x"7e297b83", +3715 => x"ffff0677", +3716 => x"902b0756", +3717 => x"59577378", +3718 => x"27ff0509", +3719 => x"a90bf705", +3720 => x"06840105", +3721 => x"05048008", +3722 => x"ff057615", +3723 => x"55577574", +3724 => x"26ff0509", +3725 => x"910bf705", +3726 => x"06840105", +3727 => x"05047774", +3728 => x"26777131", +3729 => x"585a7890", +3730 => x"2b77077b", +3731 => x"41417f61", +3732 => x"56547d09", +3733 => x"70810509", +3734 => x"060a8106", +3735 => x"ff0509fb", +3736 => x"fc0bf705", +3737 => x"06840105", +3738 => x"0504fd94", +3739 => x"39755281", +3740 => x"51868f3f", +3741 => x"800856fd", +3742 => x"bd399057", +3743 => x"fe800a75", +3744 => x"27ff0509", +3745 => x"fc940bf7", +3746 => x"05068401", +3747 => x"05050498", +3748 => x"75712a81", +3749 => x"88880570", +3750 => x"33a07331", +3751 => x"7131535d", +3752 => x"5e577609", +3753 => x"70810509", +3754 => x"060a8106", +3755 => x"ff0509fc", +3756 => x"930bf705", +3757 => x"06840105", +3758 => x"0504a077", +3759 => x"3175782b", +3760 => x"77722a07", +3761 => x"77792b7b", +3762 => x"7a2b7d74", +3763 => x"2a077d7b", +3764 => x"2b73902a", +3765 => x"7483ffff", +3766 => x"0671597f", +3767 => x"772a585e", +3768 => x"5c415f58", +3769 => x"5c5485ab", +3770 => x"3f800854", +3771 => x"85943f80", +3772 => x"08800879", +3773 => x"2975902b", +3774 => x"7e902a07", +3775 => x"56565973", +3776 => x"7527ff05", +3777 => x"09b70bf7", +3778 => x"05068401", +3779 => x"05050480", +3780 => x"08ff057b", +3781 => x"1555597a", +3782 => x"7426ff05", +3783 => x"099f0bf7", +3784 => x"05068401", +3785 => x"05050473", +3786 => x"7527ff05", +3787 => x"098f0bf7", +3788 => x"05068401", +3789 => x"050504ff", +3790 => x"197b1555", +3791 => x"59765273", +3792 => x"75315184", +3793 => x"ce3f8008", +3794 => x"5584b73f", +3795 => x"80088008", +3796 => x"79297d83", +3797 => x"ffff0677", +3798 => x"902b0756", +3799 => x"59577378", +3800 => x"27ff0509", +3801 => x"b70bf705", +3802 => x"06840105", +3803 => x"05048008", +3804 => x"ff057b15", +3805 => x"55577a74", +3806 => x"26ff0509", +3807 => x"9f0bf705", +3808 => x"06840105", +3809 => x"05047378", +3810 => x"27ff0509", +3811 => x"8f0bf705", +3812 => x"06840105", +3813 => x"0504ff17", +3814 => x"7b155557", +3815 => x"73783179", +3816 => x"902b7807", +3817 => x"7083ffff", +3818 => x"0671902a", +3819 => x"7983ffff", +3820 => x"067a902a", +3821 => x"73722973", +3822 => x"73297473", +3823 => x"29767429", +3824 => x"73902a05", +3825 => x"72055755", +3826 => x"435f5b58", +3827 => x"5a57595a", +3828 => x"747c27ff", +3829 => x"05098e0b", +3830 => x"f7050684", +3831 => x"01050504", +3832 => x"84808017", +3833 => x"5774902a", +3834 => x"177983ff", +3835 => x"ff067684", +3836 => x"80802905", +3837 => x"5757767a", +3838 => x"26ff0509", +3839 => x"bf0bf705", +3840 => x"06840105", +3841 => x"0504767a", +3842 => x"32703070", +3843 => x"72078025", +3844 => x"565a5b7c", +3845 => x"7627ff05", +3846 => x"09f89f0b", +3847 => x"f7050684", +3848 => x"01050504", +3849 => x"73097081", +3850 => x"0509060a", +3851 => x"8106ff05", +3852 => x"09f8870b", +3853 => x"f7050684", +3854 => x"01050504", +3855 => x"ff185880", +3856 => x"5bf7f939", +3857 => x"ff765377", +3858 => x"549f3de8", +3859 => x"05525eff", +3860 => x"b9ac3f67", +3861 => x"69574c75", +3862 => x"4d698025", +3863 => x"ff0509f4", +3864 => x"f70bf705", +3865 => x"06840105", +3866 => x"05047d09", +3867 => x"6a6c5c53", +3868 => x"7a549f3d", +3869 => x"e805525e", +3870 => x"ffb9833f", +3871 => x"6769714c", +3872 => x"704d5856", +3873 => x"f4d639a0", +3874 => x"75317676", +3875 => x"2b7a772b", +3876 => x"7c732a07", +3877 => x"7c782b72", +3878 => x"902a7383", +3879 => x"ffff0671", +3880 => x"587e762a", +3881 => x"5742405d", +3882 => x"5d575881", +3883 => x"e63f8008", +3884 => x"5781cf3f", +3885 => x"80088008", +3886 => x"7e297890", +3887 => x"2b7d902a", +3888 => x"07565659", +3889 => x"737527ff", +3890 => x"0509b70b", +3891 => x"f7050684", +3892 => x"01050504", +3893 => x"8008ff05", +3894 => x"76155559", +3895 => x"757426ff", +3896 => x"05099f0b", +3897 => x"f7050684", +3898 => x"01050504", +3899 => x"737527ff", +3900 => x"05098f0b", +3901 => x"f7050684", +3902 => x"01050504", +3903 => x"ff197615", +3904 => x"55597b52", +3905 => x"73753151", +3906 => x"81893f80", +3907 => x"085580f2", +3908 => x"3f800880", +3909 => x"087e297c", +3910 => x"83ffff06", +3911 => x"7078902b", +3912 => x"07515658", +3913 => x"58737727", +3914 => x"ff0509b7", +3915 => x"0bf70506", +3916 => x"84010505", +3917 => x"048008ff", +3918 => x"05761555", +3919 => x"58757426", +3920 => x"ff05099f", +3921 => x"0bf70506", +3922 => x"84010505", +3923 => x"04737727", +3924 => x"ff05098f", +3925 => x"0bf70506", +3926 => x"84010505", +3927 => x"04ff1876", +3928 => x"15555878", +3929 => x"902b7807", +3930 => x"74783155", +3931 => x"5bf8b039", +3932 => x"ff197615", +3933 => x"5559f8fd", +3934 => x"39ff1976", +3935 => x"155559f4", +3936 => x"e2397070", +3937 => x"70805375", +3938 => x"527451ff", +3939 => x"b9d13f50", +3940 => x"50500470", +3941 => x"70708153", +3942 => x"75527451", +3943 => x"ffb9c03f", +3944 => x"50505004", +3945 => x"7070819a", +3946 => x"bc0bfc05", +3947 => x"70085252", +3948 => x"70098105", +3949 => x"ff050970", +3950 => x"81050906", +3951 => x"0a8106ff", +3952 => x"0509ae0b", +3953 => x"f7050684", +3954 => x"01050504", +3955 => x"702dfc12", +3956 => x"70085252", +3957 => x"70098105", +3958 => x"ff050970", +3959 => x"81050906", +3960 => x"0a098106", +3961 => x"ff0509e4", +3962 => x"0bf70506", +3963 => x"84010505", +3964 => x"04505004", +3965 => x"04ff98cc", +3966 => x"3f040000", +3967 => x"30313233", +3968 => x"34353637", +3969 => x"38390000", +3970 => x"44485259", +3971 => x"53544f4e", +3972 => x"45205052", +3973 => x"4f475241", +3974 => x"4d2c2053", +3975 => x"4f4d4520", +3976 => x"53545249", +3977 => x"4e470000", +3978 => x"44485259", +3979 => x"53544f4e", +3980 => x"45205052", +3981 => x"4f475241", +3982 => x"4d2c2031", +3983 => x"27535420", +3984 => x"53545249", +3985 => x"4e470000", +3986 => x"44687279", +3987 => x"73746f6e", +3988 => x"65204265", +3989 => x"6e63686d", +3990 => x"61726b2c", +3991 => x"20566572", +3992 => x"73696f6e", +3993 => x"20322e31", +3994 => x"20284c61", +3995 => x"6e677561", +3996 => x"67653a20", +3997 => x"43290a00", +3998 => x"50726f67", +3999 => x"72616d20", +4000 => x"636f6d70", +4001 => x"696c6564", +4002 => x"20776974", +4003 => x"68202772", +4004 => x"65676973", +4005 => x"74657227", +4006 => x"20617474", +4007 => x"72696275", +4008 => x"74650a00", +4009 => x"45786563", +4010 => x"7574696f", +4011 => x"6e207374", +4012 => x"61727473", +4013 => x"2c202564", +4014 => x"2072756e", +4015 => x"73207468", +4016 => x"726f7567", +4017 => x"68204468", +4018 => x"72797374", +4019 => x"6f6e650a", +4020 => x"00000000", +4021 => x"44485259", +4022 => x"53544f4e", +4023 => x"45205052", +4024 => x"4f475241", +4025 => x"4d2c2032", +4026 => x"274e4420", +4027 => x"53545249", +4028 => x"4e470000", +4029 => x"45786563", +4030 => x"7574696f", +4031 => x"6e20656e", +4032 => x"64730a00", +4033 => x"46696e61", +4034 => x"6c207661", +4035 => x"6c756573", +4036 => x"206f6620", +4037 => x"74686520", +4038 => x"76617269", +4039 => x"61626c65", +4040 => x"73207573", +4041 => x"65642069", +4042 => x"6e207468", +4043 => x"65206265", +4044 => x"6e63686d", +4045 => x"61726b3a", +4046 => x"0a000000", +4047 => x"496e745f", +4048 => x"476c6f62", +4049 => x"3a202020", +4050 => x"20202020", +4051 => x"20202020", +4052 => x"2025640a", +4053 => x"00000000", +4054 => x"20202020", +4055 => x"20202020", +4056 => x"73686f75", +4057 => x"6c642062", +4058 => x"653a2020", +4059 => x"2025640a", +4060 => x"00000000", +4061 => x"426f6f6c", +4062 => x"5f476c6f", +4063 => x"623a2020", +4064 => x"20202020", +4065 => x"20202020", +4066 => x"2025640a", +4067 => x"00000000", +4068 => x"43685f31", +4069 => x"5f476c6f", +4070 => x"623a2020", +4071 => x"20202020", +4072 => x"20202020", +4073 => x"2025630a", +4074 => x"00000000", +4075 => x"20202020", +4076 => x"20202020", +4077 => x"73686f75", +4078 => x"6c642062", +4079 => x"653a2020", +4080 => x"2025630a", +4081 => x"00000000", +4082 => x"43685f32", +4083 => x"5f476c6f", +4084 => x"623a2020", +4085 => x"20202020", +4086 => x"20202020", +4087 => x"2025630a", +4088 => x"00000000", +4089 => x"4172725f", +4090 => x"315f476c", +4091 => x"6f625b38", +4092 => x"5d3a2020", +4093 => x"20202020", +4094 => x"2025640a", +4095 => x"00000000", +4096 => x"4172725f", +4097 => x"325f476c", +4098 => x"6f625b38", +4099 => x"5d5b375d", +4100 => x"3a202020", +4101 => x"2025640a", +4102 => x"00000000", +4103 => x"20202020", +4104 => x"20202020", +4105 => x"73686f75", +4106 => x"6c642062", +4107 => x"653a2020", +4108 => x"204e756d", +4109 => x"6265725f", +4110 => x"4f665f52", +4111 => x"756e7320", +4112 => x"2b203130", +4113 => x"0a000000", +4114 => x"5074725f", +4115 => x"476c6f62", +4116 => x"2d3e0a00", +4117 => x"20205074", +4118 => x"725f436f", +4119 => x"6d703a20", +4120 => x"20202020", +4121 => x"20202020", +4122 => x"2025640a", +4123 => x"00000000", +4124 => x"20202020", +4125 => x"20202020", +4126 => x"73686f75", +4127 => x"6c642062", +4128 => x"653a2020", +4129 => x"2028696d", +4130 => x"706c656d", +4131 => x"656e7461", +4132 => x"74696f6e", +4133 => x"2d646570", +4134 => x"656e6465", +4135 => x"6e74290a", +4136 => x"00000000", +4137 => x"20204469", +4138 => x"7363723a", +4139 => x"20202020", +4140 => x"20202020", +4141 => x"20202020", +4142 => x"2025640a", +4143 => x"00000000", +4144 => x"2020456e", +4145 => x"756d5f43", +4146 => x"6f6d703a", +4147 => x"20202020", +4148 => x"20202020", +4149 => x"2025640a", +4150 => x"00000000", +4151 => x"2020496e", +4152 => x"745f436f", +4153 => x"6d703a20", +4154 => x"20202020", +4155 => x"20202020", +4156 => x"2025640a", +4157 => x"00000000", +4158 => x"20205374", +4159 => x"725f436f", +4160 => x"6d703a20", +4161 => x"20202020", +4162 => x"20202020", +4163 => x"2025730a", +4164 => x"00000000", +4165 => x"20202020", +4166 => x"20202020", +4167 => x"73686f75", +4168 => x"6c642062", +4169 => x"653a2020", +4170 => x"20444852", +4171 => x"5953544f", +4172 => x"4e452050", +4173 => x"524f4752", +4174 => x"414d2c20", +4175 => x"534f4d45", +4176 => x"20535452", +4177 => x"494e470a", +4178 => x"00000000", +4179 => x"4e657874", +4180 => x"5f507472", +4181 => x"5f476c6f", +4182 => x"622d3e0a", +4183 => x"00000000", +4184 => x"20202020", +4185 => x"20202020", +4186 => x"73686f75", +4187 => x"6c642062", +4188 => x"653a2020", +4189 => x"2028696d", +4190 => x"706c656d", +4191 => x"656e7461", +4192 => x"74696f6e", +4193 => x"2d646570", +4194 => x"656e6465", +4195 => x"6e74292c", +4196 => x"2073616d", +4197 => x"65206173", +4198 => x"2061626f", +4199 => x"76650a00", +4200 => x"496e745f", +4201 => x"315f4c6f", +4202 => x"633a2020", +4203 => x"20202020", +4204 => x"20202020", +4205 => x"2025640a", +4206 => x"00000000", +4207 => x"496e745f", +4208 => x"325f4c6f", +4209 => x"633a2020", +4210 => x"20202020", +4211 => x"20202020", +4212 => x"2025640a", +4213 => x"00000000", +4214 => x"496e745f", +4215 => x"335f4c6f", +4216 => x"633a2020", +4217 => x"20202020", +4218 => x"20202020", +4219 => x"2025640a", +4220 => x"00000000", +4221 => x"456e756d", +4222 => x"5f4c6f63", +4223 => x"3a202020", +4224 => x"20202020", +4225 => x"20202020", +4226 => x"2025640a", +4227 => x"00000000", +4228 => x"5374725f", +4229 => x"315f4c6f", +4230 => x"633a2020", +4231 => x"20202020", +4232 => x"20202020", +4233 => x"2025730a", +4234 => x"00000000", +4235 => x"20202020", +4236 => x"20202020", +4237 => x"73686f75", +4238 => x"6c642062", +4239 => x"653a2020", +4240 => x"20444852", +4241 => x"5953544f", +4242 => x"4e452050", +4243 => x"524f4752", +4244 => x"414d2c20", +4245 => x"31275354", +4246 => x"20535452", +4247 => x"494e470a", +4248 => x"00000000", +4249 => x"5374725f", +4250 => x"325f4c6f", +4251 => x"633a2020", +4252 => x"20202020", +4253 => x"20202020", +4254 => x"2025730a", +4255 => x"00000000", +4256 => x"20202020", +4257 => x"20202020", +4258 => x"73686f75", +4259 => x"6c642062", +4260 => x"653a2020", +4261 => x"20444852", +4262 => x"5953544f", +4263 => x"4e452050", +4264 => x"524f4752", +4265 => x"414d2c20", +4266 => x"32274e44", +4267 => x"20535452", +4268 => x"494e470a", +4269 => x"00000000", +4270 => x"55736572", +4271 => x"2074696d", +4272 => x"653a2025", +4273 => x"640a0000", +4274 => x"4d696372", +4275 => x"6f736563", +4276 => x"6f6e6473", +4277 => x"20666f72", +4278 => x"206f6e65", +4279 => x"2072756e", +4280 => x"20746872", +4281 => x"6f756768", +4282 => x"20446872", +4283 => x"7973746f", +4284 => x"6e653a20", +4285 => x"00000000", +4286 => x"2564200a", +4287 => x"00000000", +4288 => x"44687279", +4289 => x"73746f6e", +4290 => x"65732070", +4291 => x"65722053", +4292 => x"65636f6e", +4293 => x"643a2020", +4294 => x"20202020", +4295 => x"20202020", +4296 => x"20202020", +4297 => x"20202020", +4298 => x"20202020", +4299 => x"00000000", +4300 => x"56415820", +4301 => x"4d495053", +4302 => x"20726174", +4303 => x"696e6720", +4304 => x"2a203130", +4305 => x"3030203d", +4306 => x"20256420", +4307 => x"0a000000", +4308 => x"50726f67", +4309 => x"72616d20", +4310 => x"636f6d70", +4311 => x"696c6564", +4312 => x"20776974", +4313 => x"686f7574", +4314 => x"20277265", +4315 => x"67697374", +4316 => x"65722720", +4317 => x"61747472", +4318 => x"69627574", +4319 => x"650a0000", +4320 => x"4d656173", +4321 => x"75726564", +4322 => x"2074696d", +4323 => x"6520746f", +4324 => x"6f20736d", +4325 => x"616c6c20", +4326 => x"746f206f", +4327 => x"62746169", +4328 => x"6e206d65", +4329 => x"616e696e", +4330 => x"6766756c", +4331 => x"20726573", +4332 => x"756c7473", +4333 => x"0a000000", +4334 => x"506c6561", +4335 => x"73652069", +4336 => x"6e637265", +4337 => x"61736520", +4338 => x"6e756d62", +4339 => x"6572206f", +4340 => x"66207275", +4341 => x"6e730a00", +4342 => x"44485259", +4343 => x"53544f4e", +4344 => x"45205052", +4345 => x"4f475241", +4346 => x"4d2c2033", +4347 => x"27524420", +4348 => x"53545249", +4349 => x"4e470000", +4350 => x"43000000", +4351 => x"64756d6d", +4352 => x"792e6578", +4353 => x"65000000", +4354 => x"00010202", +4355 => x"03030303", +4356 => x"04040404", +4357 => x"04040404", +4358 => x"05050505", +4359 => x"05050505", +4360 => x"05050505", +4361 => x"05050505", +4362 => x"06060606", +4363 => x"06060606", +4364 => x"06060606", +4365 => x"06060606", +4366 => x"06060606", +4367 => x"06060606", +4368 => x"06060606", +4369 => x"06060606", +4370 => x"07070707", +4371 => x"07070707", +4372 => x"07070707", +4373 => x"07070707", +4374 => x"07070707", +4375 => x"07070707", +4376 => x"07070707", +4377 => x"07070707", +4378 => x"07070707", +4379 => x"07070707", +4380 => x"07070707", +4381 => x"07070707", +4382 => x"07070707", +4383 => x"07070707", +4384 => x"07070707", +4385 => x"07070707", +4386 => x"08080808", +4387 => x"08080808", +4388 => x"08080808", +4389 => x"08080808", +4390 => x"08080808", +4391 => x"08080808", +4392 => x"08080808", +4393 => x"08080808", +4394 => x"08080808", +4395 => x"08080808", +4396 => x"08080808", +4397 => x"08080808", +4398 => x"08080808", +4399 => x"08080808", +4400 => x"08080808", +4401 => x"08080808", +4402 => x"08080808", +4403 => x"08080808", +4404 => x"08080808", +4405 => x"08080808", +4406 => x"08080808", +4407 => x"08080808", +4408 => x"08080808", +4409 => x"08080808", +4410 => x"08080808", +4411 => x"08080808", +4412 => x"08080808", +4413 => x"08080808", +4414 => x"08080808", +4415 => x"08080808", +4416 => x"08080808", +4417 => x"08080808", +4418 => x"00ffffff", +4419 => x"ff00ffff", +4420 => x"ffff00ff", +4421 => x"ffffff00", +4422 => x"0000042c", +4423 => x"00000446", +4424 => x"0000046c", +4425 => x"00000498", +4426 => x"000004ca", +4427 => x"000004ec", +4428 => x"00000508", +4429 => x"0000052c", +4430 => x"00000556", +4431 => x"00000580", +4432 => x"000005a4", +4433 => x"000005be", +4434 => x"000005e0", +4435 => x"00000612", +4436 => x"0000063e", +4437 => x"00000660", +4438 => x"00000000", +4439 => x"00000000", +4440 => x"00000000", +4441 => x"00004d44", +4442 => x"0000c350", +4443 => x"00000000", +4444 => x"00000000", +4445 => x"00000000", +4446 => x"00000000", +4447 => x"00000000", +4448 => x"00000000", +4449 => x"00000000", +4450 => x"00000000", +4451 => x"00000000", +4452 => x"00000000", +4453 => x"00000000", +4454 => x"00000000", +4455 => x"00000000", +4456 => x"ffffffff", +4457 => x"00000000", +4458 => x"00020000", +4459 => x"00000000", +4460 => x"00000000", +4461 => x"000045ac", +4462 => x"000045ac", +4463 => x"000045b4", +4464 => x"000045b4", +4465 => x"000045bc", +4466 => x"000045bc", +4467 => x"000045c4", +4468 => x"000045c4", +4469 => x"000045cc", +4470 => x"000045cc", +4471 => x"000045d4", +4472 => x"000045d4", +4473 => x"000045dc", +4474 => x"000045dc", +4475 => x"000045e4", +4476 => x"000045e4", +4477 => x"000045ec", +4478 => x"000045ec", +4479 => x"000045f4", +4480 => x"000045f4", +4481 => x"000045fc", +4482 => x"000045fc", +4483 => x"00004604", +4484 => x"00004604", +4485 => x"0000460c", +4486 => x"0000460c", +4487 => x"00004614", +4488 => x"00004614", +4489 => x"0000461c", +4490 => x"0000461c", +4491 => x"00004624", +4492 => x"00004624", +4493 => x"0000462c", +4494 => x"0000462c", +4495 => x"00004634", +4496 => x"00004634", +4497 => x"0000463c", +4498 => x"0000463c", +4499 => x"00004644", +4500 => x"00004644", +4501 => x"0000464c", +4502 => x"0000464c", +4503 => x"00004654", +4504 => x"00004654", +4505 => x"0000465c", +4506 => x"0000465c", +4507 => x"00004664", +4508 => x"00004664", +4509 => x"0000466c", +4510 => x"0000466c", +4511 => x"00004674", +4512 => x"00004674", +4513 => x"0000467c", +4514 => x"0000467c", +4515 => x"00004684", +4516 => x"00004684", +4517 => x"0000468c", +4518 => x"0000468c", +4519 => x"00004694", +4520 => x"00004694", +4521 => x"0000469c", +4522 => x"0000469c", +4523 => x"000046a4", +4524 => x"000046a4", +4525 => x"000046ac", +4526 => x"000046ac", +4527 => x"000046b4", +4528 => x"000046b4", +4529 => x"000046bc", +4530 => x"000046bc", +4531 => x"000046c4", +4532 => x"000046c4", +4533 => x"000046cc", +4534 => x"000046cc", +4535 => x"000046d4", +4536 => x"000046d4", +4537 => x"000046dc", +4538 => x"000046dc", +4539 => x"000046e4", +4540 => x"000046e4", +4541 => x"000046ec", +4542 => x"000046ec", +4543 => x"000046f4", +4544 => x"000046f4", +4545 => x"000046fc", +4546 => x"000046fc", +4547 => x"00004704", +4548 => x"00004704", +4549 => x"0000470c", +4550 => x"0000470c", +4551 => x"00004714", +4552 => x"00004714", +4553 => x"0000471c", +4554 => x"0000471c", +4555 => x"00004724", +4556 => x"00004724", +4557 => x"0000472c", +4558 => x"0000472c", +4559 => x"00004734", +4560 => x"00004734", +4561 => x"0000473c", +4562 => x"0000473c", +4563 => x"00004744", +4564 => x"00004744", +4565 => x"0000474c", +4566 => x"0000474c", +4567 => x"00004754", +4568 => x"00004754", +4569 => x"0000475c", +4570 => x"0000475c", +4571 => x"00004764", +4572 => x"00004764", +4573 => x"0000476c", +4574 => x"0000476c", +4575 => x"00004774", +4576 => x"00004774", +4577 => x"0000477c", +4578 => x"0000477c", +4579 => x"00004784", +4580 => x"00004784", +4581 => x"0000478c", +4582 => x"0000478c", +4583 => x"00004794", +4584 => x"00004794", +4585 => x"0000479c", +4586 => x"0000479c", +4587 => x"000047a4", +4588 => x"000047a4", +4589 => x"000047ac", +4590 => x"000047ac", +4591 => x"000047b4", +4592 => x"000047b4", +4593 => x"000047bc", +4594 => x"000047bc", +4595 => x"000047c4", +4596 => x"000047c4", +4597 => x"000047cc", +4598 => x"000047cc", +4599 => x"000047d4", +4600 => x"000047d4", +4601 => x"000047dc", +4602 => x"000047dc", +4603 => x"000047e4", +4604 => x"000047e4", +4605 => x"000047ec", +4606 => x"000047ec", +4607 => x"000047f4", +4608 => x"000047f4", +4609 => x"000047fc", +4610 => x"000047fc", +4611 => x"00004804", +4612 => x"00004804", +4613 => x"0000480c", +4614 => x"0000480c", +4615 => x"00004814", +4616 => x"00004814", +4617 => x"0000481c", +4618 => x"0000481c", +4619 => x"00004824", +4620 => x"00004824", +4621 => x"0000482c", +4622 => x"0000482c", +4623 => x"00004834", +4624 => x"00004834", +4625 => x"0000483c", +4626 => x"0000483c", +4627 => x"00004844", +4628 => x"00004844", +4629 => x"0000484c", +4630 => x"0000484c", +4631 => x"00004854", +4632 => x"00004854", +4633 => x"0000485c", +4634 => x"0000485c", +4635 => x"00004864", +4636 => x"00004864", +4637 => x"0000486c", +4638 => x"0000486c", +4639 => x"00004874", +4640 => x"00004874", +4641 => x"0000487c", +4642 => x"0000487c", +4643 => x"00004884", +4644 => x"00004884", +4645 => x"0000488c", +4646 => x"0000488c", +4647 => x"00004894", +4648 => x"00004894", +4649 => x"0000489c", +4650 => x"0000489c", +4651 => x"000048a4", +4652 => x"000048a4", +4653 => x"000048ac", +4654 => x"000048ac", +4655 => x"000048b4", +4656 => x"000048b4", +4657 => x"000048bc", +4658 => x"000048bc", +4659 => x"000048c4", +4660 => x"000048c4", +4661 => x"000048cc", +4662 => x"000048cc", +4663 => x"000048d4", +4664 => x"000048d4", +4665 => x"000048dc", +4666 => x"000048dc", +4667 => x"000048e4", +4668 => x"000048e4", +4669 => x"000048ec", +4670 => x"000048ec", +4671 => x"000048f4", +4672 => x"000048f4", +4673 => x"000048fc", +4674 => x"000048fc", +4675 => x"00004904", +4676 => x"00004904", +4677 => x"0000490c", +4678 => x"0000490c", +4679 => x"00004914", +4680 => x"00004914", +4681 => x"0000491c", +4682 => x"0000491c", +4683 => x"00004924", +4684 => x"00004924", +4685 => x"0000492c", +4686 => x"0000492c", +4687 => x"00004934", +4688 => x"00004934", +4689 => x"0000493c", +4690 => x"0000493c", +4691 => x"00004944", +4692 => x"00004944", +4693 => x"0000494c", +4694 => x"0000494c", +4695 => x"00004954", +4696 => x"00004954", +4697 => x"0000495c", +4698 => x"0000495c", +4699 => x"00004964", +4700 => x"00004964", +4701 => x"0000496c", +4702 => x"0000496c", +4703 => x"00004974", +4704 => x"00004974", +4705 => x"0000497c", +4706 => x"0000497c", +4707 => x"00004984", +4708 => x"00004984", +4709 => x"0000498c", +4710 => x"0000498c", +4711 => x"00004994", +4712 => x"00004994", +4713 => x"0000499c", +4714 => x"0000499c", +4715 => x"000049a4", +4716 => x"000049a4", +4717 => x"000049b8", +4718 => x"00000000", +4719 => x"00004c20", +4720 => x"00004c7c", +4721 => x"00004cd8", +4722 => x"00000000", +4723 => x"00000000", +4724 => x"00000000", +4725 => x"00000000", +4726 => x"00000000", +4727 => x"00000000", +4728 => x"00000000", +4729 => x"00000000", +4730 => x"00000000", +4731 => x"000043f8", +4732 => x"00000000", +4733 => x"00000000", +4734 => x"00000000", +4735 => x"00000000", +4736 => x"00000000", +4737 => x"00000000", +4738 => x"00000000", +4739 => x"00000000", +4740 => x"00000000", +4741 => x"00000000", +4742 => x"00000000", +4743 => x"00000000", +4744 => x"00000000", +4745 => x"00000000", +4746 => x"00000000", +4747 => x"00000000", +4748 => x"00000000", +4749 => x"00000000", +4750 => x"00000000", +4751 => x"00000000", +4752 => x"00000000", +4753 => x"00000000", +4754 => x"00000000", +4755 => x"00000000", +4756 => x"00000000", +4757 => x"00000000", +4758 => x"00000000", +4759 => x"00000000", +4760 => x"00000001", +4761 => x"330eabcd", +4762 => x"1234e66d", +4763 => x"deec0005", +4764 => x"000b0000", +4765 => x"00000000", +4766 => x"00000000", +4767 => x"00000000", +4768 => x"00000000", +4769 => x"00000000", +4770 => x"00000000", +4771 => x"00000000", +4772 => x"00000000", +4773 => x"00000000", +4774 => x"00000000", +4775 => x"00000000", +4776 => x"00000000", +4777 => x"00000000", +4778 => x"00000000", +4779 => x"00000000", +4780 => x"00000000", +4781 => x"00000000", +4782 => x"00000000", +4783 => x"00000000", +4784 => x"00000000", +4785 => x"00000000", +4786 => x"00000000", +4787 => x"00000000", +4788 => x"00000000", +4789 => x"00000000", +4790 => x"00000000", +4791 => x"00000000", +4792 => x"00000000", +4793 => x"00000000", +4794 => x"00000000", +4795 => x"00000000", +4796 => x"00000000", +4797 => x"00000000", +4798 => x"00000000", +4799 => x"00000000", +4800 => x"00000000", +4801 => x"00000000", +4802 => x"00000000", +4803 => x"00000000", +4804 => x"00000000", +4805 => x"00000000", +4806 => x"00000000", +4807 => x"00000000", +4808 => x"00000000", +4809 => x"00000000", +4810 => x"00000000", +4811 => x"00000000", +4812 => x"00000000", +4813 => x"00000000", +4814 => x"00000000", +4815 => x"00000000", +4816 => x"00000000", +4817 => x"00000000", +4818 => x"00000000", +4819 => x"00000000", +4820 => x"00000000", +4821 => x"00000000", +4822 => x"00000000", +4823 => x"00000000", +4824 => x"00000000", +4825 => x"00000000", +4826 => x"00000000", +4827 => x"00000000", +4828 => x"00000000", +4829 => x"00000000", +4830 => x"00000000", +4831 => x"00000000", +4832 => x"00000000", +4833 => x"00000000", +4834 => x"00000000", +4835 => x"00000000", +4836 => x"00000000", +4837 => x"00000000", +4838 => x"00000000", +4839 => x"00000000", +4840 => x"00000000", +4841 => x"00000000", +4842 => x"00000000", +4843 => x"00000000", +4844 => x"00000000", +4845 => x"00000000", +4846 => x"00000000", +4847 => x"00000000", +4848 => x"00000000", +4849 => x"00000000", +4850 => x"00000000", +4851 => x"00000000", +4852 => x"00000000", +4853 => x"00000000", +4854 => x"00000000", +4855 => x"00000000", +4856 => x"00000000", +4857 => x"00000000", +4858 => x"00000000", +4859 => x"00000000", +4860 => x"00000000", +4861 => x"00000000", +4862 => x"00000000", +4863 => x"00000000", +4864 => x"00000000", +4865 => x"00000000", +4866 => x"00000000", +4867 => x"00000000", +4868 => x"00000000", +4869 => x"00000000", +4870 => x"00000000", +4871 => x"00000000", +4872 => x"00000000", +4873 => x"00000000", +4874 => x"00000000", +4875 => x"00000000", +4876 => x"00000000", +4877 => x"00000000", +4878 => x"00000000", +4879 => x"00000000", +4880 => x"00000000", +4881 => x"00000000", +4882 => x"00000000", +4883 => x"00000000", +4884 => x"00000000", +4885 => x"00000000", +4886 => x"00000000", +4887 => x"00000000", +4888 => x"00000000", +4889 => x"00000000", +4890 => x"00000000", +4891 => x"00000000", +4892 => x"00000000", +4893 => x"00000000", +4894 => x"00000000", +4895 => x"00000000", +4896 => x"00000000", +4897 => x"00000000", +4898 => x"00000000", +4899 => x"00000000", +4900 => x"00000000", +4901 => x"00000000", +4902 => x"00000000", +4903 => x"00000000", +4904 => x"00000000", +4905 => x"00000000", +4906 => x"00000000", +4907 => x"00000000", +4908 => x"00000000", +4909 => x"00000000", +4910 => x"00000000", +4911 => x"00000000", +4912 => x"00000000", +4913 => x"00000000", +4914 => x"00000000", +4915 => x"00000000", +4916 => x"00000000", +4917 => x"00000000", +4918 => x"00000000", +4919 => x"00000000", +4920 => x"00000000", +4921 => x"00000000", +4922 => x"00000000", +4923 => x"00000000", +4924 => x"00000000", +4925 => x"00000000", +4926 => x"00000000", +4927 => x"00000000", +4928 => x"00000000", +4929 => x"00000000", +4930 => x"00000000", +4931 => x"00000000", +4932 => x"00000000", +4933 => x"00000000", +4934 => x"00000000", +4935 => x"00000000", +4936 => x"00000000", +4937 => x"00000000", +4938 => x"00000000", +4939 => x"00000000", +4940 => x"00000000", +4941 => x"000043fc", +4942 => x"ffffffff", +4943 => x"00000000", +4944 => x"ffffffff", +4945 => x"00000000", + others => x"00000000" +); + +attribute syn_ramstyle : string; +attribute syn_ramstyle of ram : signal is "no_rw_check" ; + +begin + +process (clk) +begin + if (clk'event and clk = '1') then + if (memAWriteEnable = '1') then + ram(conv_integer(memAAddr)) <= memAWrite; + memARead <= memAWrite; + else + memARead <= ram(conv_integer(memAAddr)); + end if; + end if; +end process; + +process (clk) +begin + if (clk'event and clk = '1') then + if (memBWriteEnable = '1') then + ram(conv_integer(memBAddr)) <= memBWrite; + memBRead <= memBWrite; + else + memBRead <= ram(conv_integer(memBAddr)); + end if; + end if; +end process; + + + + +end dualport_ram_arch; diff --git a/zpu/hdl/zpu3/src/helloworld_ram.vhd b/zpu/hdl/zpu3/src/helloworld_ram.vhd new file mode 100644 index 0000000..2e1d35d --- /dev/null +++ b/zpu/hdl/zpu3/src/helloworld_ram.vhd @@ -0,0 +1,3345 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +library zylin; +use zylin.zpu_config.all; +use zylin.zpupkg.all; + +entity dualport_ram is +port (clk : in std_logic; + memAWriteEnable : in std_logic; + memAAddr : in std_logic_vector(maxAddrBit downto minAddrBit); + memAWrite : in std_logic_vector(wordSize-1 downto 0); + memARead : out std_logic_vector(wordSize-1 downto 0); + memBWriteEnable : in std_logic; + memBAddr : in std_logic_vector(maxAddrBit downto minAddrBit); + memBWrite : in std_logic_vector(wordSize-1 downto 0); + memBRead : out std_logic_vector(wordSize-1 downto 0)); +end dualport_ram; + +architecture dualport_ram_arch of dualport_ram is + + +type ram_type is array(0 to ((2**(maxAddrBit+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); + +shared variable ram : ram_type := +( +0 => x"800b0b0b", +1 => x"0b0b8070", +2 => x"0b0b80d6", +3 => x"f00c3a0b", +4 => x"0b80cd92", +5 => x"04000000", +6 => x"00000000", +7 => x"00000000", +8 => x"80088408", +9 => x"88080b0b", +10 => x"80cde02d", +11 => x"880c840c", +12 => x"800c0400", +13 => x"00000000", +14 => x"00000000", +15 => x"00000000", +16 => x"71fd0608", +17 => x"72830609", +18 => x"81058205", +19 => x"832b0b2a", +20 => x"83ffff06", +21 => x"52040000", +22 => x"00000000", +23 => x"00000000", +24 => x"71fd0608", +25 => x"83ffff73", +26 => x"83060981", +27 => x"05820583", +28 => x"2b0b2b09", +29 => x"067383ff", +30 => x"ff0b0b0b", +31 => x"0b83a504", +32 => x"72098105", +33 => x"72057373", +34 => x"09060906", +35 => x"73097306", +36 => x"070a8106", +37 => x"53510400", +38 => x"00000000", +39 => x"00000000", +40 => x"72722473", +41 => x"732e0753", +42 => x"51040000", +43 => x"00000000", +44 => x"00000000", +45 => x"00000000", +46 => x"00000000", +47 => x"00000000", +48 => x"71737109", +49 => x"71068106", +50 => x"30720a10", +51 => x"0a720a10", +52 => x"0a31050a", +53 => x"81065151", +54 => x"53510400", +55 => x"00000000", +56 => x"72722673", +57 => x"732e0753", +58 => x"51040000", +59 => x"00000000", +60 => x"00000000", +61 => x"00000000", +62 => x"00000000", +63 => x"00000000", +64 => x"00000000", +65 => x"00000000", +66 => x"00000000", +67 => x"00000000", +68 => x"00000000", +69 => x"00000000", +70 => x"00000000", +71 => x"00000000", +72 => x"72728072", +73 => x"8106ff05", +74 => x"09720605", +75 => x"71105272", +76 => x"0a100a53", +77 => x"72ed3851", +78 => x"51535104", +79 => x"00000000", +80 => x"720a722b", +81 => x"0a535104", +82 => x"00000000", +83 => x"00000000", +84 => x"00000000", +85 => x"00000000", +86 => x"00000000", +87 => x"00000000", +88 => x"72729f06", +89 => x"0981050b", +90 => x"0b0b88a7", +91 => x"05040000", +92 => x"00000000", +93 => x"00000000", +94 => x"00000000", +95 => x"00000000", +96 => x"72722aff", +97 => x"739f062a", +98 => x"0974090a", +99 => x"8106ff05", +100 => x"06075351", +101 => x"04000000", +102 => x"00000000", +103 => x"00000000", +104 => x"71715351", +105 => x"04067383", +106 => x"06098105", +107 => x"8205832b", +108 => x"0b2b0772", +109 => x"fc060c51", +110 => x"51040000", +111 => x"00000000", +112 => x"72098105", +113 => x"72050970", +114 => x"81050906", +115 => x"0a810653", +116 => x"51040000", +117 => x"00000000", +118 => x"00000000", +119 => x"00000000", +120 => x"72098105", +121 => x"72050970", +122 => x"81050906", +123 => x"0a098106", +124 => x"53510400", +125 => x"00000000", +126 => x"00000000", +127 => x"00000000", +128 => x"71098105", +129 => x"52040000", +130 => x"00000000", +131 => x"00000000", +132 => x"00000000", +133 => x"00000000", +134 => x"00000000", +135 => x"00000000", +136 => x"72720981", +137 => x"05055351", +138 => x"04098105", +139 => x"83051010", +140 => x"102b0772", +141 => x"fc060c51", +142 => x"51040000", +143 => x"00000000", +144 => x"72097206", +145 => x"73730906", +146 => x"07535104", +147 => x"00000000", +148 => x"00000000", +149 => x"00000000", +150 => x"00000000", +151 => x"00000000", +152 => x"71fc0608", +153 => x"72830609", +154 => x"81058305", +155 => x"1010102a", +156 => x"81ff0652", +157 => x"04000000", +158 => x"00000000", +159 => x"00000000", +160 => x"71fc0608", +161 => x"0b0b80d6", +162 => x"dc738306", +163 => x"10100508", +164 => x"067381ff", +165 => x"06738306", +166 => x"0b0b0b84", +167 => x"a9040000", +168 => x"80088408", +169 => x"88087575", +170 => x"0b0b0b8e", +171 => x"fd2d5050", +172 => x"80085688", +173 => x"0c840c80", +174 => x"0c510400", +175 => x"00000000", +176 => x"80088408", +177 => x"88087575", +178 => x"0b0b0b90", +179 => x"af2d5050", +180 => x"80085688", +181 => x"0c840c80", +182 => x"0c510400", +183 => x"00000000", +184 => x"72097081", +185 => x"0509060a", +186 => x"8106ff05", +187 => x"70547106", +188 => x"73097274", +189 => x"05ff0506", +190 => x"07535050", +191 => x"04000000", +192 => x"72097081", +193 => x"0509060a", +194 => x"098106ff", +195 => x"05705471", +196 => x"06730972", +197 => x"7405ff05", +198 => x"06075350", +199 => x"50040000", +200 => x"05ff0504", +201 => x"00000000", +202 => x"00000000", +203 => x"00000000", +204 => x"00000000", +205 => x"00000000", +206 => x"00000000", +207 => x"00000000", +208 => x"810b0b0b", +209 => x"80d6ec0c", +210 => x"51040000", +211 => x"00000000", +212 => x"00000000", +213 => x"00000000", +214 => x"00000000", +215 => x"00000000", +216 => x"71810552", +217 => x"04000000", +218 => x"00000000", +219 => x"00000000", +220 => x"00000000", +221 => x"00000000", +222 => x"00000000", +223 => x"00000000", +224 => x"00000000", +225 => x"00000000", +226 => x"00000000", +227 => x"00000000", +228 => x"00000000", +229 => x"00000000", +230 => x"00000000", +231 => x"00000000", +232 => x"02840572", +233 => x"10100552", +234 => x"04000000", +235 => x"00000000", +236 => x"00000000", +237 => x"00000000", +238 => x"00000000", +239 => x"00000000", +240 => x"00000000", +241 => x"00000000", +242 => x"00000000", +243 => x"00000000", +244 => x"00000000", +245 => x"00000000", +246 => x"00000000", +247 => x"00000000", +248 => x"717105ff", +249 => x"05715351", +250 => x"04000000", +251 => x"00000000", +252 => x"00000000", +253 => x"00000000", +254 => x"00000000", +255 => x"00000000", +256 => x"839f3f80", +257 => x"cdf83f04", +258 => x"10101010", +259 => x"10101010", +260 => x"10101010", +261 => x"10101010", +262 => x"10101010", +263 => x"10101010", +264 => x"10101010", +265 => x"10101053", +266 => x"51043c04", +267 => x"70700b0b", +268 => x"80e6d808", +269 => x"52841208", +270 => x"70810651", +271 => x"5170f638", +272 => x"710881ff", +273 => x"06800c50", +274 => x"50047070", +275 => x"0b0b80e6", +276 => x"d8085284", +277 => x"1208700a", +278 => x"100a7081", +279 => x"06515151", +280 => x"70f13873", +281 => x"720c5050", +282 => x"0480d6ec", +283 => x"08802ea8", +284 => x"38838080", +285 => x"0b0b0b80", +286 => x"e6d80c82", +287 => x"a0800b0b", +288 => x"0b80e6dc", +289 => x"0c829080", +290 => x"0b80e6ec", +291 => x"0c0b0b80", +292 => x"e6e00b80", +293 => x"e6f00c04", +294 => x"f8808080", +295 => x"a40b0b0b", +296 => x"80e6d80c", +297 => x"f8808082", +298 => x"800b0b0b", +299 => x"80e6dc0c", +300 => x"f8808084", +301 => x"800b80e6", +302 => x"ec0cf880", +303 => x"8080940b", +304 => x"80e6f00c", +305 => x"f8808080", +306 => x"9c0b80e6", +307 => x"e80cf880", +308 => x"8080a00b", +309 => x"80e6f40c", +310 => x"04f23d0d", +311 => x"600b0b80", +312 => x"e6dc0856", +313 => x"5d82750c", +314 => x"8059805a", +315 => x"800b8f3d", +316 => x"71101017", +317 => x"70085a57", +318 => x"5d5b8077", +319 => x"81ff067c", +320 => x"832b5658", +321 => x"5276537b", +322 => x"5182fc3f", +323 => x"7d7f7a72", +324 => x"077c7207", +325 => x"71716081", +326 => x"05415f5d", +327 => x"5b595755", +328 => x"7a8724bb", +329 => x"380b0b80", +330 => x"e6dc087b", +331 => x"10101170", +332 => x"08595155", +333 => x"807781ff", +334 => x"067c832b", +335 => x"56585276", +336 => x"537b5182", +337 => x"c23f7d7f", +338 => x"7a72077c", +339 => x"72077171", +340 => x"60810541", +341 => x"5f5d5b59", +342 => x"5755877b", +343 => x"25c73876", +344 => x"7d0c7784", +345 => x"1e0c7c80", +346 => x"0c903d0d", +347 => x"04707080", +348 => x"e6e43351", +349 => x"70a73880", +350 => x"d6f80870", +351 => x"08525270", +352 => x"802e9438", +353 => x"841280d6", +354 => x"f80c702d", +355 => x"80d6f808", +356 => x"70085252", +357 => x"70ee3881", +358 => x"0b80e6e4", +359 => x"34505004", +360 => x"04700b0b", +361 => x"80e6d408", +362 => x"802e8e38", +363 => x"0b0b0b0b", +364 => x"800b802e", +365 => x"09810683", +366 => x"3850040b", +367 => x"0b80e6d4", +368 => x"510b0b0b", +369 => x"f4ba3f50", +370 => x"04048c08", +371 => x"028c0c70", +372 => x"70707080", +373 => x"0b8c08fc", +374 => x"050c8c08", +375 => x"fc050889", +376 => x"24818e38", +377 => x"0b0b80d6", +378 => x"a85188f3", +379 => x"3f0b0b80", +380 => x"d6b85188", +381 => x"ea3ffc0b", +382 => x"80e6f80c", +383 => x"80e6f808", +384 => x"812c5372", +385 => x"fe2e8438", +386 => x"86f13f8a", +387 => x"0b80e6fc", +388 => x"0c80e6fc", +389 => x"0880e6f8", +390 => x"08295372", +391 => x"d82e8438", +392 => x"86d93f8a", +393 => x"0b80e6f8", +394 => x"0c84e2ad", +395 => x"800b80e6", +396 => x"fc0c80e6", +397 => x"fc0880e6", +398 => x"f8082953", +399 => x"72afd7c2", +400 => x"802e8438", +401 => x"86b53f81", +402 => x"0a0b80e6", +403 => x"f80cff0b", +404 => x"80e6fc0c", +405 => x"80e6fc08", +406 => x"80e6f808", +407 => x"25843886", +408 => x"9a3f8c08", +409 => x"fc050881", +410 => x"058c08fc", +411 => x"050cfeea", +412 => x"398c08fc", +413 => x"05088a2e", +414 => x"843885ff", +415 => x"3f72800c", +416 => x"50505050", +417 => x"8c0c048c", +418 => x"08028c0c", +419 => x"f53d0d8c", +420 => x"08940508", +421 => x"9d388c08", +422 => x"8c05088c", +423 => x"08900508", +424 => x"8c088805", +425 => x"08585654", +426 => x"73760c74", +427 => x"84170c81", +428 => x"bf39800b", +429 => x"8c08f005", +430 => x"0c800b8c", +431 => x"08f4050c", +432 => x"8c088c05", +433 => x"088c0890", +434 => x"05085654", +435 => x"738c08f0", +436 => x"050c748c", +437 => x"08f4050c", +438 => x"8c08f805", +439 => x"8c08f005", +440 => x"56568870", +441 => x"54755376", +442 => x"5254859a", +443 => x"3fa00b8c", +444 => x"08940508", +445 => x"318c08ec", +446 => x"050c8c08", +447 => x"ec050880", +448 => x"249d3880", +449 => x"0b8c08f4", +450 => x"050c8c08", +451 => x"ec050830", +452 => x"8c08fc05", +453 => x"08712b8c", +454 => x"08f0050c", +455 => x"54b9398c", +456 => x"08fc0508", +457 => x"8c08ec05", +458 => x"082a8c08", +459 => x"e8050c8c", +460 => x"08fc0508", +461 => x"8c089405", +462 => x"082b8c08", +463 => x"f4050c8c", +464 => x"08f80508", +465 => x"8c089405", +466 => x"082b708c", +467 => x"08e80508", +468 => x"078c08f0", +469 => x"050c548c", +470 => x"08f00508", +471 => x"8c08f405", +472 => x"088c0888", +473 => x"05085856", +474 => x"5473760c", +475 => x"7484170c", +476 => x"8c088805", +477 => x"08800c8d", +478 => x"3d0d8c0c", +479 => x"048c0802", +480 => x"8c0cf93d", +481 => x"0d800b8c", +482 => x"08fc050c", +483 => x"8c088805", +484 => x"088025ab", +485 => x"388c0888", +486 => x"0508308c", +487 => x"0888050c", +488 => x"800b8c08", +489 => x"f4050c8c", +490 => x"08fc0508", +491 => x"8838810b", +492 => x"8c08f405", +493 => x"0c8c08f4", +494 => x"05088c08", +495 => x"fc050c8c", +496 => x"088c0508", +497 => x"8025ab38", +498 => x"8c088c05", +499 => x"08308c08", +500 => x"8c050c80", +501 => x"0b8c08f0", +502 => x"050c8c08", +503 => x"fc050888", +504 => x"38810b8c", +505 => x"08f0050c", +506 => x"8c08f005", +507 => x"088c08fc", +508 => x"050c8053", +509 => x"8c088c05", +510 => x"08528c08", +511 => x"88050851", +512 => x"81a73f80", +513 => x"08708c08", +514 => x"f8050c54", +515 => x"8c08fc05", +516 => x"08802e8c", +517 => x"388c08f8", +518 => x"0508308c", +519 => x"08f8050c", +520 => x"8c08f805", +521 => x"0870800c", +522 => x"54893d0d", +523 => x"8c0c048c", +524 => x"08028c0c", +525 => x"fb3d0d80", +526 => x"0b8c08fc", +527 => x"050c8c08", +528 => x"88050880", +529 => x"2593388c", +530 => x"08880508", +531 => x"308c0888", +532 => x"050c810b", +533 => x"8c08fc05", +534 => x"0c8c088c", +535 => x"05088025", +536 => x"8c388c08", +537 => x"8c050830", +538 => x"8c088c05", +539 => x"0c81538c", +540 => x"088c0508", +541 => x"528c0888", +542 => x"050851ad", +543 => x"3f800870", +544 => x"8c08f805", +545 => x"0c548c08", +546 => x"fc050880", +547 => x"2e8c388c", +548 => x"08f80508", +549 => x"308c08f8", +550 => x"050c8c08", +551 => x"f8050870", +552 => x"800c5487", +553 => x"3d0d8c0c", +554 => x"048c0802", +555 => x"8c0c7070", +556 => x"7070810b", +557 => x"8c08fc05", +558 => x"0c800b8c", +559 => x"08f8050c", +560 => x"8c088c05", +561 => x"088c0888", +562 => x"050827ac", +563 => x"388c08fc", +564 => x"0508802e", +565 => x"a338800b", +566 => x"8c088c05", +567 => x"08249938", +568 => x"8c088c05", +569 => x"08108c08", +570 => x"8c050c8c", +571 => x"08fc0508", +572 => x"108c08fc", +573 => x"050cc939", +574 => x"8c08fc05", +575 => x"08802e80", +576 => x"c9388c08", +577 => x"8c05088c", +578 => x"08880508", +579 => x"26a1388c", +580 => x"08880508", +581 => x"8c088c05", +582 => x"08318c08", +583 => x"88050c8c", +584 => x"08f80508", +585 => x"8c08fc05", +586 => x"08078c08", +587 => x"f8050c8c", +588 => x"08fc0508", +589 => x"812a8c08", +590 => x"fc050c8c", +591 => x"088c0508", +592 => x"812a8c08", +593 => x"8c050cff", +594 => x"af398c08", +595 => x"90050880", +596 => x"2e8f388c", +597 => x"08880508", +598 => x"708c08f4", +599 => x"050c518d", +600 => x"398c08f8", +601 => x"0508708c", +602 => x"08f4050c", +603 => x"518c08f4", +604 => x"0508800c", +605 => x"50505050", +606 => x"8c0c0470", +607 => x"865184ea", +608 => x"3f8151ba", +609 => x"d83ffc3d", +610 => x"0d767079", +611 => x"7b555555", +612 => x"558f7227", +613 => x"8c387275", +614 => x"07830651", +615 => x"70802ea7", +616 => x"38ff1252", +617 => x"71ff2e98", +618 => x"38727081", +619 => x"05543374", +620 => x"70810556", +621 => x"34ff1252", +622 => x"71ff2e09", +623 => x"8106ea38", +624 => x"74800c86", +625 => x"3d0d0474", +626 => x"51727084", +627 => x"05540871", +628 => x"70840553", +629 => x"0c727084", +630 => x"05540871", +631 => x"70840553", +632 => x"0c727084", +633 => x"05540871", +634 => x"70840553", +635 => x"0c727084", +636 => x"05540871", +637 => x"70840553", +638 => x"0cf01252", +639 => x"718f26c9", +640 => x"38837227", +641 => x"95387270", +642 => x"84055408", +643 => x"71708405", +644 => x"530cfc12", +645 => x"52718326", +646 => x"ed387054", +647 => x"ff8339f7", +648 => x"3d0d7c70", +649 => x"525384b8", +650 => x"3f725480", +651 => x"085580d6", +652 => x"c8568157", +653 => x"80088105", +654 => x"5a8b3de4", +655 => x"11595382", +656 => x"59f41352", +657 => x"7b881108", +658 => x"525384f5", +659 => x"3f800830", +660 => x"70800807", +661 => x"9f2c8a07", +662 => x"800c538b", +663 => x"3d0d0470", +664 => x"70735280", +665 => x"d6fc0851", +666 => x"ffb53f50", +667 => x"50047070", +668 => x"70707553", +669 => x"84d81308", +670 => x"802e8b38", +671 => x"80537280", +672 => x"0c505050", +673 => x"50048180", +674 => x"5272518a", +675 => x"9b3f8008", +676 => x"84d8140c", +677 => x"ff538008", +678 => x"802ee338", +679 => x"8008549f", +680 => x"53807470", +681 => x"8405560c", +682 => x"ff135380", +683 => x"7324cd38", +684 => x"80747084", +685 => x"05560cff", +686 => x"13537280", +687 => x"25e338ff", +688 => x"bb397070", +689 => x"70707577", +690 => x"55539f74", +691 => x"278e3896", +692 => x"730cff52", +693 => x"71800c50", +694 => x"50505004", +695 => x"84d81308", +696 => x"5271802e", +697 => x"94387310", +698 => x"10127008", +699 => x"79720c51", +700 => x"5271800c", +701 => x"50505050", +702 => x"047251fe", +703 => x"f13fff52", +704 => x"8008d138", +705 => x"84d81308", +706 => x"74101011", +707 => x"70087a72", +708 => x"0c515152", +709 => x"dc39f93d", +710 => x"0d797b58", +711 => x"56769f26", +712 => x"80e83884", +713 => x"d8160854", +714 => x"73802eaa", +715 => x"38761010", +716 => x"14700855", +717 => x"5573802e", +718 => x"ba388058", +719 => x"73812e8f", +720 => x"3873ff2e", +721 => x"a3388075", +722 => x"0c765173", +723 => x"2d805877", +724 => x"800c893d", +725 => x"0d047551", +726 => x"fe943fff", +727 => x"588008ef", +728 => x"3884d816", +729 => x"0854c639", +730 => x"96760c81", +731 => x"0b800c89", +732 => x"3d0d0475", +733 => x"5181e53f", +734 => x"76538008", +735 => x"52755181", +736 => x"a53f8008", +737 => x"800c893d", +738 => x"0d049676", +739 => x"0cff0b80", +740 => x"0c893d0d", +741 => x"04fc3d0d", +742 => x"76785653", +743 => x"ff54749f", +744 => x"26b13884", +745 => x"d8130852", +746 => x"71802eae", +747 => x"38741010", +748 => x"12700853", +749 => x"53815471", +750 => x"802e9838", +751 => x"825471ff", +752 => x"2e913883", +753 => x"5471812e", +754 => x"8a388073", +755 => x"0c745171", +756 => x"2d805473", +757 => x"800c863d", +758 => x"0d047251", +759 => x"fd903f80", +760 => x"08f13884", +761 => x"d8130852", +762 => x"c4397070", +763 => x"735280d6", +764 => x"fc0851fe", +765 => x"a13f5050", +766 => x"04707070", +767 => x"75537452", +768 => x"80d6fc08", +769 => x"51fdbb3f", +770 => x"50505004", +771 => x"7080d6fc", +772 => x"0851fcda", +773 => x"3f500470", +774 => x"70735280", +775 => x"d6fc0851", +776 => x"fef33f50", +777 => x"5004fc3d", +778 => x"0d800b80", +779 => x"e7800c78", +780 => x"527751b4", +781 => x"9b3f8008", +782 => x"548008ff", +783 => x"2e883873", +784 => x"800c863d", +785 => x"0d0480e7", +786 => x"80085574", +787 => x"802ef038", +788 => x"7675710c", +789 => x"5373800c", +790 => x"863d0d04", +791 => x"b3ed3f04", +792 => x"70707070", +793 => x"75707183", +794 => x"06535552", +795 => x"70b83871", +796 => x"70087009", +797 => x"f7fbfdff", +798 => x"120670f8", +799 => x"84828180", +800 => x"06515152", +801 => x"53709d38", +802 => x"84137008", +803 => x"7009f7fb", +804 => x"fdff1206", +805 => x"70f88482", +806 => x"81800651", +807 => x"51525370", +808 => x"802ee538", +809 => x"72527133", +810 => x"5170802e", +811 => x"8a388112", +812 => x"70335252", +813 => x"70f83871", +814 => x"7431800c", +815 => x"50505050", +816 => x"04f23d0d", +817 => x"60628811", +818 => x"08705757", +819 => x"5f5a7480", +820 => x"2e819038", +821 => x"8c1a2270", +822 => x"832a8132", +823 => x"70810651", +824 => x"55587386", +825 => x"38901a08", +826 => x"91387951", +827 => x"9cd03fff", +828 => x"54800880", +829 => x"ee388c1a", +830 => x"22587d08", +831 => x"57807883", +832 => x"ffff0670", +833 => x"0a100a70", +834 => x"81065156", +835 => x"57557375", +836 => x"2e80d738", +837 => x"74903876", +838 => x"08841808", +839 => x"88195956", +840 => x"5974802e", +841 => x"f2387454", +842 => x"88807527", +843 => x"84388880", +844 => x"54735378", +845 => x"529c1a08", +846 => x"51a41a08", +847 => x"54732d80", +848 => x"0b800825", +849 => x"82e63880", +850 => x"08197580", +851 => x"08317f88", +852 => x"05088008", +853 => x"31706188", +854 => x"050c5656", +855 => x"5973ffb4", +856 => x"38805473", +857 => x"800c903d", +858 => x"0d047581", +859 => x"32708106", +860 => x"76415154", +861 => x"73802e81", +862 => x"c1387490", +863 => x"38760884", +864 => x"18088819", +865 => x"59565974", +866 => x"802ef238", +867 => x"881a0878", +868 => x"83ffff06", +869 => x"70892a70", +870 => x"81065156", +871 => x"59567380", +872 => x"2e82fa38", +873 => x"7575278d", +874 => x"3877872a", +875 => x"70810651", +876 => x"547382b5", +877 => x"38747627", +878 => x"83387456", +879 => x"75537852", +880 => x"79085190", +881 => x"f83f881a", +882 => x"08763188", +883 => x"1b0c7908", +884 => x"167a0c74", +885 => x"56751975", +886 => x"77317f88", +887 => x"05087831", +888 => x"70618805", +889 => x"0c565659", +890 => x"73802efe", +891 => x"f4388c1a", +892 => x"2258ff86", +893 => x"39777854", +894 => x"79537b52", +895 => x"5690be3f", +896 => x"881a0878", +897 => x"31881b0c", +898 => x"7908187a", +899 => x"0c7c7631", +900 => x"5d7c8e38", +901 => x"79519c8a", +902 => x"3f800881", +903 => x"8f388008", +904 => x"5f751975", +905 => x"77317f88", +906 => x"05087831", +907 => x"70618805", +908 => x"0c565659", +909 => x"73802efe", +910 => x"a8387481", +911 => x"83387608", +912 => x"84180888", +913 => x"19595659", +914 => x"74802ef2", +915 => x"3874538a", +916 => x"5278518e", +917 => x"c93f8008", +918 => x"79318105", +919 => x"5d800884", +920 => x"3881155d", +921 => x"815f7c58", +922 => x"747d2783", +923 => x"38745894", +924 => x"1a08881b", +925 => x"0811575c", +926 => x"807a085c", +927 => x"54901a08", +928 => x"7b278338", +929 => x"81547578", +930 => x"25843873", +931 => x"ba387b78", +932 => x"24fee238", +933 => x"7b537852", +934 => x"9c1a0851", +935 => x"a41a0854", +936 => x"732d8008", +937 => x"56800880", +938 => x"24fee238", +939 => x"8c1a2280", +940 => x"c0075473", +941 => x"8c1b23ff", +942 => x"5473800c", +943 => x"903d0d04", +944 => x"7effa338", +945 => x"ff873975", +946 => x"5378527a", +947 => x"518eee3f", +948 => x"7908167a", +949 => x"0c79519a", +950 => x"c93f8008", +951 => x"cf387c76", +952 => x"315d7cfe", +953 => x"bc38feac", +954 => x"39901a08", +955 => x"7a087131", +956 => x"76117056", +957 => x"5a575280", +958 => x"d6fc0851", +959 => x"90843f80", +960 => x"08802eff", +961 => x"a7388008", +962 => x"901b0c80", +963 => x"08167a0c", +964 => x"77941b0c", +965 => x"74881b0c", +966 => x"7456fd99", +967 => x"39790858", +968 => x"901a0878", +969 => x"27833881", +970 => x"54757527", +971 => x"843873b3", +972 => x"38941a08", +973 => x"56757526", +974 => x"80d33875", +975 => x"5378529c", +976 => x"1a0851a4", +977 => x"1a085473", +978 => x"2d800856", +979 => x"80088024", +980 => x"fd83388c", +981 => x"1a2280c0", +982 => x"0754738c", +983 => x"1b23ff54", +984 => x"fed73975", +985 => x"53785277", +986 => x"518dd23f", +987 => x"7908167a", +988 => x"0c795199", +989 => x"ad3f8008", +990 => x"802efcd9", +991 => x"388c1a22", +992 => x"80c00754", +993 => x"738c1b23", +994 => x"ff54fead", +995 => x"39747554", +996 => x"79537852", +997 => x"568da63f", +998 => x"881a0875", +999 => x"31881b0c", +1000 => x"7908157a", +1001 => x"0cfcae39", +1002 => x"f33d0d7f", +1003 => x"618b1170", +1004 => x"f8065c55", +1005 => x"555e7296", +1006 => x"26833890", +1007 => x"59807924", +1008 => x"747a2607", +1009 => x"53805472", +1010 => x"742e0981", +1011 => x"0680cb38", +1012 => x"7d518eac", +1013 => x"3f7883f7", +1014 => x"2680c638", +1015 => x"78832a70", +1016 => x"10101080", +1017 => x"deb8058c", +1018 => x"11085959", +1019 => x"5a76782e", +1020 => x"83b03884", +1021 => x"1708fc06", +1022 => x"568c1708", +1023 => x"88180871", +1024 => x"8c120c88", +1025 => x"120c5875", +1026 => x"17841108", +1027 => x"81078412", +1028 => x"0c537d51", +1029 => x"8deb3f88", +1030 => x"17547380", +1031 => x"0c8f3d0d", +1032 => x"0478892a", +1033 => x"79832a5b", +1034 => x"5372802e", +1035 => x"bf387886", +1036 => x"2ab8055a", +1037 => x"847327b4", +1038 => x"3880db13", +1039 => x"5a947327", +1040 => x"ab38788c", +1041 => x"2a80ee05", +1042 => x"5a80d473", +1043 => x"279e3878", +1044 => x"8f2a80f7", +1045 => x"055a82d4", +1046 => x"73279138", +1047 => x"78922a80", +1048 => x"fc055a8a", +1049 => x"d4732784", +1050 => x"3880fe5a", +1051 => x"79101010", +1052 => x"80deb805", +1053 => x"8c110858", +1054 => x"5576752e", +1055 => x"a3388417", +1056 => x"08fc0670", +1057 => x"7a315556", +1058 => x"738f2488", +1059 => x"d5387380", +1060 => x"25fee638", +1061 => x"8c170857", +1062 => x"76752e09", +1063 => x"8106df38", +1064 => x"811a5a80", +1065 => x"dec80857", +1066 => x"7680dec0", +1067 => x"2e82c038", +1068 => x"841708fc", +1069 => x"06707a31", +1070 => x"5556738f", +1071 => x"2481f938", +1072 => x"80dec00b", +1073 => x"80decc0c", +1074 => x"80dec00b", +1075 => x"80dec80c", +1076 => x"738025fe", +1077 => x"b23883ff", +1078 => x"762783df", +1079 => x"3875892a", +1080 => x"76832a55", +1081 => x"5372802e", +1082 => x"bf387586", +1083 => x"2ab80554", +1084 => x"847327b4", +1085 => x"3880db13", +1086 => x"54947327", +1087 => x"ab38758c", +1088 => x"2a80ee05", +1089 => x"5480d473", +1090 => x"279e3875", +1091 => x"8f2a80f7", +1092 => x"055482d4", +1093 => x"73279138", +1094 => x"75922a80", +1095 => x"fc05548a", +1096 => x"d4732784", +1097 => x"3880fe54", +1098 => x"73101010", +1099 => x"80deb805", +1100 => x"88110856", +1101 => x"5874782e", +1102 => x"86cf3884", +1103 => x"1508fc06", +1104 => x"53757327", +1105 => x"8d388815", +1106 => x"08557478", +1107 => x"2e098106", +1108 => x"ea388c15", +1109 => x"0880deb8", +1110 => x"0b840508", +1111 => x"718c1a0c", +1112 => x"76881a0c", +1113 => x"7888130c", +1114 => x"788c180c", +1115 => x"5d587953", +1116 => x"807a2483", +1117 => x"e6387282", +1118 => x"2c81712b", +1119 => x"5c537a7c", +1120 => x"26819838", +1121 => x"7b7b0653", +1122 => x"7282f138", +1123 => x"79fc0684", +1124 => x"055a7a10", +1125 => x"707d0654", +1126 => x"5b7282e0", +1127 => x"38841a5a", +1128 => x"f1398817", +1129 => x"8c110858", +1130 => x"5876782e", +1131 => x"098106fc", +1132 => x"c238821a", +1133 => x"5afdec39", +1134 => x"78177981", +1135 => x"0784190c", +1136 => x"7080decc", +1137 => x"0c7080de", +1138 => x"c80c80de", +1139 => x"c00b8c12", +1140 => x"0c8c1108", +1141 => x"88120c74", +1142 => x"81078412", +1143 => x"0c741175", +1144 => x"710c5153", +1145 => x"7d518a99", +1146 => x"3f881754", +1147 => x"fcac3980", +1148 => x"deb80b84", +1149 => x"05087a54", +1150 => x"5c798025", +1151 => x"fef83882", +1152 => x"da397a09", +1153 => x"7c067080", +1154 => x"deb80b84", +1155 => x"050c5c7a", +1156 => x"105b7a7c", +1157 => x"2685387a", +1158 => x"85b83880", +1159 => x"deb80b88", +1160 => x"05087084", +1161 => x"1208fc06", +1162 => x"707c317c", +1163 => x"72268f72", +1164 => x"25075757", +1165 => x"5c5d5572", +1166 => x"802e80db", +1167 => x"38797a16", +1168 => x"80deb008", +1169 => x"1b90115a", +1170 => x"55575b80", +1171 => x"deac08ff", +1172 => x"2e8838a0", +1173 => x"8f13e080", +1174 => x"06577652", +1175 => x"7d5191a7", +1176 => x"3f800854", +1177 => x"8008ff2e", +1178 => x"90388008", +1179 => x"76278299", +1180 => x"387480de", +1181 => x"b82e8291", +1182 => x"3880deb8", +1183 => x"0b880508", +1184 => x"55841508", +1185 => x"fc06707a", +1186 => x"317a7226", +1187 => x"8f722507", +1188 => x"52555372", +1189 => x"83e63874", +1190 => x"79810784", +1191 => x"170c7916", +1192 => x"7080deb8", +1193 => x"0b88050c", +1194 => x"75810784", +1195 => x"120c547e", +1196 => x"525788cd", +1197 => x"3f881754", +1198 => x"fae03975", +1199 => x"832a7054", +1200 => x"54807424", +1201 => x"819b3872", +1202 => x"822c8171", +1203 => x"2b80debc", +1204 => x"08077080", +1205 => x"deb80b84", +1206 => x"050c7510", +1207 => x"101080de", +1208 => x"b8058811", +1209 => x"08585a5d", +1210 => x"53778c18", +1211 => x"0c748818", +1212 => x"0c768819", +1213 => x"0c768c16", +1214 => x"0cfcf339", +1215 => x"797a1010", +1216 => x"1080deb8", +1217 => x"05705759", +1218 => x"5d8c1508", +1219 => x"5776752e", +1220 => x"a3388417", +1221 => x"08fc0670", +1222 => x"7a315556", +1223 => x"738f2483", +1224 => x"ca387380", +1225 => x"25848138", +1226 => x"8c170857", +1227 => x"76752e09", +1228 => x"8106df38", +1229 => x"8815811b", +1230 => x"70830655", +1231 => x"5b5572c9", +1232 => x"387c8306", +1233 => x"5372802e", +1234 => x"fdb838ff", +1235 => x"1df81959", +1236 => x"5d881808", +1237 => x"782eea38", +1238 => x"fdb53983", +1239 => x"1a53fc96", +1240 => x"39831470", +1241 => x"822c8171", +1242 => x"2b80debc", +1243 => x"08077080", +1244 => x"deb80b84", +1245 => x"050c7610", +1246 => x"101080de", +1247 => x"b8058811", +1248 => x"08595b5e", +1249 => x"5153fee1", +1250 => x"3980ddfc", +1251 => x"08175880", +1252 => x"08762e81", +1253 => x"8d3880de", +1254 => x"ac08ff2e", +1255 => x"83ec3873", +1256 => x"76311880", +1257 => x"ddfc0c73", +1258 => x"87067057", +1259 => x"5372802e", +1260 => x"88388873", +1261 => x"31701555", +1262 => x"5676149f", +1263 => x"ff06a080", +1264 => x"71311770", +1265 => x"547f5357", +1266 => x"538ebc3f", +1267 => x"80085380", +1268 => x"08ff2e81", +1269 => x"a03880dd", +1270 => x"fc081670", +1271 => x"80ddfc0c", +1272 => x"747580de", +1273 => x"b80b8805", +1274 => x"0c747631", +1275 => x"18708107", +1276 => x"51555658", +1277 => x"7b80deb8", +1278 => x"2e839c38", +1279 => x"798f2682", +1280 => x"cb38810b", +1281 => x"84150c84", +1282 => x"1508fc06", +1283 => x"707a317a", +1284 => x"72268f72", +1285 => x"25075255", +1286 => x"5372802e", +1287 => x"fcf93880", +1288 => x"db398008", +1289 => x"9fff0653", +1290 => x"72feeb38", +1291 => x"7780ddfc", +1292 => x"0c80deb8", +1293 => x"0b880508", +1294 => x"7b188107", +1295 => x"84120c55", +1296 => x"80dea808", +1297 => x"78278638", +1298 => x"7780dea8", +1299 => x"0c80dea4", +1300 => x"087827fc", +1301 => x"ac387780", +1302 => x"dea40c84", +1303 => x"1508fc06", +1304 => x"707a317a", +1305 => x"72268f72", +1306 => x"25075255", +1307 => x"5372802e", +1308 => x"fca53888", +1309 => x"39807454", +1310 => x"56fedb39", +1311 => x"7d518581", +1312 => x"3f800b80", +1313 => x"0c8f3d0d", +1314 => x"04735380", +1315 => x"7424a938", +1316 => x"72822c81", +1317 => x"712b80de", +1318 => x"bc080770", +1319 => x"80deb80b", +1320 => x"84050c5d", +1321 => x"53778c18", +1322 => x"0c748818", +1323 => x"0c768819", +1324 => x"0c768c16", +1325 => x"0cf9b739", +1326 => x"83147082", +1327 => x"2c81712b", +1328 => x"80debc08", +1329 => x"077080de", +1330 => x"b80b8405", +1331 => x"0c5e5153", +1332 => x"d4397b7b", +1333 => x"065372fc", +1334 => x"a338841a", +1335 => x"7b105c5a", +1336 => x"f139ff1a", +1337 => x"8111515a", +1338 => x"f7b93978", +1339 => x"17798107", +1340 => x"84190c8c", +1341 => x"18088819", +1342 => x"08718c12", +1343 => x"0c88120c", +1344 => x"597080de", +1345 => x"cc0c7080", +1346 => x"dec80c80", +1347 => x"dec00b8c", +1348 => x"120c8c11", +1349 => x"0888120c", +1350 => x"74810784", +1351 => x"120c7411", +1352 => x"75710c51", +1353 => x"53f9bd39", +1354 => x"75178411", +1355 => x"08810784", +1356 => x"120c538c", +1357 => x"17088818", +1358 => x"08718c12", +1359 => x"0c88120c", +1360 => x"587d5183", +1361 => x"bc3f8817", +1362 => x"54f5cf39", +1363 => x"7284150c", +1364 => x"f41af806", +1365 => x"70841e08", +1366 => x"81060784", +1367 => x"1e0c701d", +1368 => x"545b850b", +1369 => x"84140c85", +1370 => x"0b88140c", +1371 => x"8f7b27fd", +1372 => x"cf38881c", +1373 => x"527d5193", +1374 => x"e73f80de", +1375 => x"b80b8805", +1376 => x"0880ddfc", +1377 => x"085955fd", +1378 => x"b7397780", +1379 => x"ddfc0c73", +1380 => x"80deac0c", +1381 => x"fc913972", +1382 => x"84150cfd", +1383 => x"a339fa3d", +1384 => x"0d7a7902", +1385 => x"8805a705", +1386 => x"33565253", +1387 => x"8373278a", +1388 => x"38708306", +1389 => x"5271802e", +1390 => x"a838ff13", +1391 => x"5372ff2e", +1392 => x"97387033", +1393 => x"5273722e", +1394 => x"91388111", +1395 => x"ff145451", +1396 => x"72ff2e09", +1397 => x"8106eb38", +1398 => x"80517080", +1399 => x"0c883d0d", +1400 => x"04707257", +1401 => x"55835175", +1402 => x"82802914", +1403 => x"ff125256", +1404 => x"708025f3", +1405 => x"38837327", +1406 => x"bf387408", +1407 => x"76327009", +1408 => x"f7fbfdff", +1409 => x"120670f8", +1410 => x"84828180", +1411 => x"06515151", +1412 => x"70802e99", +1413 => x"38745180", +1414 => x"52703357", +1415 => x"73772eff", +1416 => x"b9388111", +1417 => x"81135351", +1418 => x"837227ed", +1419 => x"38fc1384", +1420 => x"16565372", +1421 => x"8326c338", +1422 => x"7451fefe", +1423 => x"39fa3d0d", +1424 => x"787a7c72", +1425 => x"72725757", +1426 => x"57595656", +1427 => x"747627b2", +1428 => x"38761551", +1429 => x"757127aa", +1430 => x"38707717", +1431 => x"ff145455", +1432 => x"5371ff2e", +1433 => x"9638ff14", +1434 => x"ff145454", +1435 => x"72337434", +1436 => x"ff125271", +1437 => x"ff2e0981", +1438 => x"06ec3875", +1439 => x"800c883d", +1440 => x"0d04768f", +1441 => x"269738ff", +1442 => x"125271ff", +1443 => x"2eed3872", +1444 => x"70810554", +1445 => x"33747081", +1446 => x"055634eb", +1447 => x"39747607", +1448 => x"83065170", +1449 => x"e2387575", +1450 => x"54517270", +1451 => x"84055408", +1452 => x"71708405", +1453 => x"530c7270", +1454 => x"84055408", +1455 => x"71708405", +1456 => x"530c7270", +1457 => x"84055408", +1458 => x"71708405", +1459 => x"530c7270", +1460 => x"84055408", +1461 => x"71708405", +1462 => x"530cf012", +1463 => x"52718f26", +1464 => x"c9388372", +1465 => x"27953872", +1466 => x"70840554", +1467 => x"08717084", +1468 => x"05530cfc", +1469 => x"12527183", +1470 => x"26ed3870", +1471 => x"54ff8839", +1472 => x"0404ef3d", +1473 => x"0d636567", +1474 => x"405d427b", +1475 => x"802e84f9", +1476 => x"386151ec", +1477 => x"3ff81c70", +1478 => x"84120870", +1479 => x"fc067062", +1480 => x"8b0570f8", +1481 => x"06415945", +1482 => x"5b5c4157", +1483 => x"96742782", +1484 => x"c338807b", +1485 => x"247e7c26", +1486 => x"07598054", +1487 => x"78742e09", +1488 => x"810682a9", +1489 => x"38777b25", +1490 => x"81fc3877", +1491 => x"1780deb8", +1492 => x"0b880508", +1493 => x"5e567c76", +1494 => x"2e84bd38", +1495 => x"84160870", +1496 => x"fe061784", +1497 => x"11088106", +1498 => x"51555573", +1499 => x"828b3874", +1500 => x"fc06597c", +1501 => x"762e84dd", +1502 => x"3877195f", +1503 => x"7e7b2581", +1504 => x"fd387981", +1505 => x"06547382", +1506 => x"bf387677", +1507 => x"08318411", +1508 => x"08fc0656", +1509 => x"5a75802e", +1510 => x"91387c76", +1511 => x"2e84ea38", +1512 => x"74191859", +1513 => x"787b2584", +1514 => x"89387980", +1515 => x"2e829938", +1516 => x"7715567a", +1517 => x"76248290", +1518 => x"388c1a08", +1519 => x"881b0871", +1520 => x"8c120c88", +1521 => x"120c5579", +1522 => x"76595788", +1523 => x"1761fc05", +1524 => x"575975a4", +1525 => x"2685ef38", +1526 => x"7b795555", +1527 => x"93762780", +1528 => x"c9387b70", +1529 => x"84055d08", +1530 => x"7c56790c", +1531 => x"74708405", +1532 => x"56088c18", +1533 => x"0c901754", +1534 => x"9b7627ae", +1535 => x"38747084", +1536 => x"05560874", +1537 => x"0c747084", +1538 => x"05560894", +1539 => x"180c9817", +1540 => x"54a37627", +1541 => x"95387470", +1542 => x"84055608", +1543 => x"740c7470", +1544 => x"84055608", +1545 => x"9c180ca0", +1546 => x"17547470", +1547 => x"84055608", +1548 => x"74708405", +1549 => x"560c7470", +1550 => x"84055608", +1551 => x"74708405", +1552 => x"560c7408", +1553 => x"740c777b", +1554 => x"3156758f", +1555 => x"2680c938", +1556 => x"84170881", +1557 => x"06780784", +1558 => x"180c7717", +1559 => x"84110881", +1560 => x"0784120c", +1561 => x"546151fd", +1562 => x"983f8817", +1563 => x"5473800c", +1564 => x"933d0d04", +1565 => x"905bfdba", +1566 => x"397856fe", +1567 => x"85398c16", +1568 => x"08881708", +1569 => x"718c120c", +1570 => x"88120c55", +1571 => x"7e707c31", +1572 => x"57588f76", +1573 => x"27ffb938", +1574 => x"7a178418", +1575 => x"0881067c", +1576 => x"0784190c", +1577 => x"76810784", +1578 => x"120c7611", +1579 => x"84110881", +1580 => x"0784120c", +1581 => x"55880552", +1582 => x"61518da4", +1583 => x"3f6151fc", +1584 => x"c03f8817", +1585 => x"54ffa639", +1586 => x"7d526151", +1587 => x"edda3f80", +1588 => x"08598008", +1589 => x"802e81a3", +1590 => x"388008f8", +1591 => x"05608405", +1592 => x"08fe0661", +1593 => x"05555776", +1594 => x"742e83e6", +1595 => x"38fc1856", +1596 => x"75a42681", +1597 => x"aa387b80", +1598 => x"08555593", +1599 => x"762780d8", +1600 => x"38747084", +1601 => x"05560880", +1602 => x"08708405", +1603 => x"800c0c80", +1604 => x"08757084", +1605 => x"05570871", +1606 => x"70840553", +1607 => x"0c549b76", +1608 => x"27b63874", +1609 => x"70840556", +1610 => x"08747084", +1611 => x"05560c74", +1612 => x"70840556", +1613 => x"08747084", +1614 => x"05560ca3", +1615 => x"76279938", +1616 => x"74708405", +1617 => x"56087470", +1618 => x"8405560c", +1619 => x"74708405", +1620 => x"56087470", +1621 => x"8405560c", +1622 => x"74708405", +1623 => x"56087470", +1624 => x"8405560c", +1625 => x"74708405", +1626 => x"56087470", +1627 => x"8405560c", +1628 => x"7408740c", +1629 => x"7b526151", +1630 => x"8be63f61", +1631 => x"51fb823f", +1632 => x"78547380", +1633 => x"0c933d0d", +1634 => x"047d5261", +1635 => x"51ec993f", +1636 => x"8008800c", +1637 => x"933d0d04", +1638 => x"84160855", +1639 => x"fbd13975", +1640 => x"537b5280", +1641 => x"0851dfde", +1642 => x"3f7b5261", +1643 => x"518bb13f", +1644 => x"ca398c16", +1645 => x"08881708", +1646 => x"718c120c", +1647 => x"88120c55", +1648 => x"8c1a0888", +1649 => x"1b08718c", +1650 => x"120c8812", +1651 => x"0c557979", +1652 => x"5957fbf7", +1653 => x"39771990", +1654 => x"1c555573", +1655 => x"7524fba2", +1656 => x"387a1770", +1657 => x"80deb80b", +1658 => x"88050c75", +1659 => x"7c318107", +1660 => x"84120c5d", +1661 => x"84170881", +1662 => x"067b0784", +1663 => x"180c6151", +1664 => x"f9ff3f88", +1665 => x"1754fce5", +1666 => x"39741918", +1667 => x"901c555d", +1668 => x"737d24fb", +1669 => x"95388c1a", +1670 => x"08881b08", +1671 => x"718c120c", +1672 => x"88120c55", +1673 => x"881a61fc", +1674 => x"05575975", +1675 => x"a42681ae", +1676 => x"387b7955", +1677 => x"55937627", +1678 => x"80c9387b", +1679 => x"7084055d", +1680 => x"087c5679", +1681 => x"0c747084", +1682 => x"0556088c", +1683 => x"1b0c901a", +1684 => x"549b7627", +1685 => x"ae387470", +1686 => x"84055608", +1687 => x"740c7470", +1688 => x"84055608", +1689 => x"941b0c98", +1690 => x"1a54a376", +1691 => x"27953874", +1692 => x"70840556", +1693 => x"08740c74", +1694 => x"70840556", +1695 => x"089c1b0c", +1696 => x"a01a5474", +1697 => x"70840556", +1698 => x"08747084", +1699 => x"05560c74", +1700 => x"70840556", +1701 => x"08747084", +1702 => x"05560c74", +1703 => x"08740c7a", +1704 => x"1a7080de", +1705 => x"b80b8805", +1706 => x"0c7d7c31", +1707 => x"81078412", +1708 => x"0c54841a", +1709 => x"0881067b", +1710 => x"07841b0c", +1711 => x"6151f8c1", +1712 => x"3f7854fd", +1713 => x"bd397553", +1714 => x"7b527851", +1715 => x"ddb83ffa", +1716 => x"f5398417", +1717 => x"08fc0618", +1718 => x"605858fa", +1719 => x"e9397553", +1720 => x"7b527851", +1721 => x"dda03f7a", +1722 => x"1a7080de", +1723 => x"b80b8805", +1724 => x"0c7d7c31", +1725 => x"81078412", +1726 => x"0c54841a", +1727 => x"0881067b", +1728 => x"07841b0c", +1729 => x"ffb63970", +1730 => x"70707080", +1731 => x"0b80e780", +1732 => x"0c765196", +1733 => x"cc3f8008", +1734 => x"538008ff", +1735 => x"2e893872", +1736 => x"800c5050", +1737 => x"50500480", +1738 => x"e7800854", +1739 => x"73802eef", +1740 => x"38757471", +1741 => x"0c527280", +1742 => x"0c505050", +1743 => x"5004fa3d", +1744 => x"0d7880d6", +1745 => x"fc085455", +1746 => x"b8130880", +1747 => x"2e81b638", +1748 => x"8c152270", +1749 => x"83ffff06", +1750 => x"70832a81", +1751 => x"32708106", +1752 => x"51555556", +1753 => x"72802e80", +1754 => x"dc387384", +1755 => x"2a813281", +1756 => x"0657ff53", +1757 => x"7680f738", +1758 => x"73822a70", +1759 => x"81065153", +1760 => x"72802eb9", +1761 => x"38b01508", +1762 => x"5473802e", +1763 => x"9c3880c0", +1764 => x"15537373", +1765 => x"2e8f3873", +1766 => x"5280d6fc", +1767 => x"085187c0", +1768 => x"3f8c1522", +1769 => x"5676b016", +1770 => x"0c75db06", +1771 => x"53728c16", +1772 => x"23800b84", +1773 => x"160c9015", +1774 => x"08750c72", +1775 => x"56758807", +1776 => x"53728c16", +1777 => x"23901508", +1778 => x"802e80c1", +1779 => x"388c1522", +1780 => x"70810655", +1781 => x"53739e38", +1782 => x"720a100a", +1783 => x"70810651", +1784 => x"53728538", +1785 => x"94150854", +1786 => x"7388160c", +1787 => x"80537280", +1788 => x"0c883d0d", +1789 => x"04800b88", +1790 => x"160c9415", +1791 => x"08309816", +1792 => x"0c8053ea", +1793 => x"39725182", +1794 => x"f73ffec4", +1795 => x"3974518c", +1796 => x"de3f8c15", +1797 => x"22708106", +1798 => x"55537380", +1799 => x"2effb938", +1800 => x"d439f83d", +1801 => x"0d7a5877", +1802 => x"802e8199", +1803 => x"3880d6fc", +1804 => x"0854b814", +1805 => x"08802e80", +1806 => x"ed388c18", +1807 => x"2270902b", +1808 => x"70902c70", +1809 => x"832a8132", +1810 => x"81065c51", +1811 => x"57547880", +1812 => x"cd389018", +1813 => x"08577680", +1814 => x"2e80c338", +1815 => x"77087731", +1816 => x"77790c76", +1817 => x"83067a58", +1818 => x"55557385", +1819 => x"38941808", +1820 => x"56758819", +1821 => x"0c807525", +1822 => x"a5387453", +1823 => x"76529c18", +1824 => x"0851a418", +1825 => x"0854732d", +1826 => x"800b8008", +1827 => x"2580c938", +1828 => x"80081775", +1829 => x"80083156", +1830 => x"57748024", +1831 => x"dd38800b", +1832 => x"800c8a3d", +1833 => x"0d047351", +1834 => x"81d63f8c", +1835 => x"18227090", +1836 => x"2b70902c", +1837 => x"70832a81", +1838 => x"3281065c", +1839 => x"51575478", +1840 => x"dd38ff8e", +1841 => x"39b8a252", +1842 => x"80d6fc08", +1843 => x"5189e73f", +1844 => x"8008800c", +1845 => x"8a3d0d04", +1846 => x"8c182280", +1847 => x"c0075473", +1848 => x"8c1923ff", +1849 => x"0b800c8a", +1850 => x"3d0d0470", +1851 => x"72518071", +1852 => x"0c800b84", +1853 => x"120c800b", +1854 => x"88120c02", +1855 => x"8e05228c", +1856 => x"12230292", +1857 => x"05228e12", +1858 => x"23800b90", +1859 => x"120c800b", +1860 => x"94120c80", +1861 => x"0b98120c", +1862 => x"709c120c", +1863 => x"80c8810b", +1864 => x"a0120c80", +1865 => x"c8cd0ba4", +1866 => x"120c80c9", +1867 => x"c90ba812", +1868 => x"0c80ca9a", +1869 => x"0bac120c", +1870 => x"5004fa3d", +1871 => x"0d797080", +1872 => x"dc298c11", +1873 => x"547a5356", +1874 => x"57e4dd3f", +1875 => x"80088008", +1876 => x"55568008", +1877 => x"802ea238", +1878 => x"80088c05", +1879 => x"54800b80", +1880 => x"080c7680", +1881 => x"0884050c", +1882 => x"73800888", +1883 => x"050c7453", +1884 => x"80527351", +1885 => x"8bfc3f75", +1886 => x"5473800c", +1887 => x"883d0d04", +1888 => x"fc3d0d76", +1889 => x"bd930bbc", +1890 => x"120c5581", +1891 => x"0bb8160c", +1892 => x"800b84dc", +1893 => x"160c830b", +1894 => x"84e0160c", +1895 => x"84e81584", +1896 => x"e4160c74", +1897 => x"54805384", +1898 => x"52841508", +1899 => x"51febc3f", +1900 => x"74548153", +1901 => x"89528815", +1902 => x"0851feaf", +1903 => x"3f745482", +1904 => x"538a528c", +1905 => x"150851fe", +1906 => x"a23f863d", +1907 => x"0d04f93d", +1908 => x"0d7980d6", +1909 => x"fc085457", +1910 => x"b8130880", +1911 => x"2e80c838", +1912 => x"84dc1356", +1913 => x"88160884", +1914 => x"1708ff05", +1915 => x"55558074", +1916 => x"249f388c", +1917 => x"15227090", +1918 => x"2b70902c", +1919 => x"51545872", +1920 => x"802e80ca", +1921 => x"3880dc15", +1922 => x"ff155555", +1923 => x"738025e3", +1924 => x"38750853", +1925 => x"72802e9f", +1926 => x"38725688", +1927 => x"16088417", +1928 => x"08ff0555", +1929 => x"55c83972", +1930 => x"51fed53f", +1931 => x"80d6fc08", +1932 => x"84dc0556", +1933 => x"ffae3984", +1934 => x"527651fd", +1935 => x"fd3f8008", +1936 => x"760c8008", +1937 => x"802e80c0", +1938 => x"38800856", +1939 => x"ce39810b", +1940 => x"8c162372", +1941 => x"750c7288", +1942 => x"160c7284", +1943 => x"160c7290", +1944 => x"160c7294", +1945 => x"160c7298", +1946 => x"160cff0b", +1947 => x"8e162372", +1948 => x"b0160c72", +1949 => x"b4160c72", +1950 => x"80c4160c", +1951 => x"7280c816", +1952 => x"0c74800c", +1953 => x"893d0d04", +1954 => x"8c770c80", +1955 => x"0b800c89", +1956 => x"3d0d0470", +1957 => x"70b8a252", +1958 => x"7351869a", +1959 => x"3f505004", +1960 => x"7080d6fc", +1961 => x"0851ec3f", +1962 => x"5004fb3d", +1963 => x"0d777052", +1964 => x"56f0cd3f", +1965 => x"80deb80b", +1966 => x"88050884", +1967 => x"1108fc06", +1968 => x"707b319f", +1969 => x"ef05e080", +1970 => x"06e08005", +1971 => x"565653a0", +1972 => x"80742494", +1973 => x"38805275", +1974 => x"51f8ac3f", +1975 => x"80dec008", +1976 => x"15537280", +1977 => x"082e8f38", +1978 => x"7551f095", +1979 => x"3f805372", +1980 => x"800c873d", +1981 => x"0d047330", +1982 => x"527551f8", +1983 => x"8a3f8008", +1984 => x"ff2ea838", +1985 => x"80deb80b", +1986 => x"88050875", +1987 => x"75318107", +1988 => x"84120c53", +1989 => x"80ddfc08", +1990 => x"743180dd", +1991 => x"fc0c7551", +1992 => x"efdf3f81", +1993 => x"0b800c87", +1994 => x"3d0d0480", +1995 => x"527551f7", +1996 => x"d63f80de", +1997 => x"b80b8805", +1998 => x"08800871", +1999 => x"3156538f", +2000 => x"7525ffa4", +2001 => x"38800880", +2002 => x"deac0831", +2003 => x"80ddfc0c", +2004 => x"74810784", +2005 => x"140c7551", +2006 => x"efa73f80", +2007 => x"53ff9039", +2008 => x"f63d0d7c", +2009 => x"7e545b72", +2010 => x"802e8283", +2011 => x"387a51ef", +2012 => x"8f3ff813", +2013 => x"84110870", +2014 => x"fe067013", +2015 => x"841108fc", +2016 => x"065d5859", +2017 => x"545880de", +2018 => x"c008752e", +2019 => x"82de3878", +2020 => x"84160c80", +2021 => x"73810654", +2022 => x"5a727a2e", +2023 => x"81d53878", +2024 => x"15841108", +2025 => x"81065153", +2026 => x"72a03878", +2027 => x"17577981", +2028 => x"e6388815", +2029 => x"08537280", +2030 => x"dec02e82", +2031 => x"f9388c15", +2032 => x"08708c15", +2033 => x"0c738812", +2034 => x"0c567681", +2035 => x"0784190c", +2036 => x"76187771", +2037 => x"0c537981", +2038 => x"913883ff", +2039 => x"772781c8", +2040 => x"3876892a", +2041 => x"77832a56", +2042 => x"5372802e", +2043 => x"bf387686", +2044 => x"2ab80555", +2045 => x"847327b4", +2046 => x"3880db13", +2047 => x"55947327", +2048 => x"ab38768c", +2049 => x"2a80ee05", +2050 => x"5580d473", +2051 => x"279e3876", +2052 => x"8f2a80f7", +2053 => x"055582d4", +2054 => x"73279138", +2055 => x"76922a80", +2056 => x"fc05558a", +2057 => x"d4732784", +2058 => x"3880fe55", +2059 => x"74101010", +2060 => x"80deb805", +2061 => x"88110855", +2062 => x"5673762e", +2063 => x"82b33884", +2064 => x"1408fc06", +2065 => x"53767327", +2066 => x"8d388814", +2067 => x"08547376", +2068 => x"2e098106", +2069 => x"ea388c14", +2070 => x"08708c1a", +2071 => x"0c74881a", +2072 => x"0c788812", +2073 => x"0c56778c", +2074 => x"150c7a51", +2075 => x"ed933f8c", +2076 => x"3d0d0477", +2077 => x"08787131", +2078 => x"59770588", +2079 => x"19085457", +2080 => x"7280dec0", +2081 => x"2e80e038", +2082 => x"8c180870", +2083 => x"8c150c73", +2084 => x"88120c56", +2085 => x"fe893988", +2086 => x"15088c16", +2087 => x"08708c13", +2088 => x"0c578817", +2089 => x"0cfea339", +2090 => x"76832a70", +2091 => x"54558075", +2092 => x"24819838", +2093 => x"72822c81", +2094 => x"712b80de", +2095 => x"bc080780", +2096 => x"deb80b84", +2097 => x"050c5374", +2098 => x"10101080", +2099 => x"deb80588", +2100 => x"11085556", +2101 => x"758c190c", +2102 => x"7388190c", +2103 => x"7788170c", +2104 => x"778c150c", +2105 => x"ff843981", +2106 => x"5afdb439", +2107 => x"78177381", +2108 => x"06545772", +2109 => x"98387708", +2110 => x"78713159", +2111 => x"77058c19", +2112 => x"08881a08", +2113 => x"718c120c", +2114 => x"88120c57", +2115 => x"57768107", +2116 => x"84190c77", +2117 => x"80deb80b", +2118 => x"88050c80", +2119 => x"deb40877", +2120 => x"26fec738", +2121 => x"80deb008", +2122 => x"527a51fa", +2123 => x"fd3f7a51", +2124 => x"ebcf3ffe", +2125 => x"ba398178", +2126 => x"8c150c78", +2127 => x"88150c73", +2128 => x"8c1a0c73", +2129 => x"881a0c5a", +2130 => x"fd803983", +2131 => x"1570822c", +2132 => x"81712b80", +2133 => x"debc0807", +2134 => x"80deb80b", +2135 => x"84050c51", +2136 => x"53741010", +2137 => x"1080deb8", +2138 => x"05881108", +2139 => x"5556fee4", +2140 => x"39745380", +2141 => x"7524a738", +2142 => x"72822c81", +2143 => x"712b80de", +2144 => x"bc080780", +2145 => x"deb80b84", +2146 => x"050c5375", +2147 => x"8c190c73", +2148 => x"88190c77", +2149 => x"88170c77", +2150 => x"8c150cfd", +2151 => x"cd398315", +2152 => x"70822c81", +2153 => x"712b80de", +2154 => x"bc080780", +2155 => x"deb80b84", +2156 => x"050c5153", +2157 => x"d639f93d", +2158 => x"0d797b58", +2159 => x"53800b80", +2160 => x"d6fc0853", +2161 => x"5672722e", +2162 => x"80c03884", +2163 => x"dc135574", +2164 => x"762eb738", +2165 => x"88150884", +2166 => x"1608ff05", +2167 => x"54548073", +2168 => x"249d388c", +2169 => x"14227090", +2170 => x"2b70902c", +2171 => x"51535871", +2172 => x"80d83880", +2173 => x"dc14ff14", +2174 => x"54547280", +2175 => x"25e53874", +2176 => x"085574d0", +2177 => x"3880d6fc", +2178 => x"085284dc", +2179 => x"12557480", +2180 => x"2eb13888", +2181 => x"15088416", +2182 => x"08ff0554", +2183 => x"54807324", +2184 => x"9c388c14", +2185 => x"2270902b", +2186 => x"70902c51", +2187 => x"535871ad", +2188 => x"3880dc14", +2189 => x"ff145454", +2190 => x"728025e6", +2191 => x"38740855", +2192 => x"74d13875", +2193 => x"800c893d", +2194 => x"0d047351", +2195 => x"762d7580", +2196 => x"080780dc", +2197 => x"15ff1555", +2198 => x"5556ff9e", +2199 => x"39735176", +2200 => x"2d758008", +2201 => x"0780dc15", +2202 => x"ff155555", +2203 => x"56ca39ea", +2204 => x"3d0d688c", +2205 => x"1122700a", +2206 => x"100a8106", +2207 => x"57585674", +2208 => x"80e4388e", +2209 => x"16227090", +2210 => x"2b70902c", +2211 => x"51555880", +2212 => x"7424b138", +2213 => x"983dc405", +2214 => x"53735280", +2215 => x"d6fc0851", +2216 => x"86833f80", +2217 => x"0b800824", +2218 => x"97387983", +2219 => x"e0800654", +2220 => x"7380c080", +2221 => x"2e818f38", +2222 => x"73828080", +2223 => x"2e819138", +2224 => x"8c162257", +2225 => x"76908007", +2226 => x"54738c17", +2227 => x"23888052", +2228 => x"80d6fc08", +2229 => x"51d9d13f", +2230 => x"80089d38", +2231 => x"8c162282", +2232 => x"0754738c", +2233 => x"172380c3", +2234 => x"1670770c", +2235 => x"90170c81", +2236 => x"0b94170c", +2237 => x"983d0d04", +2238 => x"80d6fc08", +2239 => x"bd930bbc", +2240 => x"120c548c", +2241 => x"16228180", +2242 => x"0754738c", +2243 => x"17238008", +2244 => x"760c8008", +2245 => x"90170c88", +2246 => x"800b9417", +2247 => x"0c74802e", +2248 => x"d3388e16", +2249 => x"2270902b", +2250 => x"70902c53", +2251 => x"55588df3", +2252 => x"3f800880", +2253 => x"2effbd38", +2254 => x"8c162281", +2255 => x"0754738c", +2256 => x"1723983d", +2257 => x"0d04810b", +2258 => x"8c172258", +2259 => x"55fef539", +2260 => x"a8160880", +2261 => x"c9c92e09", +2262 => x"8106fee4", +2263 => x"388c1622", +2264 => x"88800754", +2265 => x"738c1723", +2266 => x"88800b80", +2267 => x"cc170cfe", +2268 => x"dc39fc3d", +2269 => x"0d767971", +2270 => x"028c059f", +2271 => x"05335755", +2272 => x"53558372", +2273 => x"278a3874", +2274 => x"83065170", +2275 => x"802ea238", +2276 => x"ff125271", +2277 => x"ff2e9338", +2278 => x"73737081", +2279 => x"055534ff", +2280 => x"125271ff", +2281 => x"2e098106", +2282 => x"ef387480", +2283 => x"0c863d0d", +2284 => x"04747488", +2285 => x"2b750770", +2286 => x"71902b07", +2287 => x"5154518f", +2288 => x"7227a538", +2289 => x"72717084", +2290 => x"05530c72", +2291 => x"71708405", +2292 => x"530c7271", +2293 => x"70840553", +2294 => x"0c727170", +2295 => x"8405530c", +2296 => x"f0125271", +2297 => x"8f26dd38", +2298 => x"83722790", +2299 => x"38727170", +2300 => x"8405530c", +2301 => x"fc125271", +2302 => x"8326f238", +2303 => x"7053ff90", +2304 => x"39f93d0d", +2305 => x"797c557b", +2306 => x"548e1122", +2307 => x"70902b70", +2308 => x"902c5557", +2309 => x"80d6fc08", +2310 => x"53585683", +2311 => x"f63f8008", +2312 => x"57800b80", +2313 => x"08249338", +2314 => x"80d01608", +2315 => x"80080580", +2316 => x"d0170c76", +2317 => x"800c893d", +2318 => x"0d048c16", +2319 => x"2283dfff", +2320 => x"0655748c", +2321 => x"17237680", +2322 => x"0c893d0d", +2323 => x"04fa3d0d", +2324 => x"788c1122", +2325 => x"70882a70", +2326 => x"81065157", +2327 => x"585674a9", +2328 => x"388c1622", +2329 => x"83dfff06", +2330 => x"55748c17", +2331 => x"237a5479", +2332 => x"538e1622", +2333 => x"70902b70", +2334 => x"902c5456", +2335 => x"80d6fc08", +2336 => x"525681b2", +2337 => x"3f883d0d", +2338 => x"04825480", +2339 => x"538e1622", +2340 => x"70902b70", +2341 => x"902c5456", +2342 => x"80d6fc08", +2343 => x"525782bb", +2344 => x"3f8c1622", +2345 => x"83dfff06", +2346 => x"55748c17", +2347 => x"237a5479", +2348 => x"538e1622", +2349 => x"70902b70", +2350 => x"902c5456", +2351 => x"80d6fc08", +2352 => x"525680f2", +2353 => x"3f883d0d", +2354 => x"04f93d0d", +2355 => x"797c557b", +2356 => x"548e1122", +2357 => x"70902b70", +2358 => x"902c5557", +2359 => x"80d6fc08", +2360 => x"53585681", +2361 => x"f63f8008", +2362 => x"578008ff", +2363 => x"2e99388c", +2364 => x"1622a080", +2365 => x"0755748c", +2366 => x"17238008", +2367 => x"80d0170c", +2368 => x"76800c89", +2369 => x"3d0d048c", +2370 => x"162283df", +2371 => x"ff065574", +2372 => x"8c172376", +2373 => x"800c893d", +2374 => x"0d047070", +2375 => x"70748e11", +2376 => x"2270902b", +2377 => x"70902c55", +2378 => x"51515380", +2379 => x"d6fc0851", +2380 => x"bd3f5050", +2381 => x"5004fb3d", +2382 => x"0d800b80", +2383 => x"e7800c7a", +2384 => x"53795278", +2385 => x"51839c3f", +2386 => x"80085580", +2387 => x"08ff2e88", +2388 => x"3874800c", +2389 => x"873d0d04", +2390 => x"80e78008", +2391 => x"5675802e", +2392 => x"f0387776", +2393 => x"710c5474", +2394 => x"800c873d", +2395 => x"0d047070", +2396 => x"7070800b", +2397 => x"80e7800c", +2398 => x"765185a4", +2399 => x"3f800853", +2400 => x"8008ff2e", +2401 => x"89387280", +2402 => x"0c505050", +2403 => x"500480e7", +2404 => x"80085473", +2405 => x"802eef38", +2406 => x"7574710c", +2407 => x"5272800c", +2408 => x"50505050", +2409 => x"04fc3d0d", +2410 => x"800b80e7", +2411 => x"800c7852", +2412 => x"775187d4", +2413 => x"3f800854", +2414 => x"8008ff2e", +2415 => x"88387380", +2416 => x"0c863d0d", +2417 => x"0480e780", +2418 => x"08557480", +2419 => x"2ef03876", +2420 => x"75710c53", +2421 => x"73800c86", +2422 => x"3d0d04fb", +2423 => x"3d0d800b", +2424 => x"80e7800c", +2425 => x"7a537952", +2426 => x"785185b0", +2427 => x"3f800855", +2428 => x"8008ff2e", +2429 => x"88387480", +2430 => x"0c873d0d", +2431 => x"0480e780", +2432 => x"08567580", +2433 => x"2ef03877", +2434 => x"76710c54", +2435 => x"74800c87", +2436 => x"3d0d04fb", +2437 => x"3d0d800b", +2438 => x"80e7800c", +2439 => x"7a537952", +2440 => x"785182b7", +2441 => x"3f800855", +2442 => x"8008ff2e", +2443 => x"88387480", +2444 => x"0c873d0d", +2445 => x"0480e780", +2446 => x"08567580", +2447 => x"2ef03877", +2448 => x"76710c54", +2449 => x"74800c87", +2450 => x"3d0d0481", +2451 => x"0b800c04", +2452 => x"7072812e", +2453 => x"8738800b", +2454 => x"800c5004", +2455 => x"735180fd", +2456 => x"3f707070", +2457 => x"80e78408", +2458 => x"51708a38", +2459 => x"80e78c70", +2460 => x"80e7840c", +2461 => x"51707512", +2462 => x"5252ff53", +2463 => x"7087fb80", +2464 => x"80268838", +2465 => x"7080e784", +2466 => x"0c715372", +2467 => x"800c5050", +2468 => x"50047070", +2469 => x"7070800b", +2470 => x"80d6f008", +2471 => x"54547281", +2472 => x"2e9e3873", +2473 => x"80e7880c", +2474 => x"ffbbbe3f", +2475 => x"ffbad13f", +2476 => x"80e6c052", +2477 => x"8151ffbe", +2478 => x"913f8008", +2479 => x"51879b3f", +2480 => x"7280e788", +2481 => x"0cffbba1", +2482 => x"3fffbab4", +2483 => x"3f80e6c0", +2484 => x"528151ff", +2485 => x"bdf43f80", +2486 => x"085186fe", +2487 => x"3f00ff39", +2488 => x"00ff39f5", +2489 => x"3d0d7e60", +2490 => x"80e78808", +2491 => x"705b585b", +2492 => x"5b7580c5", +2493 => x"38777a25", +2494 => x"a238771b", +2495 => x"70337081", +2496 => x"ff065858", +2497 => x"59758a2e", +2498 => x"99387681", +2499 => x"ff0651ff", +2500 => x"bab83f81", +2501 => x"18587978", +2502 => x"24e03879", +2503 => x"800c8d3d", +2504 => x"0d048d51", +2505 => x"ffbaa33f", +2506 => x"78337081", +2507 => x"ff065257", +2508 => x"ffba973f", +2509 => x"811858de", +2510 => x"3979557a", +2511 => x"547d5385", +2512 => x"528d3dfc", +2513 => x"0551ffb9", +2514 => x"e13f8008", +2515 => x"5686843f", +2516 => x"7b80080c", +2517 => x"75800c8d", +2518 => x"3d0d04f6", +2519 => x"3d0d7d7f", +2520 => x"80e78808", +2521 => x"705a585a", +2522 => x"5a7580c4", +2523 => x"38767925", +2524 => x"b238761a", +2525 => x"56ffb9b4", +2526 => x"3f800876", +2527 => x"34800b80", +2528 => x"0881ff06", +2529 => x"5758758a", +2530 => x"2ea23875", +2531 => x"8d327030", +2532 => x"7080257a", +2533 => x"07515156", +2534 => x"75b83881", +2535 => x"17577877", +2536 => x"24d03876", +2537 => x"5675800c", +2538 => x"8c3d0d04", +2539 => x"8158dc39", +2540 => x"78557954", +2541 => x"7c538452", +2542 => x"8c3dfc05", +2543 => x"51ffb8ea", +2544 => x"3f800856", +2545 => x"858d3f7a", +2546 => x"80080c75", +2547 => x"800c8c3d", +2548 => x"0d048117", +2549 => x"56cf39f9", +2550 => x"3d0d7957", +2551 => x"80e78808", +2552 => x"802ead38", +2553 => x"7651c8f8", +2554 => x"3f7b567a", +2555 => x"55800881", +2556 => x"05547653", +2557 => x"8252893d", +2558 => x"fc0551ff", +2559 => x"b8ac3f80", +2560 => x"085784cf", +2561 => x"3f778008", +2562 => x"0c76800c", +2563 => x"893d0d04", +2564 => x"84c13f85", +2565 => x"0b80080c", +2566 => x"ff0b800c", +2567 => x"893d0d04", +2568 => x"fb3d0d80", +2569 => x"e7880870", +2570 => x"56547388", +2571 => x"3874800c", +2572 => x"873d0d04", +2573 => x"77538352", +2574 => x"873dfc05", +2575 => x"51ffb7ea", +2576 => x"3f800854", +2577 => x"848d3f75", +2578 => x"80080c73", +2579 => x"800c873d", +2580 => x"0d04ff0b", +2581 => x"800c04fb", +2582 => x"3d0d7755", +2583 => x"80e78808", +2584 => x"802ea938", +2585 => x"7451c7f8", +2586 => x"3f800881", +2587 => x"05547453", +2588 => x"8752873d", +2589 => x"fc0551ff", +2590 => x"b7b03f80", +2591 => x"085583d3", +2592 => x"3f758008", +2593 => x"0c74800c", +2594 => x"873d0d04", +2595 => x"83c53f85", +2596 => x"0b80080c", +2597 => x"ff0b800c", +2598 => x"873d0d04", +2599 => x"fa3d0d80", +2600 => x"e7880880", +2601 => x"2ea3387a", +2602 => x"55795478", +2603 => x"53865288", +2604 => x"3dfc0551", +2605 => x"ffb6f33f", +2606 => x"80085683", +2607 => x"963f7680", +2608 => x"080c7580", +2609 => x"0c883d0d", +2610 => x"0483883f", +2611 => x"9d0b8008", +2612 => x"0cff0b80", +2613 => x"0c883d0d", +2614 => x"04fb3d0d", +2615 => x"77795656", +2616 => x"80705454", +2617 => x"7375259f", +2618 => x"38741010", +2619 => x"10f80552", +2620 => x"72167033", +2621 => x"70742b76", +2622 => x"078116f8", +2623 => x"16565656", +2624 => x"51517473", +2625 => x"24ea3873", +2626 => x"800c873d", +2627 => x"0d04fc3d", +2628 => x"0d767855", +2629 => x"55bc5380", +2630 => x"527351f4", +2631 => x"d53f8452", +2632 => x"7451ffb5", +2633 => x"3f800874", +2634 => x"23845284", +2635 => x"1551ffa9", +2636 => x"3f800882", +2637 => x"15238452", +2638 => x"881551ff", +2639 => x"9c3f8008", +2640 => x"84150c84", +2641 => x"528c1551", +2642 => x"ff8f3f80", +2643 => x"08881523", +2644 => x"84529015", +2645 => x"51ff823f", +2646 => x"80088a15", +2647 => x"23845294", +2648 => x"1551fef5", +2649 => x"3f80088c", +2650 => x"15238452", +2651 => x"981551fe", +2652 => x"e83f8008", +2653 => x"8e152388", +2654 => x"529c1551", +2655 => x"fedb3f80", +2656 => x"0890150c", +2657 => x"863d0d04", +2658 => x"e93d0d6a", +2659 => x"80e78808", +2660 => x"57577593", +2661 => x"3880c080", +2662 => x"0b84180c", +2663 => x"75ac180c", +2664 => x"75800c99", +2665 => x"3d0d0489", +2666 => x"3d70556a", +2667 => x"54558a52", +2668 => x"993dffbc", +2669 => x"0551ffb4", +2670 => x"f13f8008", +2671 => x"77537552", +2672 => x"56fecb3f", +2673 => x"818d3f77", +2674 => x"80080c75", +2675 => x"800c993d", +2676 => x"0d04e93d", +2677 => x"0d695780", +2678 => x"e7880880", +2679 => x"2eb63876", +2680 => x"51c4fd3f", +2681 => x"893d7056", +2682 => x"80088105", +2683 => x"55775456", +2684 => x"8f52993d", +2685 => x"ffbc0551", +2686 => x"ffb4af3f", +2687 => x"80086b53", +2688 => x"765257fe", +2689 => x"893f80cb", +2690 => x"3f778008", +2691 => x"0c76800c", +2692 => x"993d0d04", +2693 => x"be3f850b", +2694 => x"80080cff", +2695 => x"0b800c99", +2696 => x"3d0d04fc", +2697 => x"3d0d8154", +2698 => x"80e78808", +2699 => x"88387380", +2700 => x"0c863d0d", +2701 => x"04765397", +2702 => x"b952863d", +2703 => x"fc0551ff", +2704 => x"b3e83f80", +2705 => x"08548c3f", +2706 => x"7480080c", +2707 => x"73800c86", +2708 => x"3d0d0480", +2709 => x"d6fc0880", +2710 => x"0c04f73d", +2711 => x"0d7b80d6", +2712 => x"fc0882c8", +2713 => x"11085a54", +2714 => x"5a77802e", +2715 => x"80da3881", +2716 => x"88188419", +2717 => x"08ff0581", +2718 => x"712b5955", +2719 => x"59807424", +2720 => x"80ea3880", +2721 => x"7424b538", +2722 => x"73822b78", +2723 => x"11880556", +2724 => x"56818019", +2725 => x"08770653", +2726 => x"72802eb6", +2727 => x"38781670", +2728 => x"08535379", +2729 => x"51740853", +2730 => x"722dff14", +2731 => x"fc17fc17", +2732 => x"79812c5a", +2733 => x"57575473", +2734 => x"8025d638", +2735 => x"77085877", +2736 => x"ffad3880", +2737 => x"d6fc0853", +2738 => x"bc1308a5", +2739 => x"387951f8", +2740 => x"8c3f7408", +2741 => x"53722dff", +2742 => x"14fc17fc", +2743 => x"1779812c", +2744 => x"5a575754", +2745 => x"738025ff", +2746 => x"a838d139", +2747 => x"8057ff93", +2748 => x"397251bc", +2749 => x"13085372", +2750 => x"2d7951f7", +2751 => x"e03f7070", +2752 => x"80e6c80b", +2753 => x"fc057008", +2754 => x"525270ff", +2755 => x"2e913870", +2756 => x"2dfc1270", +2757 => x"08525270", +2758 => x"ff2e0981", +2759 => x"06f13850", +2760 => x"500404ff", +2761 => x"b4c73f04", +2762 => x"48656c6c", +2763 => x"6f20776f", +2764 => x"726c6420", +2765 => x"310a0000", +2766 => x"48656c6c", +2767 => x"6f20776f", +2768 => x"726c6420", +2769 => x"320a0000", +2770 => x"0a000000", +2771 => x"43000000", +2772 => x"64756d6d", +2773 => x"792e6578", +2774 => x"65000000", +2775 => x"00ffffff", +2776 => x"ff00ffff", +2777 => x"ffff00ff", +2778 => x"ffffff00", +2779 => x"00000000", +2780 => x"00000000", +2781 => x"00000000", +2782 => x"00003350", +2783 => x"00002b80", +2784 => x"00000000", +2785 => x"00002de8", +2786 => x"00002e44", +2787 => x"00002ea0", +2788 => x"00000000", +2789 => x"00000000", +2790 => x"00000000", +2791 => x"00000000", +2792 => x"00000000", +2793 => x"00000000", +2794 => x"00000000", +2795 => x"00000000", +2796 => x"00000000", +2797 => x"00002b4c", +2798 => x"00000000", +2799 => x"00000000", +2800 => x"00000000", +2801 => x"00000000", +2802 => x"00000000", +2803 => x"00000000", +2804 => x"00000000", +2805 => x"00000000", +2806 => x"00000000", +2807 => x"00000000", +2808 => x"00000000", +2809 => x"00000000", +2810 => x"00000000", +2811 => x"00000000", +2812 => x"00000000", +2813 => x"00000000", +2814 => x"00000000", +2815 => x"00000000", +2816 => x"00000000", +2817 => x"00000000", +2818 => x"00000000", +2819 => x"00000000", +2820 => x"00000000", +2821 => x"00000000", +2822 => x"00000000", +2823 => x"00000000", +2824 => x"00000000", +2825 => x"00000000", +2826 => x"00000001", +2827 => x"330eabcd", +2828 => x"1234e66d", +2829 => x"deec0005", +2830 => x"000b0000", +2831 => x"00000000", +2832 => x"00000000", +2833 => x"00000000", +2834 => x"00000000", +2835 => x"00000000", +2836 => x"00000000", +2837 => x"00000000", +2838 => x"00000000", +2839 => x"00000000", +2840 => x"00000000", +2841 => x"00000000", +2842 => x"00000000", +2843 => x"00000000", +2844 => x"00000000", +2845 => x"00000000", +2846 => x"00000000", +2847 => x"00000000", +2848 => x"00000000", +2849 => x"00000000", +2850 => x"00000000", +2851 => x"00000000", +2852 => x"00000000", +2853 => x"00000000", +2854 => x"00000000", +2855 => x"00000000", +2856 => x"00000000", +2857 => x"00000000", +2858 => x"00000000", +2859 => x"00000000", +2860 => x"00000000", +2861 => x"00000000", +2862 => x"00000000", +2863 => x"00000000", +2864 => x"00000000", +2865 => x"00000000", +2866 => x"00000000", +2867 => x"00000000", +2868 => x"00000000", +2869 => x"00000000", +2870 => x"00000000", +2871 => x"00000000", +2872 => x"00000000", +2873 => x"00000000", +2874 => x"00000000", +2875 => x"00000000", +2876 => x"00000000", +2877 => x"00000000", +2878 => x"00000000", +2879 => x"00000000", +2880 => x"00000000", +2881 => x"00000000", +2882 => x"00000000", +2883 => x"00000000", +2884 => x"00000000", +2885 => x"00000000", +2886 => x"00000000", +2887 => x"00000000", +2888 => x"00000000", +2889 => x"00000000", +2890 => x"00000000", +2891 => x"00000000", +2892 => x"00000000", +2893 => x"00000000", +2894 => x"00000000", +2895 => x"00000000", +2896 => x"00000000", +2897 => x"00000000", +2898 => x"00000000", +2899 => x"00000000", +2900 => x"00000000", +2901 => x"00000000", +2902 => x"00000000", +2903 => x"00000000", +2904 => x"00000000", +2905 => x"00000000", +2906 => x"00000000", +2907 => x"00000000", +2908 => x"00000000", +2909 => x"00000000", +2910 => x"00000000", +2911 => x"00000000", +2912 => x"00000000", +2913 => x"00000000", +2914 => x"00000000", +2915 => x"00000000", +2916 => x"00000000", +2917 => x"00000000", +2918 => x"00000000", +2919 => x"00000000", +2920 => x"00000000", +2921 => x"00000000", +2922 => x"00000000", +2923 => x"00000000", +2924 => x"00000000", +2925 => x"00000000", +2926 => x"00000000", +2927 => x"00000000", +2928 => x"00000000", +2929 => x"00000000", +2930 => x"00000000", +2931 => x"00000000", +2932 => x"00000000", +2933 => x"00000000", +2934 => x"00000000", +2935 => x"00000000", +2936 => x"00000000", +2937 => x"00000000", +2938 => x"00000000", +2939 => x"00000000", +2940 => x"00000000", +2941 => x"00000000", +2942 => x"00000000", +2943 => x"00000000", +2944 => x"00000000", +2945 => x"00000000", +2946 => x"00000000", +2947 => x"00000000", +2948 => x"00000000", +2949 => x"00000000", +2950 => x"00000000", +2951 => x"00000000", +2952 => x"00000000", +2953 => x"00000000", +2954 => x"00000000", +2955 => x"00000000", +2956 => x"00000000", +2957 => x"00000000", +2958 => x"00000000", +2959 => x"00000000", +2960 => x"00000000", +2961 => x"00000000", +2962 => x"00000000", +2963 => x"00000000", +2964 => x"00000000", +2965 => x"00000000", +2966 => x"00000000", +2967 => x"00000000", +2968 => x"00000000", +2969 => x"00000000", +2970 => x"00000000", +2971 => x"00000000", +2972 => x"00000000", +2973 => x"00000000", +2974 => x"00000000", +2975 => x"00000000", +2976 => x"00000000", +2977 => x"00000000", +2978 => x"00000000", +2979 => x"00000000", +2980 => x"00000000", +2981 => x"00000000", +2982 => x"00000000", +2983 => x"00000000", +2984 => x"00000000", +2985 => x"00000000", +2986 => x"00000000", +2987 => x"00000000", +2988 => x"00000000", +2989 => x"00000000", +2990 => x"00000000", +2991 => x"00000000", +2992 => x"00000000", +2993 => x"00000000", +2994 => x"00000000", +2995 => x"00000000", +2996 => x"00000000", +2997 => x"00000000", +2998 => x"00000000", +2999 => x"00000000", +3000 => x"00000000", +3001 => x"00000000", +3002 => x"00000000", +3003 => x"00000000", +3004 => x"00000000", +3005 => x"00000000", +3006 => x"00000000", +3007 => x"00000000", +3008 => x"00000000", +3009 => x"00000000", +3010 => x"00000000", +3011 => x"00000000", +3012 => x"00000000", +3013 => x"00000000", +3014 => x"00000000", +3015 => x"00000000", +3016 => x"00000000", +3017 => x"00000000", +3018 => x"00000000", +3019 => x"ffffffff", +3020 => x"00000000", +3021 => x"00020000", +3022 => x"00000000", +3023 => x"00000000", +3024 => x"00002f38", +3025 => x"00002f38", +3026 => x"00002f40", +3027 => x"00002f40", +3028 => x"00002f48", +3029 => x"00002f48", +3030 => x"00002f50", +3031 => x"00002f50", +3032 => x"00002f58", +3033 => x"00002f58", +3034 => x"00002f60", +3035 => x"00002f60", +3036 => x"00002f68", +3037 => x"00002f68", +3038 => x"00002f70", +3039 => x"00002f70", +3040 => x"00002f78", +3041 => x"00002f78", +3042 => x"00002f80", +3043 => x"00002f80", +3044 => x"00002f88", +3045 => x"00002f88", +3046 => x"00002f90", +3047 => x"00002f90", +3048 => x"00002f98", +3049 => x"00002f98", +3050 => x"00002fa0", +3051 => x"00002fa0", +3052 => x"00002fa8", +3053 => x"00002fa8", +3054 => x"00002fb0", +3055 => x"00002fb0", +3056 => x"00002fb8", +3057 => x"00002fb8", +3058 => x"00002fc0", +3059 => x"00002fc0", +3060 => x"00002fc8", +3061 => x"00002fc8", +3062 => x"00002fd0", +3063 => x"00002fd0", +3064 => x"00002fd8", +3065 => x"00002fd8", +3066 => x"00002fe0", +3067 => x"00002fe0", +3068 => x"00002fe8", +3069 => x"00002fe8", +3070 => x"00002ff0", +3071 => x"00002ff0", +3072 => x"00002ff8", +3073 => x"00002ff8", +3074 => x"00003000", +3075 => x"00003000", +3076 => x"00003008", +3077 => x"00003008", +3078 => x"00003010", +3079 => x"00003010", +3080 => x"00003018", +3081 => x"00003018", +3082 => x"00003020", +3083 => x"00003020", +3084 => x"00003028", +3085 => x"00003028", +3086 => x"00003030", +3087 => x"00003030", +3088 => x"00003038", +3089 => x"00003038", +3090 => x"00003040", +3091 => x"00003040", +3092 => x"00003048", +3093 => x"00003048", +3094 => x"00003050", +3095 => x"00003050", +3096 => x"00003058", +3097 => x"00003058", +3098 => x"00003060", +3099 => x"00003060", +3100 => x"00003068", +3101 => x"00003068", +3102 => x"00003070", +3103 => x"00003070", +3104 => x"00003078", +3105 => x"00003078", +3106 => x"00003080", +3107 => x"00003080", +3108 => x"00003088", +3109 => x"00003088", +3110 => x"00003090", +3111 => x"00003090", +3112 => x"00003098", +3113 => x"00003098", +3114 => x"000030a0", +3115 => x"000030a0", +3116 => x"000030a8", +3117 => x"000030a8", +3118 => x"000030b0", +3119 => x"000030b0", +3120 => x"000030b8", +3121 => x"000030b8", +3122 => x"000030c0", +3123 => x"000030c0", +3124 => x"000030c8", +3125 => x"000030c8", +3126 => x"000030d0", +3127 => x"000030d0", +3128 => x"000030d8", +3129 => x"000030d8", +3130 => x"000030e0", +3131 => x"000030e0", +3132 => x"000030e8", +3133 => x"000030e8", +3134 => x"000030f0", +3135 => x"000030f0", +3136 => x"000030f8", +3137 => x"000030f8", +3138 => x"00003100", +3139 => x"00003100", +3140 => x"00003108", +3141 => x"00003108", +3142 => x"00003110", +3143 => x"00003110", +3144 => x"00003118", +3145 => x"00003118", +3146 => x"00003120", +3147 => x"00003120", +3148 => x"00003128", +3149 => x"00003128", +3150 => x"00003130", +3151 => x"00003130", +3152 => x"00003138", +3153 => x"00003138", +3154 => x"00003140", +3155 => x"00003140", +3156 => x"00003148", +3157 => x"00003148", +3158 => x"00003150", +3159 => x"00003150", +3160 => x"00003158", +3161 => x"00003158", +3162 => x"00003160", +3163 => x"00003160", +3164 => x"00003168", +3165 => x"00003168", +3166 => x"00003170", +3167 => x"00003170", +3168 => x"00003178", +3169 => x"00003178", +3170 => x"00003180", +3171 => x"00003180", +3172 => x"00003188", +3173 => x"00003188", +3174 => x"00003190", +3175 => x"00003190", +3176 => x"00003198", +3177 => x"00003198", +3178 => x"000031a0", +3179 => x"000031a0", +3180 => x"000031a8", +3181 => x"000031a8", +3182 => x"000031b0", +3183 => x"000031b0", +3184 => x"000031b8", +3185 => x"000031b8", +3186 => x"000031c0", +3187 => x"000031c0", +3188 => x"000031c8", +3189 => x"000031c8", +3190 => x"000031d0", +3191 => x"000031d0", +3192 => x"000031d8", +3193 => x"000031d8", +3194 => x"000031e0", +3195 => x"000031e0", +3196 => x"000031e8", +3197 => x"000031e8", +3198 => x"000031f0", +3199 => x"000031f0", +3200 => x"000031f8", +3201 => x"000031f8", +3202 => x"00003200", +3203 => x"00003200", +3204 => x"00003208", +3205 => x"00003208", +3206 => x"00003210", +3207 => x"00003210", +3208 => x"00003218", +3209 => x"00003218", +3210 => x"00003220", +3211 => x"00003220", +3212 => x"00003228", +3213 => x"00003228", +3214 => x"00003230", +3215 => x"00003230", +3216 => x"00003238", +3217 => x"00003238", +3218 => x"00003240", +3219 => x"00003240", +3220 => x"00003248", +3221 => x"00003248", +3222 => x"00003250", +3223 => x"00003250", +3224 => x"00003258", +3225 => x"00003258", +3226 => x"00003260", +3227 => x"00003260", +3228 => x"00003268", +3229 => x"00003268", +3230 => x"00003270", +3231 => x"00003270", +3232 => x"00003278", +3233 => x"00003278", +3234 => x"00003280", +3235 => x"00003280", +3236 => x"00003288", +3237 => x"00003288", +3238 => x"00003290", +3239 => x"00003290", +3240 => x"00003298", +3241 => x"00003298", +3242 => x"000032a0", +3243 => x"000032a0", +3244 => x"000032a8", +3245 => x"000032a8", +3246 => x"000032b0", +3247 => x"000032b0", +3248 => x"000032b8", +3249 => x"000032b8", +3250 => x"000032c0", +3251 => x"000032c0", +3252 => x"000032c8", +3253 => x"000032c8", +3254 => x"000032d0", +3255 => x"000032d0", +3256 => x"000032d8", +3257 => x"000032d8", +3258 => x"000032e0", +3259 => x"000032e0", +3260 => x"000032e8", +3261 => x"000032e8", +3262 => x"000032f0", +3263 => x"000032f0", +3264 => x"000032f8", +3265 => x"000032f8", +3266 => x"00003300", +3267 => x"00003300", +3268 => x"00003308", +3269 => x"00003308", +3270 => x"00003310", +3271 => x"00003310", +3272 => x"00003318", +3273 => x"00003318", +3274 => x"00003320", +3275 => x"00003320", +3276 => x"00003328", +3277 => x"00003328", +3278 => x"00003330", +3279 => x"00003330", +3280 => x"00002b50", +3281 => x"ffffffff", +3282 => x"00000000", +3283 => x"ffffffff", +3284 => x"00000000", + others => x"00000000" +); + +begin + +process (clk) +begin + if (clk'event and clk = '1') then + if (memAWriteEnable = '1') then + ram(conv_integer(memAAddr)) := memAWrite; + memARead <= memAWrite; + else + memARead <= ram(conv_integer(memAAddr)); + end if; + end if; +end process; + +process (clk) +begin + if (clk'event and clk = '1') then + if (memBWriteEnable = '1') then + ram(conv_integer(memBAddr)) := memBWrite; + memBRead <= memBWrite; + else + memBRead <= ram(conv_integer(memBAddr)); + end if; + end if; +end process; + + + + +end dualport_ram_arch; diff --git a/zpu/hdl/zpu3/src/ic300.bitgen b/zpu/hdl/zpu3/src/ic300.bitgen new file mode 100644 index 0000000..1095099 --- /dev/null +++ b/zpu/hdl/zpu3/src/ic300.bitgen @@ -0,0 +1,27 @@ +-g DebugBitstream:No +-g Binary:yes +-g CRC:Enable +-g ConfigRate:50 +-g CclkPin:Pullnone +-g M0Pin:Pullnone +-g M1Pin:Pullnone +-g M2Pin:Pullnone +-g ProgPin:PullUp +-g DonePin:Pullnone +-g TckPin:Pullnone +-g TdiPin:Pullnone +-g TdoPin:Pullnone +-g TmsPin:Pullnone +-g UnusedPin:Pullnone +-g UserID:0xFFFFFFFF +-g DCMShutDown:Disable +-g DCIUpdateMode:AsRequired +-g StartUpClk:CClk +-g DONE_cycle:4 +-g GTS_cycle:5 +-g GWE_cycle:6 +-g LCK_cycle:NoWait +-g Security:Level1 +-g DonePipe:No +-g DriveDone:Yes + diff --git a/zpu/hdl/zpu3/src/ic300.lso b/zpu/hdl/zpu3/src/ic300.lso new file mode 100644 index 0000000..22de730 --- /dev/null +++ b/zpu/hdl/zpu3/src/ic300.lso @@ -0,0 +1 @@ +work diff --git a/zpu/hdl/zpu3/src/ic300.ucf b/zpu/hdl/zpu3/src/ic300.ucf new file mode 100644 index 0000000..e11357f --- /dev/null +++ b/zpu/hdl/zpu3/src/ic300.ucf @@ -0,0 +1,146 @@ +# clock inputs +net "cpu_clk_p" loc = "R9" | iostandard=LVTTL; + +# input pins +net "cpu_a_p(0)" loc = "N15" | iostandard=LVTTL; +net "cpu_a_p(1)" loc = "P16" | iostandard=LVTTL; +net "cpu_a_p(2)" loc = "P13" | iostandard=LVTTL; +net "cpu_a_p(3)" loc = "N16" | iostandard=LVTTL; +net "cpu_a_p(4)" loc = "P15" | iostandard=LVTTL; +net "cpu_a_p(5)" loc = "R11" | iostandard=LVTTL; +net "cpu_a_p(6)" loc = "T14" | iostandard=LVTTL; +net "cpu_a_p(7)" loc = "R16" | iostandard=LVTTL; +net "cpu_a_p(8)" loc = "P14" | iostandard=LVTTL; +net "cpu_a_p(9)" loc = "T13" | iostandard=LVTTL; +net "cpu_a_p(10)" loc = "R13" | iostandard=LVTTL; +net "cpu_a_p(11)" loc = "P7" | iostandard=LVTTL; +net "cpu_a_p(12)" loc = "N12" | iostandard=LVTTL; +net "cpu_a_p(13)" loc = "R12" | iostandard=LVTTL; +net "cpu_a_p(14)" loc = "L13" | iostandard=LVTTL; +net "cpu_a_p(15)" loc = "K12" | iostandard=LVTTL; +net "cpu_a_p(16)" loc = "K15" | iostandard=LVTTL; +net "cpu_a_p(17)" loc = "T10" | iostandard=LVTTL; +net "cpu_a_p(18)" loc = "T9" | iostandard=LVTTL; +net "cpu_a_p(19)" loc = "N10" | iostandard=LVTTL; +net "cpu_a_p(20)" loc = "T8" | iostandard=LVTTL; +net "cpu_wr_n_p(0)" loc = "L15" | iostandard=LVTTL; +net "cpu_wr_n_p(1)" loc = "N14" | iostandard=LVTTL; +net "cpu_oe_n_p" loc = "T12" | iostandard=LVTTL; +net "cpu_cs_n_p(1)" loc = "R3" | iostandard=LVTTL; +net "cpu_cs_n_p(2)" loc = "M16" | iostandard=LVTTL; +net "cpu_cs_n_p(3)" loc = "P11" | iostandard=LVTTL; + +#net "sdr_clk_fb_p" loc = "B8" | iostandard=SSTL2_I; + +# output pins +net "cpu_fiq_p" loc = "K16" | iostandard=LVTTL; +net "cpu_irq_p(0)" loc = "M14" | iostandard=LVTTL; +net "cpu_irq_p(1)" loc = "J16" | iostandard=LVTTL; +net "cpu_wait_n_p" loc = "M15" | iostandard=LVTTL; + +#net "sdr_clk_p" loc = "D8" | iostandard=SSTL2_I | FAST; +#net "sdr_clk_n_p" loc = "F5" | iostandard=SSTL2_I | FAST; +#net "cke_q_p" loc = "F4" | iostandard=SSTL2_I | FAST; +#net "cs_qn_p" loc = "M2" | iostandard=SSTL2_I | FAST | PULLUP; +#net "ras_qn_p" loc = "J2" | iostandard=SSTL2_I | FAST | PULLUP | NODELAY; +#net "cas_qn_p" loc = "M3" | iostandard=SSTL2_I | FAST | PULLUP | NODELAY; +#net "we_qn_p" loc = "K4" | iostandard=SSTL2_I | FAST | PULLUP | NODELAY; +#net "dm_q_p(0)" loc = "L4" | iostandard=SSTL2_I | FAST; +#net "dm_q_p(1)" loc = "E4" | iostandard=SSTL2_I | FAST; +#net "dqs_q_p(0)" loc = "L3" | iostandard=SSTL2_I | FAST; +#net "dqs_q_p(1)" loc = "D3" | iostandard=SSTL2_I | FAST; +#net "ba_q_p(0)" loc = "M1" | iostandard=SSTL2_I | FAST; +#net "ba_q_p(1)" loc = "J3" | iostandard=SSTL2_I | FAST; +#net "sdr_a_p(0)" loc = "J4" | iostandard=SSTL2_I | FAST; +#net "sdr_a_p(1)" loc = "N2" | iostandard=SSTL2_I | FAST; +#net "sdr_a_p(2)" loc = "H4" | iostandard=SSTL2_I | FAST; +#net "sdr_a_p(3)" loc = "P2" | iostandard=SSTL2_I | FAST; +#net "sdr_a_p(4)" loc = "E7" | iostandard=SSTL2_I | FAST; +#net "sdr_a_p(5)" loc = "G4" | iostandard=SSTL2_I | FAST; +#net "sdr_a_p(6)" loc = "D7" | iostandard=SSTL2_I | FAST; +#net "sdr_a_p(7)" loc = "G5" | iostandard=SSTL2_I | FAST; +#net "sdr_a_p(8)" loc = "C7" | iostandard=SSTL2_I | FAST; +#net "sdr_a_p(9)" loc = "F3" | iostandard=SSTL2_I | FAST; +#net "sdr_a_p(10)" loc = "N3" | iostandard=SSTL2_I | FAST; +#net "sdr_a_p(11)" loc = "E6" | iostandard=SSTL2_I | FAST; +#net "sdr_a_p(12)" loc = "D6" | iostandard=SSTL2_I | FAST; + +# bidirectional pins +net "cpu_d_p(0)" loc = "M11" | iostandard=LVTTL; +net "cpu_d_p(1)" loc = "N11" | iostandard=LVTTL; +net "cpu_d_p(2)" loc = "P10" | iostandard=LVTTL; +net "cpu_d_p(3)" loc = "R10" | iostandard=LVTTL; +net "cpu_d_p(4)" loc = "T7" | iostandard=LVTTL; +net "cpu_d_p(5)" loc = "R7" | iostandard=LVTTL; +net "cpu_d_p(6)" loc = "N6" | iostandard=LVTTL; +net "cpu_d_p(7)" loc = "M6" | iostandard=LVTTL; +net "cpu_d_p(8)" loc = "K13" | iostandard=LVTTL; +net "cpu_d_p(9)" loc = "M10" | iostandard=LVTTL; +net "cpu_d_p(10)" loc = "L12" | iostandard=LVTTL; +net "cpu_d_p(11)" loc = "M13" | iostandard=LVTTL; +net "cpu_d_p(12)" loc = "K14" | iostandard=LVTTL; +net "cpu_d_p(13)" loc = "L14" | iostandard=LVTTL; +net "cpu_d_p(14)" loc = "J13" | iostandard=LVTTL; +net "cpu_d_p(15)" loc = "J14" | iostandard=LVTTL; + +#net "sdr_d_p(0)" loc = "G1" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(1)" loc = "H3" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(2)" loc = "G3" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(3)" loc = "K2" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(4)" loc = "F2" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(5)" loc = "L2" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(6)" loc = "E1" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(7)" loc = "M4" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(8)" loc = "C6" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(9)" loc = "E2" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(10)" loc = "C2" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(11)" loc = "D1" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(12)" loc = "B7" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(13)" loc = "D2" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(14)" loc = "B6" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(15)" loc = "B5" | iostandard=SSTL2_I | NODELAY | FAST; + +# TIMING +# Create timing names +NET "cpu_clk_p" TNM_NET = "cpu_clk_p"; +NET "sdr_clk_fb_p" TNM_NET = "sdr_clk_fb_p"; +#NET "cpu_clk" TNM_NET = "cpu_clk"; +#NET "cpu_clk_2x" TNM_NET = "cpu_clk_2x"; +#NET "cpu_clk_4x" TNM_NET = "cpu_clk_4x"; +#NET "ddr_in_clk" TNM_NET = "ddr_in_clk"; +#NET "ddr_in_clk_2x" TNM_NET = "ddr_in_clk_2x"; + +## Create timing + +# Periode timing +TIMESPEC "TS_cpu_clk" = PERIOD "cpu_clk_p" 15.6 ns HIGH 50 %; +#TIMESPEC "TS_sdr_clk_fb_p" = PERIOD "sdr_clk_fb_p" 7.8 ns HIGH 50 %; + +# Clock domain crossing timing +#TIMESPEC "TS_cpu1_to_cpu2" = FROM "cpu_clk" TO "cpu_clk_2x" 7.8 ns; +#TIMESPEC "TS_cpu1_to_cpu4" = FROM "cpu_clk" TO "cpu_clk_4x" 3.9 ns; +#TIMESPEC "TS_cpu1_to_ddr2" = FROM "cpu_clk" TO "ddr_in_clk" 7.8 ns; +#TIMESPEC "TS_cpu1_to_ddr2_2x" = FROM "cpu_clk" TO "ddr_in_clk_2x" 3.9 ns; + +#TIMESPEC "TS_cpu2_to_cpu1" = FROM "cpu_clk_2x" TO "cpu_clk" 7.8 ns; +#TIMESPEC "TS_cpu2_to_cpu4" = FROM "cpu_clk_2x" TO "cpu_clk_4x" 3.9 ns; +#TIMESPEC "TS_cpu2_to_ddr2" = FROM "cpu_clk_2x" TO "ddr_in_clk" 7.8 ns; +#TIMESPEC "TS_cpu2_to_ddr_2x" = FROM "cpu_clk_2x" TO "ddr_in_clk_2x" 3.9 ns; + +#TIMESPEC "TS_cpu4_to_cpu1" = FROM "cpu_clk_4x" TO "cpu_clk" 3.9 ns; +#TIMESPEC "TS_cpu4_to_cpu2" = FROM "cpu_clk_4x" TO "cpu_clk_2x" 3.9 ns; +#TIMESPEC "TS_cpu4_to_ddr2" = FROM "cpu_clk_4x" TO "ddr_in_clk" 3.9 ns; +#TIMESPEC "TS_cpu4_to_ddr2_2x" = FROM "cpu_clk_4x" TO "ddr_in_clk_2x" 3.9 ns; + +#TIMESPEC "TS_ddr2_to_cpu1" = FROM "ddr_in_clk" TO "cpu_clk" 7.8 ns; +#TIMESPEC "TS_ddr2_to_cpu2" = FROM "ddr_in_clk" TO "cpu_clk_2x" 7.8 ns; +#TIMESPEC "TS_ddr2_to_cpu4" = FROM "ddr_in_clk" TO "cpu_clk_4x" 3.9 ns; +#TIMESPEC "TS_ddr2_to_ddr2_2x" = FROM "ddr_in_clk" TO "ddr_in_clk_2x" 3.9 ns; + +#TIMESPEC "TS_ddr2_2x_to_cpu1" = FROM "ddr_in_clk_2x" TO "cpu_clk" 3.9 ns; +#TIMESPEC "TS_ddr2_2x_to_cpu2" = FROM "ddr_in_clk_2x" TO "cpu_clk_2x" 3.9 ns; +#TIMESPEC "TS_ddr2_2x_to_cpu4" = FROM "ddr_in_clk_2x" TO "cpu_clk_4x" 3.9 ns; +#TIMESPEC "TS_ddr2_2x_to_ddr2" = FROM "ddr_in_clk_2x" TO "ddr_in_clk" 3.9 ns; + + + diff --git a/zpu/hdl/zpu3/src/ic300.vhd b/zpu/hdl/zpu3/src/ic300.vhd new file mode 100644 index 0000000..a1b4f41 --- /dev/null +++ b/zpu/hdl/zpu3/src/ic300.vhd @@ -0,0 +1,144 @@ +-------------------------------------------------------------------------------- +-- Company: Zylin AS +-- Engineer: Tore Ramsland +-- +-- Create Date: 21:47:41 07/03/05 +-- Design Name: ic300 +-- Module Name: ic300 - behave +-- Project Name: eCosBoard +-- Target Device: XC3S400400-FG256 +-- Tool versions: 7.1i +-- Description: Top level +-- +-- Dependencies: +-- +-- Revision: +-- 2005-07-11 Updated to test FPGA +-- +-------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +library UNISIM; +use UNISIM.VComponents.all; + +library zylin; +use zylin.arm7.all; + +library zylin; +use zylin.zpu_config.all; +use zylin.zpupkg.all; + +library work; +use work.phi_config.all; +use work.ic300pkg.all; + +entity ic300 is + generic( + simulate_io_time : boolean := false); + port ( -- Clock inputs + cpu_clk_p : in std_logic; + + -- CPU interface signals + cpu_a_p : in std_logic_vector(20 downto 0); + cpu_wr_n_p : in std_logic_vector(1 downto 0); + cpu_cs_n_p : in std_logic_vector(3 downto 1); + cpu_oe_n_p : in std_logic; + cpu_d_p : inout std_logic_vector(15 downto 0); + cpu_irq_p : out std_logic_vector(1 downto 0); + cpu_fiq_p : out std_logic; + cpu_wait_n_p : out std_logic; + + -- DDR SDRAM Signals + sdr_clk_p : out std_logic; -- ddr_sdram_clock + sdr_clk_n_p : out std_logic; -- /ddr_sdram_clock + cke_q_p : out std_logic; -- clock enable + cs_qn_p : out std_logic; -- /chip select + ras_qn_p : inout std_logic; -- /ras + cas_qn_p : inout std_logic; -- /cas + we_qn_p : inout std_logic; -- /write enable + dm_q_p : out std_logic_vector(1 downto 0); -- data mask bits, set to "00" + dqs_q_p : out std_logic_vector(1 downto 0); -- data strobe, only for write + ba_q_p : out std_logic_vector(1 downto 0); -- bank select + sdr_a_p : out std_logic_vector(12 downto 0); -- address bus + sdr_d_p : inout std_logic_vector(15 downto 0); -- bidir data bus + sdr_clk_fb_p : in std_logic -- DDR clock feedback + ); +end ic300; + +architecture behave of ic300 is + +signal cpu_we : std_logic_vector(1 downto 0); -- Write signal for lower(0) and upper(1) 8 data bits +signal cpu_re : std_logic; -- Read enable signal for all 16 bits +signal areset : std_logic; -- Asyncronous active high reset (for initialization) +signal areset_dummy : std_logic; + +-- Clock module signals +signal clk_status : std_logic_vector(2 downto 0); -- DLL lock status (from 3 DLL's) +signal cpu_clk : std_logic; -- 64 MHz CPU clk +signal cpu_clk_2x : std_logic; -- 128 MHz CPU clk (in phase with 64 MHz) +signal cpu_clk_4x : std_logic; -- 256 MHz CPU clk (in phase with 64 MHz) +signal ddr_in_clk : std_logic; -- 128 MHz clock from DDR SDRAM +signal ddr_in_clk_2x : std_logic; -- 256 MHz clock from DDR SDRAM + -- NOTE! Phase relation to 64 MHz clock unknown + +-- Internal CPU interface signals +signal cpu_din : std_logic_vector(15 downto 0); -- 16-bit data from CPU +signal cpu_dout : std_logic_vector(15 downto 0); -- 16-bit data to CPU +signal cpu_a : std_logic_vector(20 downto 0); -- 21-bit address from CPU + +begin + +-- areset <= '0'; + areset_dummy <= '0'; + + global_init_reset: + rocbuf port map(I=>areset_dummy,O=>areset); + + allclocks: + clocks port map( + areset => areset, + cpu_clk_p => cpu_clk_p, + cpu_clk => cpu_clk, + cpu_clk_2x => cpu_clk_2x, + cpu_clk_4x => cpu_clk_4x, + sdr_clk_fb_p => sdr_clk_fb_p, + ddr_in_clk => ddr_in_clk, + ddr_in_clk_2x => ddr_in_clk_2x, + locked => clk_status); + + arm7cpu: + arm7wb generic map (simulate_io_time => simulate_io_time) + port map( + areset => areset, + cpu_clk => cpu_clk, + cpu_clk_2x => cpu_clk_2x, + cpu_a_p => cpu_a_p, + cpu_wr_n_p => cpu_wr_n_p, + cpu_cs_n_p => cpu_cs_n_p, + cpu_oe_n_p => cpu_oe_n_p, + cpu_d_p => cpu_d_p, + cpu_irq_p => cpu_irq_p, + cpu_fiq_p => cpu_fiq_p, + cpu_wait_n_p => cpu_wait_n_p, + cpu_din => cpu_din, + cpu_a => cpu_a, + cpu_we => cpu_we, + cpu_re => cpu_re, + cpu_dout => cpu_dout); + + + cpu_fpga_regs: + zpuio port map( + areset => areset, + cpu_clk => cpu_clk, + clk_status => clk_status, + cpu_din => cpu_din, + cpu_a => cpu_a, + cpu_we => cpu_we, + cpu_re => cpu_re, + cpu_dout => cpu_dout); + + +end behave; diff --git a/zpu/hdl/zpu3/src/ic300_config.vhd b/zpu/hdl/zpu3/src/ic300_config.vhd new file mode 100644 index 0000000..9d3f939 --- /dev/null +++ b/zpu/hdl/zpu3/src/ic300_config.vhd @@ -0,0 +1,20 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; + +package phi_config is + + constant Fpga_Global_Base : std_logic_vector(19 downto 17) := "000"; -- 0x0280.... + constant Clock_Stat_Reg_Addr : std_logic_vector(3 downto 1) := "000"; -- 0x....0000 + constant Testreg32_Lower_Addr : std_logic_vector(3 downto 1) := "110"; -- 0x....000C + constant Testreg32_Upper_Addr : std_logic_vector(3 downto 1) := "111"; -- 0x....000E + + constant Fpga_DDR_Ctrl_Base : std_logic_vector(19 downto 17) := "111"; -- 0x028E.... + constant DDR_Ctrl_Reg_Addr : std_logic_vector(3 downto 1) := "000"; -- 0x....0000 + constant DDR_Mode_Reg_Addr : std_logic_vector(3 downto 1) := "001"; -- 0x....0002 + + -- These are temporary test registers only! + constant DDR_Data_Reg_Addr : std_logic_vector(3 downto 1) := "100"; -- 0x....0008 + constant DDR_Addr_Reg_Addr : std_logic_vector(3 downto 1) := "101"; -- 0x....000A + constant DDR_Req_Reg_Addr : std_logic_vector(3 downto 1) := "110"; -- 0x....000C + +end phi_config; diff --git a/zpu/hdl/zpu3/src/ic300pkg.vhd b/zpu/hdl/zpu3/src/ic300pkg.vhd new file mode 100644 index 0000000..13da306 --- /dev/null +++ b/zpu/hdl/zpu3/src/ic300pkg.vhd @@ -0,0 +1,88 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; + +package ic300pkg is + + component ic300 is + port ( -- Clock inputs + cpu_clk_p : in std_logic; + + -- CPU interface signals + cpu_a_p : in std_logic_vector(20 downto 0); + cpu_wr_n_p : in std_logic_vector(1 downto 0); + cpu_cs_n_p : in std_logic_vector(3 downto 1); + cpu_oe_n_p : in std_logic; + cpu_d_p : inout std_logic_vector(15 downto 0); + cpu_irq_p : out std_logic_vector(1 downto 0); + cpu_fiq_p : out std_logic; + cpu_wait_n_p : out std_logic; + + -- DDR SDRAM Signals + sdr_clk_p : out std_logic; -- ddr_sdram_clock + sdr_clk_n_p : out std_logic; -- /ddr_sdram_clock + cke_q_p : out std_logic; -- clock enable + cs_qn_p : out std_logic; -- /chip select + ras_qn_p : inout std_logic; -- /ras + cas_qn_p : inout std_logic; -- /cas + we_qn_p : inout std_logic; -- /write enable + dm_q_p : out std_logic_vector(1 downto 0); -- data mask bits, set to "00" + dqs_q_p : out std_logic_vector(1 downto 0); -- data strobe, only for write + ba_q_p : out std_logic_vector(1 downto 0); -- bank select + sdr_a_p : out std_logic_vector(12 downto 0); -- address bus + sdr_d_p : inout std_logic_vector(15 downto 0); -- bidir data bus + sdr_clk_fb_p : in std_logic -- DDR clock feedback + ); + end component; + + component clocks is + port ( areset : in std_logic; + cpu_clk_p : in std_logic; + sdr_clk_fb_p : in std_logic; + cpu_clk : out std_logic; + cpu_clk_2x : out std_logic; + cpu_clk_4x : out std_logic; + ddr_in_clk : out std_logic; + ddr_in_clk_2x : out std_logic; + locked : out std_logic_vector(2 downto 0)); + end component; + + component cpu_regs is + port ( areset : in std_logic; + cpu_clk : in std_logic; + clk_status : in std_logic_vector(2 downto 0); + cpu_din : in std_logic_vector(15 downto 0); + cpu_a : in std_logic_vector(20 downto 0); + cpu_we : in std_logic_vector(1 downto 0); + cpu_re : in std_logic; + cpu_dout : inout std_logic_vector(15 downto 0)); + end component; + + component ddr_bridge is + port ( areset : in std_logic; + cpu_clk : in std_logic; + cpu_clk_2x : in std_logic; + cpu_clk_4x : in std_logic; + ddr_in_clk : in std_logic; + ddr_in_clk_2x : in std_logic; + + cpu_we : in std_logic_vector(1 downto 0); + cpu_re : in std_logic; + cpu_din : in std_logic_vector(15 downto 0); + cpu_a : in std_logic_vector(20 downto 0); + cpu_dout : inout std_logic_vector(15 downto 0); + + sdr_clk_p : out std_logic; -- ddr_sdram_clock + sdr_clk_n_p : out std_logic; -- /ddr_sdram_clock + cke_q_p : out std_logic; -- clock enable + cs_qn_p : out std_logic; -- /chip select + ras_qn_p : inout std_logic; -- /ras + cas_qn_p : inout std_logic; -- /cas + we_qn_p : inout std_logic; -- /write enable + dm_q_p : out std_logic_vector(1 downto 0); -- data mask bits, set to "00" + dqs_q_p : out std_logic_vector(1 downto 0); -- data strobe, only for write + ba_q_p : out std_logic_vector(1 downto 0); -- bank select + sdr_a_p : out std_logic_vector(12 downto 0); -- address bus + sdr_d_p : inout std_logic_vector(15 downto 0)); -- bidir data bus + end component; + +end ic300pkg; diff --git a/zpu/hdl/zpu3/src/io.vhd b/zpu/hdl/zpu3/src/io.vhd new file mode 100644 index 0000000..6b50ca1 --- /dev/null +++ b/zpu/hdl/zpu3/src/io.vhd @@ -0,0 +1,95 @@ +library ieee; +use ieee.std_logic_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +use std.textio.all; + +library zylin; +use zylin.zpu_config.all; +use zylin.zpupkg.all; +use zylin.txt_util.all; + +entity zpu_io is + generic ( + log_file: string := "log.txt" + ); + port( + clk : in std_logic; + areset : in std_logic; + busy : out std_logic; + writeEnable : in std_logic; + readEnable : in std_logic; + write : in std_logic_vector(7 downto 0); + read : out std_logic_vector(7 downto 0); + addr : in std_logic_vector(maxAddrBit downto minAddrBit) + ); +end zpu_io; + + +architecture behave of zpu_io is + + + +signal timer_read : std_logic_vector(7 downto 0); +--signal timer_write : std_logic_vector(7 downto 0); +signal timer_we : std_logic; + +file l_file : TEXT open write_mode is log_file; + +begin + + + timerinst: timer port map ( + clk => clk, + areset => areset, + we => timer_we, + din => write, + adr => addr(4 downto 2), + dout => timer_read); + + + process(areset, clk) + begin + if (areset = '1') then + timer_we <= '0'; + busy <= '1'; + elsif (clk'event and clk = '1') then + busy <= '1'; + timer_we <= '0'; + if writeEnable = '1' then + -- external interface + if addr=x"1000" then + -- Write to UART + -- report "" & character'image(conv_integer(memBint)) severity note; + print(l_file, character'val(conv_integer(write))); + busy <= '0'; + elsif addr(12)='1' then + timer_we <= '1'; + busy <= '0'; + else + report "Illegal IO write" severity failure; + end if; + + end if; + if (readEnable = '1') then + if addr=x"1001" then + read <= (0=>'1', others => '0'); -- recieve empty + busy <= '0'; + elsif addr(12)='1' then + read <= timer_read; + busy <= '0'; + elsif addr(11)='1' then + read <= ZPU_Frequency; + busy <= '0'; + else + report "Illegal IO read" severity failure; + end if; + else + read <= (others => '1'); + end if; + end if; + end process; + + +end behave; + diff --git a/zpu/hdl/zpu3/src/log.txt b/zpu/hdl/zpu3/src/log.txt new file mode 100644 index 0000000..5557b06 --- /dev/null +++ b/zpu/hdl/zpu3/src/log.txt @@ -0,0 +1,156 @@ + + + +D +h +r +y +s +t +o +n +e + +B +e +n +c +h +m +a +r +k +, + +V +e +r +s +i +o +n + +2 +. +1 + +( +L +a +n +g +u +a +g +e +: + +C +) + + + + + + +P +r +o +g +r +a +m + +c +o +m +p +i +l +e +d + +w +i +t +h +o +u +t + +' +r +e +g +i +s +t +e +r +' + +a +t +t +r +i +b +u +t +e + + + + + + +E +x +e +c +u +t +i +o +n + +s +t +a +r +t +s +, + +2 +0 +0 +0 +0 +0 + +r +u +n +s + +t +h +r +o +u +g +h + +D +h +r +y +s +t +o +n +e + + + diff --git a/zpu/hdl/zpu3/src/niltrace.vhd b/zpu/hdl/zpu3/src/niltrace.vhd new file mode 100644 index 0000000..40fc1ca --- /dev/null +++ b/zpu/hdl/zpu3/src/niltrace.vhd @@ -0,0 +1,26 @@ +library ieee; +use ieee.std_logic_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +use std.textio.all; +use work.zpu_config.all; + + +entity trace is + port( + clk : in std_logic; + begin_inst : in std_logic; + pc : in std_logic_vector(maxAddrBit downto 0); + opcode : in std_logic_vector(7 downto 0); + sp : in std_logic_vector(maxAddrBit downto 2); + memA : in std_logic_vector(wordSize-1 downto 0); + busy : in std_logic); +end trace; + + +architecture behave of trace is + +begin + +end behave; + diff --git a/zpu/hdl/zpu3/src/sim_fpga_top.vhd b/zpu/hdl/zpu3/src/sim_fpga_top.vhd new file mode 100644 index 0000000..3044606 --- /dev/null +++ b/zpu/hdl/zpu3/src/sim_fpga_top.vhd @@ -0,0 +1,127 @@ +-------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 20:15:31 04/14/05 +-- Design Name: +-- Module Name: fpga_top - behave +-- Project Name: +-- Target Device: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +-------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +library UNISIM; +use UNISIM.VComponents.all; + +library zylin; +use zylin.zpu_config.all; +use zylin.zpupkg.all; + +entity fpga_top is +end fpga_top; + +architecture behave of fpga_top is + + +signal clk : std_logic; + +signal areset : std_logic; + + +component zpu_top is + Port ( clk : in std_logic; + areset : in std_logic; + io_busy : in std_logic; + io_read : in std_logic_vector(7 downto 0); + io_write : out std_logic_vector(7 downto 0); + io_addr : out std_logic_vector(maxAddrBit downto minAddrBit); + io_writeEnable : out std_logic; + io_readEnable : out std_logic; + interrupt : in std_logic; + break : out std_logic); +end component; + + +component zpu_io is + generic ( + log_file: string := "log.txt" + ); + port( + clk : in std_logic; + areset : in std_logic; + busy : out std_logic; + writeEnable : in std_logic; + readEnable : in std_logic; + write : in std_logic_vector(7 downto 0); + read : out std_logic_vector(7 downto 0); + addr : in std_logic_vector(maxAddrBit downto minAddrBit) + ); +end component; + + + +signal io_busy : std_logic; +signal io_read : std_logic_vector(7 downto 0); +signal io_write : std_logic_vector(7 downto 0); +signal io_addr : std_logic_vector(maxAddrBit downto minAddrBit); +signal io_writeEnable : std_logic; +signal io_readEnable : std_logic; + +signal break : std_logic; + +begin + poweronreset: roc port map (O => areset); + + + + zpu: zpu_top port map ( + clk => clk , + areset => areset, + io_busy => io_busy, + io_read => io_read, + io_write => io_write, + io_addr => io_addr, + io_writeEnable => io_writeEnable, + io_readEnable => io_readEnable, + interrupt => '0', + break => break); + + + ioMap: zpu_io port map ( + clk => clk, + areset => areset, + busy => io_busy, + writeEnable => io_writeEnable, + readEnable => io_readEnable, + write => io_write, + read => io_read, + addr => io_addr + ); + + + + -- wiggle the clock @ 100MHz + clock : PROCESS + begin + clk <= '0'; + wait for 5 ns; + clk <= '1'; + wait for 5 ns; + end PROCESS clock; + + +end behave; diff --git a/zpu/hdl/zpu3/src/status.txt b/zpu/hdl/zpu3/src/status.txt new file mode 100644 index 0000000..df8773a --- /dev/null +++ b/zpu/hdl/zpu3/src/status.txt @@ -0,0 +1,67 @@ +- Make LOADSP/STORESP/ADDSP/PUSHPC & OR emulated => From 444 => 428 LUT. + A pitiful saving in return for destroying performance. +- If I reduce datapath to 8(which is useless) => 197 LUT. + +Bare bones version of ZPU3: + +- remove NOP, PUSHPC, STORESP, LOADSP, ADDSP and OR instructions. This requires + modification to the GCC toolchain and will result in a fairly significant + code increase. We should still do better than ARM though. +- reduce datapath to 16 bits. This will reduce stack usage, which is good. +- 4kBytes of RAM. + + [exec] ========================================================================= + [exec] Device utilization summary: + [exec] --------------------------- + [exec] Selected Device : 3s400ft256-4 + [exec] Number of Slices: 167 out of 3584 4% + [exec] Number of Slice Flip Flops: 126 out of 7168 1% + [exec] Number of 4 input LUTs: 288 out of 7168 4% + [exec] Number of bonded IOBs: 49 out of 173 28% + [exec] Number of BRAMs: 1 out of 16 6% + [exec] Number of GCLKs: 1 out of 8 12% + [exec] ========================================================================= + + + + +Measurements: + +- Removing PUSHPC(which is possible) reduces usage by 2 LUT's. +- I tried to introduce the instructions as seperate states at the top level, + but did not succeed in reducing LUT count. This might be an avenue to + pursue if asynchronous(?) ROM's could replace logic. +- 550 LUT @ 76MHz. 32 bit datapath & 8 bit instructions. Added seperate decode + stage. +- Tried to move memAControl into decoded opcode. Usage went up to 594 from 550. + +- using 16 bit opcodes to encode signals directly. 466 LUT's. +- w/2kBytes 32 RAM & 32 bit opcodes. 415 LUT's. +- 16 bit opcode, 16 bit datapath and 1kbyte RAM. 292 LUT's. + +- 725 LUT's @ 63MHz + Minimum period: 15.909ns{1} (Maximum frequency: 62.858MHz) +- removed addsp, loadsp & storesp. => 670 LUT's. +- removed all pushes & pops to sp. => 638 LUT's. +- removed OR instruction. => 672 LUT's. +- on the second cycle an ADD is done regardless => 713 LUT's. +- using others => 'x' for e.g. pushsp. 713 => 703. +- switching from lots of prioritized if() for decoding instruction to a case + statement. 713 => 631. +- Using ZPU1's memory scheme instead of inferred memory. 713 => 715, i.e. no + difference. +- Removing AddSP. 715 => 704 LUT's. +- Add COMPARE. 715 => 743 LUT's. +- Slight reorganization of binary operand & NOP 715 => 704. +- STORE only pops 1 (which can be fixed in the assembler). 704 => 701. +- Remove NOP. NOP is only used to clear idim_flag. Use NOT instead. +- Removing FLIP. 681 => 646. Using a different way to generate the FLIP, + 681 => 679. +- Add a seperate memory system for code? +- Use IDIM_FLAG to cache value before IM and make add single cycle. + +- by expanding the opcode to 32 bits, encoding everything in the opcode & + using case statements. 713 => 433 LUT. +- 32 bit opcode w/encoded state & 16 bit datapath. => 325 LUT +- by using 512 byte RAM, 16 bit datapath and 32 bit instructions => 285. + diff --git a/zpu/hdl/zpu3/src/testlut.vhd b/zpu/hdl/zpu3/src/testlut.vhd new file mode 100644 index 0000000..fcc8fde --- /dev/null +++ b/zpu/hdl/zpu3/src/testlut.vhd @@ -0,0 +1,106 @@ +-- Company: Zylin AS +-- +-- Hooks up the ZPU to physical pads to ensure that it is not optimized to +-- oblivion. This is purely to have something to measure LUT usage against. +-- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +library zylin; +use zylin.zpu_config.all; +use zylin.zpupkg.all; + +entity ic300 is + port ( -- Clock inputs + cpu_clk_p : in std_logic; + + -- CPU interface signals + cpu_a_p : in std_logic_vector(20 downto 0); + cpu_wr_n_p : in std_logic_vector(1 downto 0); + cpu_cs_n_p : in std_logic_vector(3 downto 1); + cpu_oe_n_p : in std_logic; + cpu_d_p : out std_logic_vector(15 downto 0); + cpu_irq_p : out std_logic_vector(1 downto 0); + cpu_fiq_p : out std_logic; + cpu_wait_n_p : out std_logic; + + sdr_clk_fb_p : in std_logic -- DDR clock feedback + ); +end ic300; + +architecture behave of ic300 is + + +signal io_busy : std_logic; +signal io_read : std_logic_vector(7 downto 0); +signal io_write : std_logic_vector(7 downto 0); +signal io_addr : std_logic_vector(maxAddrBit downto minAddrBit); +signal io_writeEnable : std_logic; +signal io_readEnable : std_logic; + + +signal cpu_we : std_logic_vector(1 downto 0); +signal cpu_re : std_logic; +signal areset : std_logic; + +-- Clock module signals +signal clk_status : std_logic_vector(2 downto 0); +signal cpu_clk : std_logic; +signal cpu_clk_2x : std_logic; +signal cpu_clk_4x : std_logic; +signal ddr_in_clk : std_logic; + + +-- Internal CPU interface signals +signal cpu_din : std_logic_vector(15 downto 0); +signal cpu_dout : std_logic_vector(15 downto 0); +signal cpu_a : std_logic_vector(20 downto 0); + +signal dummy : std_logic_vector(maxAddrBit downto minAddrBit+5); + +begin + + areset <= '0'; -- MUST BE CHANGED TO SOMETHING CORRECT + +-- cpu_d_p <= (others => '0'); + cpu_irq_p <= (others => '0'); + cpu_fiq_p <= '0'; + cpu_wait_n_p <= '0'; + + cpu_d_p(15 downto 15) <= (others => '0'); + + -- delay signals going out/in w/1 clk so the + -- ZPU does not have to drive those pins. + -- + -- these registers can be placed close to the ZPU and these + -- registers then have a full clock to drive the pins. + process(cpu_clk_p, areset) + begin + if (cpu_clk_p'event and cpu_clk_p = '1') then + cpu_d_p(0) <= io_writeEnable; + cpu_d_p(1) <= io_readEnable; + cpu_d_p(9 downto 2) <= io_write; + io_read <= cpu_a_p(7 downto 0); + -- 32 read/write registers is plenty realisitic for a minimal size + -- soft-CPU + cpu_d_p(14 downto 10) <= io_addr(minAddrBit+4 downto minAddrBit); + end if; + end process; + + + zpu: zpu_top port map ( + clk => cpu_clk_p , + areset => areset, + io_busy => '0', + io_writeEnable => io_writeEnable, + io_readEnable => io_readEnable, + io_write => io_write, + io_read => io_read, + io_addr => io_addr, + interrupt => '0' + ); + + + +end behave; diff --git a/zpu/hdl/zpu3/src/timer.vhd b/zpu/hdl/zpu3/src/timer.vhd new file mode 100644 index 0000000..65836f0 --- /dev/null +++ b/zpu/hdl/zpu3/src/timer.vhd @@ -0,0 +1,157 @@ +library ieee; +use ieee.std_logic_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +entity timer is + port( + clk : in std_logic; + areset : in std_logic; + we : in std_logic; + din : in std_logic_vector(7 downto 0); + adr : in std_logic_vector(2 downto 0); + dout : out std_logic_vector(7 downto 0)); +end timer; + + +architecture behave of timer is + +signal sample : std_logic; +signal reset : std_logic; + +signal c : std_logic_vector(1 to 7); + +signal cnt : std_logic_vector(63 downto 0); +signal cnt_smp : std_logic_vector(63 downto 0); + +begin + + reset <= '1' when (we = '1' and din(0) = '1') else '0'; + sample <= '1' when (we = '1' and din(1) = '1') else '0'; + + process(clk, areset) -- Carry generation + begin + if areset = '1' then + c <= "0000000"; + elsif (clk'event and clk = '1') then + if reset = '1' then + c <= "0000000"; + else + if cnt(7 downto 0) = "11111110" then + c(1) <= '1'; + else + c(1) <= '0'; + end if; + if cnt(15 downto 8) = "11111111" then + c(2) <= '1'; + else + c(2) <= '0'; + end if; + if cnt(23 downto 16) = "11111111" and c(2) = '1' then + c(3) <= '1'; + else + c(3) <= '0'; + end if; + if cnt(31 downto 24) = "11111111" and c(3) = '1' then + c(4) <= '1'; + else + c(4) <= '0'; + end if; + if cnt(39 downto 32) = "11111111" and c(4) = '1' then + c(5) <= '1'; + else + c(5) <= '0'; + end if; + if cnt(47 downto 40) = "11111111" and c(5) = '1' then + c(6) <= '1'; + else + c(6) <= '0'; + end if; + if cnt(55 downto 48) = "11111111" and c(6) = '1' then + c(7) <= '1'; + else + c(7) <= '0'; + end if; + end if; + end if; + end process; + + process(clk, areset) + begin + if areset = '1' then + cnt <= (others=>'0'); + elsif (clk'event and clk = '1') then + if reset = '1' then + cnt <= (others=>'0'); + else + cnt(7 downto 0) <= cnt(7 downto 0) + '1'; + if c(1) = '1' then + cnt(15 downto 8) <= cnt(15 downto 8) + '1'; + else + cnt(15 downto 8) <= cnt(15 downto 8); + end if; + if c(2) = '1' and c(1) = '1' then + cnt(23 downto 16) <= cnt(23 downto 16) + '1'; + else + cnt(23 downto 16) <= cnt(23 downto 16); + end if; + if c(3) = '1' and c(1) = '1' then + cnt(31 downto 24) <= cnt(31 downto 24) + '1'; + else + cnt(31 downto 24) <= cnt(31 downto 24); + end if; + if c(4) = '1' and c(1) = '1' then + cnt(39 downto 32) <= cnt(39 downto 32) + '1'; + else + cnt(39 downto 32) <= cnt(39 downto 32); + end if; + if c(5) = '1' and c(1) = '1' then + cnt(47 downto 40) <= cnt(47 downto 40) + '1'; + else + cnt(47 downto 40) <= cnt(47 downto 40); + end if; + if c(6) = '1' and c(1) = '1' then + cnt(55 downto 48) <= cnt(55 downto 48) + '1'; + else + cnt(55 downto 48) <= cnt(55 downto 48); + end if; + if c(7) = '1' and c(1) = '1' then + cnt(63 downto 56) <= cnt(63 downto 56) + '1'; + else + cnt(63 downto 56) <= cnt(63 downto 56); + end if; + end if; + end if; + end process; + + process(clk, areset) + begin + if areset = '1' then + cnt_smp <= (others=>'0'); + elsif (clk'event and clk = '1') then + if reset = '1' then + cnt_smp <= (others=>'0'); + elsif sample = '1' then + cnt_smp <= cnt; + else + cnt_smp <= cnt_smp; + end if; + end if; + end process; + + process(cnt_smp, adr) + begin + case adr is + when "000" => dout <= cnt_smp(7 downto 0); + when "001" => dout <= cnt_smp(15 downto 8); + when "010" => dout <= cnt_smp(23 downto 16); + when "011" => dout <= cnt_smp(31 downto 24); + when "100" => dout <= cnt_smp(39 downto 32); + when "101" => dout <= cnt_smp(47 downto 40); + when "110" => dout <= cnt_smp(55 downto 48); + when others => dout <= cnt_smp(63 downto 56); + end case; + end process; + + +end behave; + diff --git a/zpu/hdl/zpu3/src/trace.vhd b/zpu/hdl/zpu3/src/trace.vhd new file mode 100644 index 0000000..81eb448 --- /dev/null +++ b/zpu/hdl/zpu3/src/trace.vhd @@ -0,0 +1,80 @@ +library ieee; +use ieee.std_logic_1164.all; +--use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +use std.textio.all; + +library zylin; +use zylin.zpu_config.all; +use zylin.zpupkg.all; +use zylin.txt_util.all; + + +entity trace is + generic ( + log_file: string := "trace.txt" + ); + port( + clk : in std_logic; + begin_inst : in std_logic; + pc : in std_logic_vector(maxAddrBit downto 0); + opcode : in std_logic_vector(7 downto 0); + sp : in std_logic_vector(maxAddrBit downto 2); + memA : in std_logic_vector(wordSize-1 downto 0); + memB : in std_logic_vector(wordSize-1 downto 0); + busy : in std_logic + ); +end trace; + + +architecture behave of trace is + + +file l_file : TEXT open write_mode is log_file; + + +begin + + +-- write data and control information to a file + +receive_data: process + +variable l: line; +variable t : std_logic_vector(wordSize-1 downto 0); +variable t2 : std_logic_vector(maxAddrBit downto 0); + + + +begin + + t:= (others => '0'); + t2:= (others => '0'); + + -- print header for the logfile + print(l_file, "#pc,opcode,sp,top_of_stack "); + print(l_file, "#----------"); + print(l_file, " "); + + wait until clk = '1'; + wait until clk = '0'; + + while true loop + + if begin_inst = '1' then + t(maxAddrBit downto 2):=sp; + t2:=pc; + print(l_file, "0x" & hstr(t2) & " 0x" & hstr(opcode) & " 0x" & hstr(t) & " 0x" & hstr(memA) & " 0x" & hstr(memB)); + end if; + + wait until clk = '0'; + + end loop; + + end process receive_data; + + + +end behave; + diff --git a/zpu/hdl/zpu3/src/txt_util.vhd b/zpu/hdl/zpu3/src/txt_util.vhd new file mode 100644 index 0000000..d42303b --- /dev/null +++ b/zpu/hdl/zpu3/src/txt_util.vhd @@ -0,0 +1,586 @@ +library ieee; +use ieee.std_logic_1164.all; +use std.textio.all; + + +package txt_util is + + -- prints a message to the screen + procedure print(text: string); + + -- prints the message when active + -- useful for debug switches + procedure print(active: boolean; text: string); + + -- converts std_logic into a character + function chr(sl: std_logic) return character; + + -- converts std_logic into a string (1 to 1) + function str(sl: std_logic) return string; + + -- converts std_logic_vector into a string (binary base) + function str(slv: std_logic_vector) return string; + + -- converts boolean into a string + function str(b: boolean) return string; + + -- converts an integer into a single character + -- (can also be used for hex conversion and other bases) + function chr(int: integer) return character; + + -- converts integer into string using specified base + function str(int: integer; base: integer) return string; + + -- converts integer to string, using base 10 + function str(int: integer) return string; + + -- convert std_logic_vector into a string in hex format + function hstr(slv: std_logic_vector) return string; + + + -- functions to manipulate strings + ----------------------------------- + + -- convert a character to upper case + function to_upper(c: character) return character; + + -- convert a character to lower case + function to_lower(c: character) return character; + + -- convert a string to upper case + function to_upper(s: string) return string; + + -- convert a string to lower case + function to_lower(s: string) return string; + + + + -- functions to convert strings into other formats + -------------------------------------------------- + + -- converts a character into std_logic + function to_std_logic(c: character) return std_logic; + + -- converts a string into std_logic_vector + function to_std_logic_vector(s: string) return std_logic_vector; + + + + -- file I/O + ----------- + + -- read variable length string from input file + procedure str_read(file in_file: TEXT; + res_string: out string); + + -- print string to a file and start new line + procedure print(file out_file: TEXT; + new_string: in string); + + -- print character to a file and start new line + procedure print(file out_file: TEXT; + char: in character); + +end txt_util; + + + + +package body txt_util is + + + + + -- prints text to the screen + + procedure print(text: string) is + variable msg_line: line; + begin + write(msg_line, text); + writeline(output, msg_line); + end print; + + + + + -- prints text to the screen when active + + procedure print(active: boolean; text: string) is + begin + if active then + print(text); + end if; + end print; + + + -- converts std_logic into a character + + function chr(sl: std_logic) return character is + variable c: character; + begin + case sl is + when 'U' => c:= 'U'; + when 'X' => c:= 'X'; + when '0' => c:= '0'; + when '1' => c:= '1'; + when 'Z' => c:= 'Z'; + when 'W' => c:= 'W'; + when 'L' => c:= 'L'; + when 'H' => c:= 'H'; + when '-' => c:= '-'; + end case; + return c; + end chr; + + + + -- converts std_logic into a string (1 to 1) + + function str(sl: std_logic) return string is + variable s: string(1 to 1); + begin + s(1) := chr(sl); + return s; + end str; + + + + -- converts std_logic_vector into a string (binary base) + -- (this also takes care of the fact that the range of + -- a string is natural while a std_logic_vector may + -- have an integer range) + + function str(slv: std_logic_vector) return string is + variable result : string (1 to slv'length); + variable r : integer; + begin + r := 1; + for i in slv'range loop + result(r) := chr(slv(i)); + r := r + 1; + end loop; + return result; + end str; + + + function str(b: boolean) return string is + + begin + if b then + return "true"; + else + return "false"; + end if; + end str; + + + -- converts an integer into a character + -- for 0 to 9 the obvious mapping is used, higher + -- values are mapped to the characters A-Z + -- (this is usefull for systems with base > 10) + -- (adapted from Steve Vogwell's posting in comp.lang.vhdl) + + function chr(int: integer) return character is + variable c: character; + begin + case int is + when 0 => c := '0'; + when 1 => c := '1'; + when 2 => c := '2'; + when 3 => c := '3'; + when 4 => c := '4'; + when 5 => c := '5'; + when 6 => c := '6'; + when 7 => c := '7'; + when 8 => c := '8'; + when 9 => c := '9'; + when 10 => c := 'A'; + when 11 => c := 'B'; + when 12 => c := 'C'; + when 13 => c := 'D'; + when 14 => c := 'E'; + when 15 => c := 'F'; + when 16 => c := 'G'; + when 17 => c := 'H'; + when 18 => c := 'I'; + when 19 => c := 'J'; + when 20 => c := 'K'; + when 21 => c := 'L'; + when 22 => c := 'M'; + when 23 => c := 'N'; + when 24 => c := 'O'; + when 25 => c := 'P'; + when 26 => c := 'Q'; + when 27 => c := 'R'; + when 28 => c := 'S'; + when 29 => c := 'T'; + when 30 => c := 'U'; + when 31 => c := 'V'; + when 32 => c := 'W'; + when 33 => c := 'X'; + when 34 => c := 'Y'; + when 35 => c := 'Z'; + when others => c := '?'; + end case; + return c; + end chr; + + + + -- convert integer to string using specified base + -- (adapted from Steve Vogwell's posting in comp.lang.vhdl) + + function str(int: integer; base: integer) return string is + + variable temp: string(1 to 10); + variable num: integer; + variable abs_int: integer; + variable len: integer := 1; + variable power: integer := 1; + + begin + + -- bug fix for negative numbers + abs_int := abs(int); + + num := abs_int; + + while num >= base loop -- Determine how many + len := len + 1; -- characters required + num := num / base; -- to represent the + end loop ; -- number. + + for i in len downto 1 loop -- Convert the number to + temp(i) := chr(abs_int/power mod base); -- a string starting + power := power * base; -- with the right hand + end loop ; -- side. + + -- return result and add sign if required + if int < 0 then + return '-'& temp(1 to len); + else + return temp(1 to len); + end if; + + end str; + + + -- convert integer to string, using base 10 + function str(int: integer) return string is + + begin + + return str(int, 10) ; + + end str; + + + + -- converts a std_logic_vector into a hex string. + function hstr(slv: std_logic_vector) return string is + variable hexlen: integer; + variable longslv : std_logic_vector(67 downto 0) := (others => '0'); + variable hex : string(1 to 16); + variable fourbit : std_logic_vector(3 downto 0); + begin + hexlen := (slv'left+1)/4; + if (slv'left+1) mod 4 /= 0 then + hexlen := hexlen + 1; + end if; + longslv(slv'left downto 0) := slv; + for i in (hexlen -1) downto 0 loop + fourbit := longslv(((i*4)+3) downto (i*4)); + case fourbit is + when "0000" => hex(hexlen -I) := '0'; + when "0001" => hex(hexlen -I) := '1'; + when "0010" => hex(hexlen -I) := '2'; + when "0011" => hex(hexlen -I) := '3'; + when "0100" => hex(hexlen -I) := '4'; + when "0101" => hex(hexlen -I) := '5'; + when "0110" => hex(hexlen -I) := '6'; + when "0111" => hex(hexlen -I) := '7'; + when "1000" => hex(hexlen -I) := '8'; + when "1001" => hex(hexlen -I) := '9'; + when "1010" => hex(hexlen -I) := 'A'; + when "1011" => hex(hexlen -I) := 'B'; + when "1100" => hex(hexlen -I) := 'C'; + when "1101" => hex(hexlen -I) := 'D'; + when "1110" => hex(hexlen -I) := 'E'; + when "1111" => hex(hexlen -I) := 'F'; + when "ZZZZ" => hex(hexlen -I) := 'z'; + when "UUUU" => hex(hexlen -I) := 'u'; + when "XXXX" => hex(hexlen -I) := 'x'; + when others => hex(hexlen -I) := '?'; + end case; + end loop; + return hex(1 to hexlen); + end hstr; + + + + -- functions to manipulate strings + ----------------------------------- + + + -- convert a character to upper case + + function to_upper(c: character) return character is + + variable u: character; + + begin + + case c is + when 'a' => u := 'A'; + when 'b' => u := 'B'; + when 'c' => u := 'C'; + when 'd' => u := 'D'; + when 'e' => u := 'E'; + when 'f' => u := 'F'; + when 'g' => u := 'G'; + when 'h' => u := 'H'; + when 'i' => u := 'I'; + when 'j' => u := 'J'; + when 'k' => u := 'K'; + when 'l' => u := 'L'; + when 'm' => u := 'M'; + when 'n' => u := 'N'; + when 'o' => u := 'O'; + when 'p' => u := 'P'; + when 'q' => u := 'Q'; + when 'r' => u := 'R'; + when 's' => u := 'S'; + when 't' => u := 'T'; + when 'u' => u := 'U'; + when 'v' => u := 'V'; + when 'w' => u := 'W'; + when 'x' => u := 'X'; + when 'y' => u := 'Y'; + when 'z' => u := 'Z'; + when others => u := c; + end case; + + return u; + + end to_upper; + + + -- convert a character to lower case + + function to_lower(c: character) return character is + + variable l: character; + + begin + + case c is + when 'A' => l := 'a'; + when 'B' => l := 'b'; + when 'C' => l := 'c'; + when 'D' => l := 'd'; + when 'E' => l := 'e'; + when 'F' => l := 'f'; + when 'G' => l := 'g'; + when 'H' => l := 'h'; + when 'I' => l := 'i'; + when 'J' => l := 'j'; + when 'K' => l := 'k'; + when 'L' => l := 'l'; + when 'M' => l := 'm'; + when 'N' => l := 'n'; + when 'O' => l := 'o'; + when 'P' => l := 'p'; + when 'Q' => l := 'q'; + when 'R' => l := 'r'; + when 'S' => l := 's'; + when 'T' => l := 't'; + when 'U' => l := 'u'; + when 'V' => l := 'v'; + when 'W' => l := 'w'; + when 'X' => l := 'x'; + when 'Y' => l := 'y'; + when 'Z' => l := 'z'; + when others => l := c; + end case; + + return l; + + end to_lower; + + + + -- convert a string to upper case + + function to_upper(s: string) return string is + + variable uppercase: string (s'range); + + begin + + for i in s'range loop + uppercase(i):= to_upper(s(i)); + end loop; + return uppercase; + + end to_upper; + + + + -- convert a string to lower case + + function to_lower(s: string) return string is + + variable lowercase: string (s'range); + + begin + + for i in s'range loop + lowercase(i):= to_lower(s(i)); + end loop; + return lowercase; + + end to_lower; + + + +-- functions to convert strings into other types + + +-- converts a character into a std_logic + +function to_std_logic(c: character) return std_logic is + variable sl: std_logic; + begin + case c is + when 'U' => + sl := 'U'; + when 'X' => + sl := 'X'; + when '0' => + sl := '0'; + when '1' => + sl := '1'; + when 'Z' => + sl := 'Z'; + when 'W' => + sl := 'W'; + when 'L' => + sl := 'L'; + when 'H' => + sl := 'H'; + when '-' => + sl := '-'; + when others => + sl := 'X'; + end case; + return sl; + end to_std_logic; + + +-- converts a string into std_logic_vector + +function to_std_logic_vector(s: string) return std_logic_vector is + variable slv: std_logic_vector(s'high-s'low downto 0); + variable k: integer; +begin + k := s'high-s'low; + for i in s'range loop + slv(k) := to_std_logic(s(i)); + k := k - 1; + end loop; + return slv; +end to_std_logic_vector; + + + + + + +---------------- +-- file I/O -- +---------------- + + + +-- read variable length string from input file + +procedure str_read(file in_file: TEXT; + res_string: out string) is + + variable l: line; + variable c: character; + variable is_string: boolean; + + begin + + readline(in_file, l); + -- clear the contents of the result string + for i in res_string'range loop + res_string(i) := ' '; + end loop; + -- read all characters of the line, up to the length + -- of the results string + for i in res_string'range loop + read(l, c, is_string); + res_string(i) := c; + if not is_string then -- found end of line + exit; + end if; + end loop; + +end str_read; + + +-- print string to a file +procedure print(file out_file: TEXT; + new_string: in string) is + + variable l: line; + + begin + + write(l, new_string); + writeline(out_file, l); + +end print; + + +-- print character to a file and start new line +procedure print(file out_file: TEXT; + char: in character) is + + variable l: line; + + begin + + write(l, char); + writeline(out_file, l); + +end print; + + + +-- appends contents of a string to a file until line feed occurs +-- (LF is considered to be the end of the string) + +procedure str_write(file out_file: TEXT; + new_string: in string) is + begin + + for i in new_string'range loop + print(out_file, new_string(i)); + if new_string(i) = LF then -- end of string + exit; + end if; + end loop; + +end str_write; + + + + +end txt_util; + + + + diff --git a/zpu/hdl/zpu3/src/xilinx_dualport.vhd b/zpu/hdl/zpu3/src/xilinx_dualport.vhd new file mode 100644 index 0000000..0e6edc9 --- /dev/null +++ b/zpu/hdl/zpu3/src/xilinx_dualport.vhd @@ -0,0 +1,1482 @@ +-------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 11:47:36 03/22/05 +-- Design Name: +-- Module Name: mem_sys - behave +-- Project Name: +-- Target Device: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +-------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +library UNISIM; +use UNISIM.VComponents.all; +library zylin; +use zylin.zpu_config.all; + +entity dualport_ram is +port (clk : in std_logic; + memAWriteEnable : in std_logic; + memAAddr : in std_logic_vector(maxAddrBit downto minAddrBit); + memAWrite : in std_logic_vector(wordSize-1 downto 0); + memARead : out std_logic_vector(wordSize-1 downto 0); + memBWriteEnable : in std_logic; + memBAddr : in std_logic_vector(maxAddrBit downto minAddrBit); + memBWrite : in std_logic_vector(wordSize-1 downto 0); + memBRead : out std_logic_vector(wordSize-1 downto 0)); +end dualport_ram; + +architecture dualport_ram_arch of dualport_ram is + + +signal low : std_logic; +signal high : std_logic; +signal re : std_logic; + +begin + + high <= '1'; + low <= '0'; + re <= '1'; + + + ZPU_RAM0 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"01A100E100010001003600770002006D000F0000000F06AD000302940008003C", + INIT_01 => X"7D4000000741F68100C800030000377935990003000300030003002A00150001", + INIT_02 => X"0007584101010C3D55555555370000000092800000001490000000066A594EBB", + INIT_03 => X"0009015555932D564C093A4024055555564CB555593C1569EA90C00000007000", + INIT_04 => X"BF8AA55961BE2A956586C40A4CB00932C00024A80000024C9569C893C0024E90", + INIT_05 => X"18A1251E2A956586F8AA55961BF8AA55961BE2A956586FE2A956586F8AA55961", + INIT_06 => X"51349D53764E258A2043E21BE5645DE5C4FC00E0100430C140E4665595558750", + INIT_07 => X"47B1656A855555D435575A815D077558E475559E755715A1C364945042425555", + INIT_08 => X"5555F123348C17657C405070D5E745A518B58DD5555F55551D5506F00D707B15", + INIT_09 => X"C141C74DD5137120D51C0715094CC4F01006A8131DD91531B913118944815155", + INIT_0A => X"5E559655003D3549550D458C5994A04D476568D05B0F45451D143E53D0F2CD6B", + INIT_0B => X"4D1E1C5D3474C5C5A1E1C5D34787171C44DC7844D3451D37974D164DD55DD555", + INIT_0C => X"2074532E4C3A5074DE129D074D1137134477D546C01D374DD348774DE15D3717", + INIT_0D => X"875650117671948CB05545A5A2615074889149341D04D4956F843575543E1A19", + INIT_0E => X"F804036D9753106651D5140E6905C158D8979404C7459123540DD9955A43F563", + INIT_0F => X"7958D037C3557056405549520F96E88622775767141BA3755D1418E1BE234480", + INIT_10 => X"294A1C405ACCC3705D5599D55037776149584D8F98F98F98FDD00D904D205421", + INIT_11 => X"74710D5C26798346751441DD555BE179544D8F98F98F98FDD00D910DC3D357C3", + INIT_12 => X"605D5570051840119D04C0DC3755B61D7951D9A9522D995D51D5BB106B90F7C0", + INIT_13 => X"D81BC3646611D695A02D1A9419695D695422C40110C0F85D6F899E4D0D555BC3", + INIT_14 => X"28531104D5F01EDD204141807555735D38346423303676407555545F6B945696", + INIT_15 => X"5212D7645155503146685C599546660676E81041C85D570DCE1B07116F116021", + INIT_16 => X"5F9D03530F840406A5725910604E420D910DD521D6170F9AF0F940D91836445D", + INIT_17 => X"83E03E03C03414D5D5F5D9BE7550DD55775514A145E5405657024C3664F3059C", + INIT_18 => X"444C7584143756C431049D594DC444FD19CE181427555124440155503F58E14D", + INIT_19 => X"D54521B201810644D895159C568F40C6C85503E135203FCF555151102C7343CC", + INIT_1A => X"5A95904431351D93820C4D1AA2C7FD0CD95555311185802971639A1755607515", + INIT_1B => X"E7D41815C826057201815C826057201815C806057209815C82741C75D1BF4336", + INIT_1C => X"41BD443664E14155000C4191440445305B46A8D40443A3E115495503116861C3", + INIT_1D => X"A1520F9C10F850FC18DB80D4777F1D5757195241D35F9754D755DD35F40D9D99", + INIT_1E => X"65E6A10F206870F0557411545536F0D5FA1765C8D5443E658956E52727558D14", + INIT_1F => X"DDD2151D31A956A0400F03FC754175510FD4A34252E0DC4076A5EC66A10FB312", + INIT_20 => X"77C1676610FBD310C3C3CC76F05C9FF20755DC17ECE5451D3472D9D215D34C40", + INIT_21 => X"55556189C508B6C3F0F0FF1D9F4561676610F207A5EF52D7957CC0F8800F7726", + INIT_22 => X"8890203480C224080B251D4352F126920C8CF13E00C15A16445A44DA4F105554", + INIT_23 => X"0F203CF4495240B82923890203080E20B8809249524080C2C0B490210C803203", + INIT_24 => X"854F25C74C20400C1030000B24838A6F858A08E24080F2823890203C80D203C8", + INIT_25 => X"00000C000000001F75D5D74FC0000000000000003FFFFFFFEAAA95438104DA47", + INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_28 => X"0000000000000000000000000000000000000000000154000000000000000000", + INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(1 downto 0), -- Port A 2-bit Data Output + DOB => memBRead(1 downto 0), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(1 downto 0), -- Port A 2-bit Data Input + DIB => memBWrite(1 downto 0), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => low, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM1 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"01510111000100020061006B0000004000100002001005510001059A00360064", + INIT_01 => X"40300000064005640380001E0001543802180002000200010002000500110005", + INIT_02 => X"000653709D19C24E555555552400000000920000000024000000000162843876", + INIT_03 => X"0000CC55555DC1557EC5DC00033155555577055555D315607655000000007000", + INIT_04 => X"74818211417206084505C705770000F940000398000001765560745D30017700", + INIT_05 => X"165081C206084505C8182114174818211417206084505D206084505C81821141", + INIT_06 => X"51200592163801450816D095E0044564ADB5C58C82606080118051A1162881C8", + INIT_07 => X"550175554516163566505D44014118AA4818516C185014519662131830201616", + INIT_08 => X"96140906D01981608AF43685992015DA5245D45628675859062835B511755017", + INIT_09 => X"6000B8F861B22CE39C0EC602ED202FC596B59458405845C55118595694001162", + INIT_0A => X"55A58300016D31668D5941040556516111611710005B4D4545716E190280595B", + INIT_0B => X"C968C00BA5BE80B2C68C00B65A3002C1BC8BA32CBE70C3EA02C9CAC89C59458A", + INIT_0C => X"0B1A0D6164EC408F8A047008D9CB622E2D19546CB32362C8BE8312FACC4BA202", + INIT_0D => X"4455CCCC1601143B2E45916976DC147401104104059F14685B456418596D1171", + INIT_0E => X"B4B55655D7453C5DA01654441070416015693378C475DC495A0458256156D15F", + INIT_0F => X"468751645665865943F040105B8164446641416011165018A11454D15D007415", + INIT_10 => X"8175134656FB96434615446289641B554684057595597595D066598611165695", + INIT_11 => X"18A6599B55F856501AD764059656556684017495497495C066598559C91D555D", + INIT_12 => X"5346166005EB404406411356518A35554684656685DD4686446112185F85B684", + INIT_13 => X"D555D6601585546854151468D5568546895EB4044115B4595F454E12599655D6", + INIT_14 => X"335D511B5557C55D467C504218A4E119C7135101456604AE1A05A1555F861668", + INIT_15 => X"91101161116169E0F5D448156855955595171C7110462859E41D55815FD556C1", + INIT_16 => X"153011465B440F059A495550560474598A50591544045B8105B8459841662905", + INIT_17 => X"16E16C16C16514546104654E051C0615418A9450651A1155A1B165662D1D417D", + INIT_18 => X"700111F690095D6159A445904D270024D7D3C3B711855915976D62896C56D165", + INIT_19 => X"62A10F7C5B0C0557D468857E5149D00170C316D15CCD6EC558AD0441D72116D2", + INIT_1A => X"97681F4400824581000023D4516DE3E2517161920D8D38057557861185921514", + INIT_1B => X"E152154484F551212D544846551210954484D551212154484515A45C3B78F895", + INIT_1C => X"457E256626804961925697473A0E2C44D0F51470F47849C431468400D048CD56", + INIT_1D => X"51105B8C05B445B315555C05417946285153C440619C2166018A4619C8598151", + INIT_1E => X"4595955BA2EA0761584405655975B59920519556E9056E0566859A4581645C14", + INIT_1F => X"9055965A909455530D5B16F1185118A55B15520D55159076C55AF455155B50B6", + INIT_20 => X"8085515155B6E90616D6E0146830806841851156724A0EC620DD04559653A415", + INIT_21 => X"75858C001F40514145B5B40507C305515155BA2D93E496D5695545B4605B9418", + INIT_22 => X"0810203080F20408032DA18003C200E266D1C15050400CF788038803844E58A1", + INIT_23 => X"0F203CCF4CF040B12103010203480F208C80A24CF04080D0C03C1023BC82F203", + INIT_24 => X"0600F6CFD04155043040000C38832340070840C04080F2103010203C803203C8", + INIT_25 => X"0A000C00000020061C7185CFEAAAAAAAAAAAAAAA95555555555555540B080387", + INIT_26 => X"0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A", + INIT_27 => X"313A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A", + INIT_28 => X"00000000000000000000000000000000000000000001F0000000000000030000", + INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(3 downto 2), -- Port A 2-bit Data Output + DOB => memBRead(3 downto 2), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(3 downto 2), -- Port A 2-bit Data Input + DIB => memBWrite(3 downto 2), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM2 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"0008000800000000000000010001002A000200000002000800000080000800C6", + INIT_01 => X"023AAAAAA028A040002A0000000002B000000000000000000000000000080000", + INIT_02 => X"AAA00B000020000C0000000002AAAAAAAA082AAAAAAA828AAAAAAAA008223032", + INIT_03 => X"AAA8CC000000E0000CC00E2AA33000000003800000030008300C2AAAAAAA3AAA", + INIT_04 => X"3C2828002830A0A000A0C020038AA8F02AAAA302AAAAA8000008300032A8038A", + INIT_05 => X"820800C0A0A000A0C282800283C2828002830A0A000A0F0A0A000A0C28280028", + INIT_06 => X"00000C00303000208600C841C0008C028AB00806C170000010000C0080002A30", + INIT_07 => X"8AB83808200000C000020C2000023002A830001E300380080002A00230100000", + INIT_08 => X"0000C00C00322300330800E0008020C088C0E280000B0003CC0020F08038AB83", + INIT_09 => X"40001DA0C0200401080400000CD880A23C00C23008C00A3B20303010102C8000", + INIT_0A => X"0000002AEC0C70000A0093220A8008C0230028EE00032A008CA00C230004F00B", + INIT_0B => X"9030420240C820130704202C1C108041C900C10A2CD04E0C00B34C80380E4000", + INIT_0C => X"8E32028C080030DA0244070DA342C0BC26AA40880A36C0A020D1008304020040", + INIT_0D => X"20A0303230280000AC0020A828028A20220000000C2080000B200030000C82C2", + INIT_0E => X"323200204380C300000080880B80A80B83008D037820E3A00008C0400000C203", + INIT_0F => X"00004800400008012C2000000300820808A323008D800A30008083C81C801000", + INIT_10 => X"8030808000C0002F8C0008C0000230000002200882883881C8CB0002FA000000", + INIT_11 => X"3080000A8030002A3220A08C0002800002200882883881C8CB000200C1200170", + INIT_12 => X"2F8C000AB0282A0A8CAFA006230000040008C8300080100408C08A820B003028", + INIT_13 => X"0002C0020208400002C8C1020800040002C282A0A800320003203C02000000C0", + INIT_14 => X"28002208005C2A840002A08A3009090828820E0900000A823200200507004300", + INIT_15 => X"0880A3000000020F00420E030000A080A0208208828C00000821810007080322", + INIT_16 => X"85002D080320300040088382000800000008C080E0AA0300E030A0000000008C", + INIT_17 => X"80C00C00C0010088C088C83C00028C002300800820000200013834000010B03C", + INIT_18 => X"0A20108A00290E4080038C088C00A20081C12810A30000E0A0A000000C02C804", + INIT_19 => X"C000020C0223C020C300000C002300C20882C0C813280FEF0008C0A8280900C0", + INIT_1A => X"8200000030428C0E008C100108E0CC084020000ABA882800380702E300026028", + INIT_1B => X"C0CE4280A240A02890280A240A02890280A200A02880280A2230228824330210", + INIT_1C => X"081C8000008000008C00C204DC280368800042CE0002C1C0A0000383A00E0280", + INIT_1D => X"0880030E803200308281822223088C00020082C0C08C630003008C08CA000000", + INIT_1E => X"00206003248C882E00238008023030008EB33021D0D00C002020400323020E80", + INIT_1F => X"08CA008A00888008AE0300F230223002030008AE02A00808A040812060030823", + INIT_20 => X"88B0060A0032E00880C0C8322821A22AA3020D83B00D808C182E28CA00878020", + INIT_21 => X"20000C003280A28E2030320C8B8220060A003248C6EA80C3003820302403026A", + INIT_22 => X"C2BA0AAC2AA0AE82A93AAEABA2A0B110EAAFA3EFEE8ABBAAC2C442444F300000", + INIT_23 => X"A90AA4BABAAAE82F04946BA0AAC2AA0AC82AE0BAAAE82AB24E5ABA09E42B90AA", + INIT_24 => X"AA8FAAAAACFBBEE8BED8AAA9EC0AEEBECAC1251AE82A905946BA0AA42AA0AA42", + INIT_25 => X"FAA00C000000700562A2FC8FC00000000000000000000000000000000E02C44E", + INIT_26 => X"FAA5500FFAA5500FFAA5500FFAA5500FFAA5500FFAA5500FFAA5500FFAA5500F", + INIT_27 => X"0D25500FFAA5500FFAA5500FFAA5500FFAA5500FFAA5500FFAA5500FFAA5500F", + INIT_28 => X"0000000000000000000000000000000000000000000080000000000000020000", + INIT_29 => X"00000000000000000CF000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(5 downto 4), -- Port A 2-bit Data Output + DOB => memBRead(5 downto 4), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(5 downto 4), -- Port A 2-bit Data Input + DIB => memBWrite(5 downto 4), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM3 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"00040044000000020008000200020115000500020005000400020000000C0089", + INIT_01 => X"2975555550165082031500000000017218820002000200020002002000040000", + INIT_02 => X"5550070B0150281C000000008155555555849555555561555555555404117230", + INIT_03 => X"5555EE000000D8000CE00D9557B8000000036000000B80053000555555553555", + INIT_04 => X"31141484143450521050E090036555F0955557015555540000053200B9540365", + INIT_05 => X"4305181450521050D1414841431141484143450521050C450521050D14148414", + INIT_06 => X"088A0C0830B088305988C583C9824C914136660AEABA8A2AAA2A08084081160A", + INIT_07 => X"1544300C14808010800A0C1694A932055632082D3208420448095991A8684080", + INIT_08 => X"008210800A02130B030A8092006990C04620C540821702028C8290F568315443", + INIT_09 => X"9AB92A20C8084AAB01A820AB082640D53AA081A164C265B750A1702032124808", + INIT_0A => X"08016955148DF82021207E5595420685930996D9952351204C588C926A2FC00B", + INIT_0B => X"20E9A590C3A2192A9E9A590C3A6964A7A312A6830CEBA08A6433AA21310CA020", + INIT_0C => X"6E31A15036890AA312FD78AA33A084ACBE61820106E8843108A6A4229A90C4A4", + INIT_0D => X"11510AC9309402005C20185021614512190A28A28CF042020F108232008C45C4", + INIT_0E => X"31214814832100080940422454855404420142448520CC9E00A4C2C40808D90B", + INIT_0F => X"20268482C800150257062188232541244453130942420532044203C43C593612", + INIT_10 => X"7830466802C008134C8064C8208132082025942102102103D4C6202525980008", + INIT_11 => X"3241200540B2481531105A4C0002082025942102102103D4C6202520FB5002B0", + INIT_12 => X"134C801D711635AD4C525809932060882024C4202648202924C855430F223516", + INIT_13 => X"8282C80B91A8820265040201042028202691635AD44231040B103C99200003C8", + INIT_14 => X"9600999400AC154C98015A653207468C14C808871080914131A01A0A0F24C301", + INIT_15 => X"044853098808030C00C111820210C16080C44104654C8220949E86A80B240B19", + INIT_16 => X"4B46A224231280A0801E421B0AA401202064C048D1552324123252026480814C", + INIT_17 => X"48E88E88E8828204C864C42C90814C8053204205108099080A743C809070883D", + INIT_18 => X"0596A8858AA60CAA58004C066C60594203DB16B053201012505808208D03C468", + INIT_19 => X"C818807D4458A0C2C202603D081702E6862888C460988FDF02089AD4164688C6", + INIT_1A => X"420200A2B99B4C29286E640205F1CC088844081F49601684300F25132009D084", + INIT_1B => X"C9C2831215A0C4856831215A0C4856831215A0C485683121593251515C730222", + INIT_1C => X"203D4080904A20086864E4682C918096010081C30A0292C6442020EBD9160148", + INIT_1D => X"0548232D623112344203115113204C82084015E8C94D930063204C94D5202448", + INIT_1E => X"1080842348196501021064050170B2005553108554208C902010C06313012D42", + INIT_1F => X"04C500542A464205692388F93219320523420569084206041080560084234606", + INIT_20 => X"660408084234C2A548C8D63106851905632142433C9D654C965D54C5005B0A92", + INIT_21 => X"00201E21706259615232358C576854080842348195C541C3003112361A235591", + INIT_22 => X"005000100050140005055541515105505555514554414515441544554002020A", + INIT_23 => X"0500145455514015051545000140050014001055514000514054500114005001", + INIT_24 => X"4545554554515544005000055401555541414551400050515450001400500140", + INIT_25 => X"FFF00C000000501394E93A4FC000000000000000000000000000000005041545", + INIT_26 => X"FFFFFFFAAAAAAAA5555555500000000FFFFFFFFAAAAAAAA5555555500000000F", + INIT_27 => X"093FFFFAAAAAAAA5555555500000000FFFFFFFFAAAAAAAA5555555500000000F", + INIT_28 => X"0000000000000000000000000000000000000000000070000000000000000000", + INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(7 downto 6), -- Port A 2-bit Data Output + DOB => memBRead(7 downto 6), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(7 downto 6), -- Port A 2-bit Data Input + DIB => memBWrite(7 downto 6), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM4 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"02550195000200030077007600030359001E0003001C09DD000307EA00000064", + INIT_01 => X"706555555755A365027600130001222837780003000300030003001600120005", + INIT_02 => X"555709831042087800000000D355555554DA5555555536355555554D5AA46DF7", + INIT_03 => X"5541AA00002A2800AC82A25506A8000000A8A00002A200018329555555559555", + INIT_04 => X"A6956586F8AA55961BE2AAACA89541B85555060D555554AAC001822A2154A895", + INIT_05 => X"15564C3A55961BE2A956586F8A6956586F8AA55961BE29A55961BE2A956586F8", + INIT_06 => X"C4DD0F9C3E254D554C5A94D4A3500F07C1D00B5C330CF3C3F3CC5544DD52494A", + INIT_07 => X"E1B5D755571D97818E76755CE71835646436755036461D5558E13248A5555D99", + INIT_08 => X"DD953042010B03E0024CD486B931E7579D27491D5550765A0D55154409D21B5D", + INIT_09 => X"4424F150D91D3714CDB070020425D4601515551100F8018994D19555114041D5", + INIT_0A => X"75543554959F55D556679190489D554403E0072C4060DE140F41BA11D6E44451", + INIT_0B => X"6845704D611544DC545704D5111C1371144C1DC79E5C71E113697174D0747754", + INIT_0C => X"38344823553107174E413471697193C477905D84C7455344DE19D378574D9313", + INIT_0D => X"55DD48483E1B310505675CCD58860351454104100F441D5552558C3655B95098", + INIT_0E => X"65111AF8DD1AD055541D1D54F08F41D115509285CE0754B47450F82DDB5B6556", + INIT_0F => X"D550499F18E4B076DA4214846A8499649843C3E382555435685D9495496C3106", + INIT_10 => X"4DD55C3555001BD40D9110D5558C3701D5515951951D5114D0D2678221658145", + INIT_11 => X"340D6B9445289AC434711C0F9F15CDD5515951951D5114D0D2678267C4950175", + INIT_12 => X"F40D912D604235CD0D221D444356E005D550D1555381555500D97D875686A420", + INIT_13 => X"80549BE357DF5D553D7DD55A1DD555D557D4336CD746A5475E5D6A216391175A", + INIT_14 => X"010501F5405D40C8D5940C1435580D3849CE5740B18E1910340745C556881D5B", + INIT_15 => X"9B4603E049D9C0084555521555D5710555774D34040D536B8421F9D453441141", + INIT_16 => X"041175106E554455555F9551036500638510F943D169668356285678818E340F", + INIT_17 => X"D8F98F98F98FDD00D920DD6A08440D9103545D563755637555C621AE0505C164", + INIT_18 => X"1157D3918169757BC8590F9710611503950440C103644653210DD555BE179544", + INIT_19 => X"D54C433594B0854455550145755140154527D89514BD8B95754C1CD64F0D1906", + INIT_1A => X"5551405045830F8D75D16D155464110C4D99D918486C8049DD528503667CD750", + INIT_1B => X"A3429553102554C409553102554C409553102554C4095531003C972139044313", + INIT_1C => X"D151519E005111D94414170D204D0484CA4555500503216C59D5301C3526441B", + INIT_1D => X"57046685066556A495D5DD4103D10D51773591C0DE4C83E503570DE4CD6B889D", + INIT_1E => X"1775776F4CCF97A4766261D877D536396DC347407021AA255525558D03E7055D", + INIT_1F => X"30F31DBD15BBDD56706F9BF83648357C6F5D547377B6FD0855545F35776F3A33", + INIT_20 => X"8837575776B0C15859D9843C816FE39A4366411D28401C0D41F3E0FB1D9F4566", + INIT_21 => X"07670D146590C32F1676610FF31267545776B40CCCCFC89D59D5A6E8DC6F2CDF", + INIT_22 => X"CC30300C00300C000C320499A95208E1C4535A2755E92DCB882389238A427556", + INIT_23 => X"000002951C50C080313003030BC02D003400811C50C002CB87E43003F803E300", + INIT_24 => X"5841550C544F955C0740000C380831B1C14C8C00C0C023330030300800D00000", + INIT_25 => X"FFF00C000000F01400FFEAB3C0000000000000003FFFFFFFEAAA9543850823A8", + INIT_26 => X"555555555555555555555555555555500000000000000000000000000000000F", + INIT_27 => X"3A3FFFFFFFFFFFFFFFFFFFFFFFFFFFFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA5", + INIT_28 => X"00000000000000000000000000000000000000000000B0000000000000020000", + INIT_29 => X"00000000000000000CE000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(9 downto 8), -- Port A 2-bit Data Output + DOB => memBRead(9 downto 8), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(9 downto 8), -- Port A 2-bit Data Input + DIB => memBWrite(9 downto 8), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM5 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"0028016800040002006B00A40002002500150002001500200002078500620060", + INIT_01 => X"090555555A16501F0555001E00011554543400020002000200020008001C0004", + INIT_02 => X"555A082282D08E55000000009355555555841555555561455555555058510938", + INIT_03 => X"5564320000C598030D3C595590C80000031660000C58C0246FC1555555550555", + INIT_04 => X"12084505C8182114172040DF165564345555903D55555715C0246FC58D571655", + INIT_05 => X"96296A48211417206084505C81A084505C8182114172058211417206084505C8", + INIT_06 => X"E18B5B896D1CD962A7546A5450CF5B71580861C4E138618E91B8586205916041", + INIT_07 => X"17146758A54584656E0B18A04CF16646C1660945661A862854D183703F0F0588", + INIT_08 => X"0582C0F063C156D030459915F861A18480718705961516185996751FBC617146", + INIT_09 => X"378E9CA59823E272012C64BB400C144101558A49B5B4BD50710945615F380059", + INIT_0A => X"1852855419554461645F509EE3462926D6D2F546F1595CCC5B756511B2343155", + INIT_0B => X"B7702AFAD5CB6C8B1702AFAD9C0AB629CBD9C4BA28082E8CBEA02C8E801A1166", + INIT_0C => X"0166AC531C4502C8D941902C80263E735D40066BA5723A8DA8CCBEA322DAFEBE", + INIT_0D => X"A01240416D1107E5A19151016694527B3730C30C5B44061651A15D6601668510", + INIT_0E => X"DA01D4D9861C12585D05065D2811A8519615D0104661940514C5B41453955451", + INIT_0F => X"6168095D15E114149C58BE2F5542950D5956D6D080162966440614694692E3C5", + INIT_10 => X"40628441544996DA5988A599654D643461695D65165D65D45596534A07012D74", + INIT_11 => X"668D5784B55457D16459CA5B8496B061695D65165D65D4559653465304D4BC14", + INIT_12 => X"CA5985D59F72958459207121566453606155996169016161A5985D5559451715", + INIT_13 => X"4D5555D195940616913116116061606165B7295844555A2759A175215B85D555", + INIT_14 => X"70B417352F056B6A715694656668C4C6756858D0D14D121D66E164A05D440611", + INIT_15 => X"80ACD6D20058E080458A141616C58D8595B41041C55991577DC058B25D774D57", + INIT_16 => X"A01F145855A314C58515165132DC89574495B80B0855514715545534054D025B", + INIT_17 => X"17495497495C066598559D45356659889666462941859D185867416D14046975", + INIT_18 => X"99524CDD7720192513505B84634995CA1454710996622409D9C0596565546840", + INIT_19 => X"996DF895A74805A21616894518A86430CC0D5568440545001645484671C4D444", + INIT_1A => X"561B22C94D195B472D1345162807D10000A4582043DF16F464514116627A61A5", + INIT_1B => X"5100966998A59A662966998A59A662966998A59A66296699896E9892E1FC400C", + INIT_1C => X"6545195D1AC85458697806A50148143DF1458A102C00D046646190140D247717", + INIT_1D => X"280F5144451A15D51616D05456C1599118412815927256E196655927215B4460", + INIT_1E => X"11858751486456951621685817855578511641A9DF0165016105845C16E02E06", + INIT_1F => X"35B8051B0CB846294559D7456619664659462A441B75B441C587E5058759A619", + INIT_20 => X"641759587598E0C15454556E8BAA56A5566140865C12B2596B3255B40507C305", + INIT_21 => X"C1632BBD073618665515155B50B647595875948676CA8846106405D4D05DA420", + INIT_22 => X"C030003C40F10C040D284715799040C1155498499FE9FDA30103010304C41658", + INIT_23 => X"0D1036025D60C0F617D18300080422103440125D60C0420B00C4301190424003", + INIT_24 => X"D0456C31905419FC4108000C300999F50245F460C000C14D1830003040D10344", + INIT_25 => X"AAA00C000000002AAA555573EAAAAAAAAAAAAAAA955555555555555407010320", + INIT_26 => X"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA", + INIT_27 => X"003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + INIT_28 => X"0000000000000000000000000000000000000000000060000000000000020000", + INIT_29 => X"00000000000000000CE000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(11 downto 10), -- Port A 2-bit Data Output + DOB => memBRead(11 downto 10), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(11 downto 10), -- Port A 2-bit Data Input + DIB => memBWrite(11 downto 10), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM6 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"00000000000000000001000200000000000200000002008800000300000000B0", + INIT_01 => X"202000000800080A010000000000080202B20000000000000000000200000000", + INIT_02 => X"0008A20300A00C02AAAAAAAA0B00000000020000000000000000000002002830", + INIT_03 => X"0000B8AAAAC002AB2CBC000002E2AAAAAB000AAAAC0EEA800FC8000000000000", + INIT_04 => X"84A000A0C2828002830A22CF000000B00000023C00000300EA800FC0EC030000", + INIT_05 => X"000003028002830A0A000A0C284A000A0C2828002830A328002830A0A000A0C2", + INIT_06 => X"3C0003000CA33000040300400B38030004028238020082002600000C8C080000", + INIT_07 => X"8A08CB00028C0A803C31300EA08000208000200800208C0003C8380232828C02", + INIT_08 => X"8C000B04881380C8800F0400B03803020093020C000A30280000202224C0A08C", + INIT_09 => X"003914C000B6C0E02C000003000820C882A00080003200900D800800B802D8C0", + INIT_0A => X"30003002B808C8C004033000800C020000C802409E0608CE03080080A00C0302", + INIT_0B => X"C0D00083034C08010D100830340028034CB3403C3000030420C004DA00322302", + INIT_0C => X"E0002A07384C004DB0C22004D00B6894C2820CAE22D364D8304820C120932820", + INIT_0D => X"00E002C00C811C0028A3282C08228A2400CB2CB203C08C0000002C0008000200", + INIT_0E => X"000E80CACC0B80002A0C0C80280088C20008800A22B32C0E30803220CB808800", + INIT_0F => X"C002283E00C289320830C830042028000200C0C8200000002A8C80000022BC30", + INIT_10 => X"88C0020880BB82C800080000003C02F8C0000C08408008008002032202088038", + INIT_11 => X"022C0B02300202C0000020030A00B8C0000C0840800800800203220B08800010", + INIT_12 => X"C8000A04800A12240020200280022F80C000000001080000200000010020A080", + INIT_13 => X"BE8081C90A260C0010BA8008A8C000C00100A122401000030C0030880F0A0080", + INIT_14 => X"0A00822000040020688002080028208008480200401C8A80002302800C200C08", + INIT_15 => X"00A000C8D8C0C0800000028000E00C20200082082000080B202050200E020802", + INIT_16 => X"000218020C02208000050088F8834C0F2A20300FB400002380C20072201CA803", + INIT_17 => X"00882883881C8CB000200C008880000800028C00230002300003203C81004038", + INIT_18 => X"000008428210320A080A03020820002200880A80000202B92028C00028000022", + INIT_19 => X"00890210803420210000280A30001020B8C8C200000C1800302F82430A2083B2", + INIT_1A => X"0000D0B68823032CC0A208000200000C20A8C0E000830008C800228000B06320", + INIT_1B => X"0820808E8CA023A12808E84A023A12808E84A023A12808E8480C0B8AE0040304", + INIT_1C => X"C808003C8233A0C00C30080800009008320000000B83A00828C0082808800001", + INIT_1D => X"00B00820E0C000A08080022200C6000A322860C0083880C000020083800F2028", + INIT_1E => X"E320230E188022AA300E24C13380203035000332ED0C20800080020E80C03C8C", + INIT_1F => X"70320C8A08388C003602C18800000022028C00363330F3888002A2E0230A2220", + INIT_20 => X"2263020230E1E0880182800C92308AAA0000384C8C202300C23220320C8B8220", + INIT_21 => X"E303800A0100820A0060A003082303020230E18800DAB48C08C8B0E0C80202AA", + INIT_22 => X"4AAA2AA4AAA2AA8AAB2AEEEAE2A12512CFEFA2FAAA8F2AA2C59444944F803000", + INIT_23 => X"A32A8CAAABAAA8EF04892AA3AC4AB02AD0AAC2ABAAA8AB12CF7EAA2B4CA932AA", + INIT_24 => X"AE8EEAAFA8FBFAA8AE94AAAAAC8FABAA8A81224AA8EA305892AA3A8CAAB2A8CA", + INIT_25 => X"00000C000000100000000033C00000000000000000000000000000000A04944E", + INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_27 => X"1500000000000000000000000000000000000000000000000000000000000000", + INIT_28 => X"00000000000000000000000000000000000000000000A0000000000000000000", + INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(13 downto 12), -- Port A 2-bit Data Output + DOB => memBRead(13 downto 12), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(13 downto 12), -- Port A 2-bit Data Input + DIB => memBWrite(13 downto 12), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM7 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"028200020002000000020081000001800000000000000A4600000320002A00CA", + INIT_01 => X"905000000C800680020000080000444101710000000000000000001100000002", + INIT_02 => X"000C51A6981A9A015555555587000000002140000000081000000006010850B2", + INIT_03 => X"0001745555E001579D7E000005D15555578005555E0DD5410FE400000000A000", + INIT_04 => X"4C521050D1414841434519CF80000172000005BC00000380D5410FE0DC038000", + INIT_05 => X"00800311484143450521050D148521050D1414841434521484143450521050D1", + INIT_06 => X"B21023208C60000808020082040823582DA15A0A0A828A202A0202024C040620", + INIT_07 => X"5454C702054C25583CB23201564080111480B02080B14C8202C4451530504C29", + INIT_08 => X"4C2CD70F843F88C6782C0E40B2442321A663258C008530942000508418C9454C", + INIT_09 => X"90332AA202A8C4867C420A02E68152956550205C02310276425C64087C4124C0", + INIT_0A => X"320900014031E4C8090F7980048C817008C409D4390C4DAD23442049465EBE08", + INIT_0B => X"A6EA40229BAA42128EA40229BA900843AA22A93A69924E9A08A64AA22E319301", + INIT_0C => X"1080551FB198A8AA21E92A8AA64A88A82A6D8C6B22EA88A329A508A694328808", + INIT_0D => X"091921E08C46AC38145316580551649C4024924923E24C8008083C80A4202506", + INIT_0E => X"809103D78C9C4802118C8C50462554C94085486515E31E1D32123198C7831708", + INIT_0F => X"C805903D82C942314421C0700C1514904108C8C518408080114C42002005E000", + INIT_10 => X"64C82514423FC3D4202E1200002C8134C8000C048048048202080B1484546834", + INIT_11 => X"81380F25708102D882181023258074C8000C048048048202080B140BA642AAA2", + INIT_12 => X"D42025987905A11A208844A948010368C80200080368080812025822081080C0", + INIT_13 => X"0D4202C615198C803475408494C808C802D05A11A220C0A30C0830540B258202", + INIT_14 => X"45A24450AAA8001ED44005148016322E0482011A9C2C554C8013056A0C128C84", + INIT_15 => X"267108C424C2CAA22020854080D02C10102165961120040B501AB6060C09A404", + INIT_16 => X"2A80668308085210208B405C3410A90B1512326F49010C17408110F1542C5423", + INIT_17 => X"42102102103D4C6202520C204660202E08014C80932001320243982C52A28031", + INIT_18 => X"800422C160763185560523251E58003082160568080B914B1814C00020820259", + INIT_19 => X"00470222620A101A808054213206208A2193C202621C225A301FD1A305320225", + INIT_1A => X"408028096013231C01580480818028AE6674C292201F5104C60814480A709312", + INIT_1B => X"05A8405D4A5017529405D4A5017529405D4A5017529405D4A48D445D900A2B99", + INIT_1C => X"C421882C5F0098C24E6697488A6D6201F520208A80EBD91434C81A9690E40082", + INIT_1D => X"81700C11108080C14040851988D92005316491C20534C8C808012053440F1254", + INIT_1E => X"1310130866891415309108C2332080B255482315568030580850212D48C9BC4C", + INIT_1F => X"B2358C41A1714C810908C22080848011084C81093370B4E690215110130841A2", + INIT_20 => X"119301013086DA150202108D206544150809068C5E980520407852358C576850", + INIT_21 => X"D30B40018241451440808423460613010130866895E50E4C84C54086C6085545", + INIT_22 => X"4410101440510404051545555151455155455154554145554515451540283001", + INIT_23 => X"0510145455504015151141010144051054405055504040514154101054415101", + INIT_24 => X"5445551554515554415400041401555541454450404051511410101440510144", + INIT_25 => X"55500C000000D00000000033C000000000000000000000000000000005051544", + INIT_26 => X"5555555555555555555555555555555555555555555555555555555555555555", + INIT_27 => X"1515555555555555555555555555555555555555555555555555555555555555", + INIT_28 => X"00000000000000000000000000000000000000000000E0000000000000010000", + INIT_29 => X"00000000000000000CD000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(15 downto 14), -- Port A 2-bit Data Output + DOB => memBRead(15 downto 14), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(15 downto 14), -- Port A 2-bit Data Input + DIB => memBWrite(15 downto 14), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM8 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"015502550005000300F6005200030357002A0003002A066500030BDD001C000F", + INIT_01 => X"793000000D4EC7C70123002F0001191522250003000300030003003D00060009", + INIT_02 => X"000D601010C040A555555554DA00000001DCC000000077600000001645953DFD", + INIT_03 => X"0024C9555693855A7CB92A00932555555A4E15556932D564899E00000000A000", + INIT_04 => X"5D961BE2A956586F8AA567064E0024F0000093A4000002405564CB932C024A80", + INIT_05 => X"5D510E56586F8AA55961BE2A955961BE2A956586F8AA566586F8AA55961BE2A9", + INIT_06 => X"A2CD6E8D995445D50415505D54486DAC86F2014401004100D90F76420F951317", + INIT_07 => X"1510D0756C0F85016A08356D69D1AE7545BE09D1BE090D551595211564540F86", + INIT_08 => X"0F805644C511DB9595044165E874C364C783450F96543E146F9B074370D9510D", + INIT_09 => X"D0059716B8C5137DC0372001534D13641227546416A51443126409D9590120F9", + INIT_0A => X"36560854A95A40D9CF52944C950D51909A94912C5C5517E569C5555639E4D274", + INIT_0B => X"1C5D34787171C74DC5D34787174D1531714974D1874D34571E113716083403E4", + INIT_0C => X"11BC45059E74587172579D87113C5A54D9100D71F15C56148574D215D3785A1E", + INIT_0D => X"57101951A951691C0443C079D85206791520820865500D917555498E15555D43", + INIT_0E => X"5643D4020DC94C76460F0D54FD2FB0F89D9E0713B48365143E566570FDD56475", + INIT_0F => X"D9515D4955A1203DB50398E455555344471A9996A41D51BE6B0D1D51D5B6B105", + INIT_10 => X"10D5514C5D3FD4116B8D1639C1459E40D9C401D0DD3DD2DD36BE5659440CD400", + INIT_11 => X"9F7C5E85475555A1AF08416284DD00D9F401D01D31D21D36BE56595B07104410", + INIT_12 => X"016B86C4001110346B344830DAE76470D916F1D9C089D9C816783811755571F1", + INIT_13 => X"905DD595B4040D9C0A341D9FD0D9C0D98D1111034FC55553757DD5545E865D17", + INIT_14 => X"11907484261415500C0179A5BE6373A31C467445C5596D8D8C03C3F0755C0D9D", + INIT_15 => X"83E4589420F845D51755749D9C37408777410410826F9657E7434002771C0034", + INIT_16 => X"354053475556521764441D2BC0A4815E5456A851083F555955557525B559536A", + INIT_17 => X"951951D5114D0D2678263DD55BD1678D58E60D5903659436431C1549535241DD", + INIT_18 => X"44003B04E4403403010B6681900440719D0110345BE343C85440F9715CDD5515", + INIT_19 => X"7986431374C5975D9D99B9D835502D49FC805555310551403E56034C107395E0", + INIT_1A => X"9D9120C85C8066553413241D5C5014B168B0F8D350CD1D40D275549BE1100366", + INIT_1B => X"54B49D071CE741C739D071CE741C739D071C2741C739D071CD815C8654051858", + INIT_1C => X"D1D145596B4080F8C1518D8456E6310CD53754060C2C353430D91D85BC110115", + INIT_1D => X"5264555525557571DDDD84001BD76B9437189636B0241BA01AE46B024D525D40", + INIT_1E => X"0377485474C5E3903E3400F03FC755E86D59C3478B415575D96767055BA26C0D", + INIT_1F => X"E6A10F207A310D5D0455154D8E21AE7F540D550437D5EC0C6767EA6748574D31", + INIT_20 => X"EF2D7675C576C499D515DDAD233DBA2F18E0360D814C1E67410C66A10FB31265", + INIT_21 => X"03E10116505841CC7565776BFB332B767485444C49EF430D90DD1554E856A57E", + INIT_22 => X"060010B042F18004022C024D1C0C8C024C88055CCD9726B03330313015D43E70", + INIT_23 => X"2E10B94C860800712F77200103040C105040C086080040C8029A0013B84AE10B", + INIT_24 => X"7D02A0C02689FCD84294002EC00712EB68CBDDC80042C2F7720010B040210B84", + INIT_25 => X"00008C00000000000000003CC0000000000000003FFFFFFFEAAA954349323032", + INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_28 => X"0000000000000000000000000000000000000000000C20000000000000000000", + INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(17 downto 16), -- Port A 2-bit Data Output + DOB => memBRead(17 downto 16), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(17 downto 16), -- Port A 2-bit Data Input + DIB => memBWrite(17 downto 16), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM9 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"009600160000000600E4009200060557000C0006000C02960006039300FA003A", + INIT_01 => X"B5D000000581E4BC081000060000110A155A0006000600060006004200740002", + INIT_02 => X"000959D19C274612555555558600000001AD000000006B60000000120541D009", + INIT_03 => X"00176555560F45581050E6005D955555583D155560F955579000000000002000", + INIT_04 => X"811417206084505C818201B03D00174C00005DC0000000331557D00F94003980", + INIT_05 => X"05904844505C8182114172060811417206084505C818204505C8182114172060", + INIT_06 => X"00B95D4956847059025610062B41597E299E04403812086A800816305B801AB3", + INIT_07 => X"16159116405B452D7501664AC09D5E01854D00657D01599654685565C7F75B44", + INIT_08 => X"5B405444511054691C433355D45496618696555B86456D155784919B25916159", + INIT_09 => X"970A02C57472B208C4E68B5073F10827B8D166E7551A574890E7B45841D905B8", + INIT_0A => X"6608B8000D640598E4514E75D5599B9D54695D15555904C55955628C08C3901A", + INIT_0B => X"C00B65A3002C1BE880B25A3002E96FA02CB02E9C30CB670268CB22CAE16696E1", + INIT_0C => X"356F85644232302C85304B02CBE7201284D6591C100B20C8302FA0CCBEB32C68", + INIT_0D => X"5A1BF03D468501103796DC24564AC421C50C30C3550C59841859454D1161632D", + INIT_0E => X"85D4D448590820161C5B595667C5A5B00581FCE8121643C16C95DA45B0D65418", + INIT_0F => X"985951471451596F6CB8120458A153154515546A2F45996E0059061061011525", + INIT_10 => X"659969F546555451534615B81D455DA5981400574554574665B551AAF5F542E5", + INIT_11 => X"6E55514D618A545D4CF26151450565984400574554574665B151AA555CD50306", + INIT_12 => X"615B4500879C03135F4F516357E04A6598053058E04058E495F4D4C818A5A16D", + INIT_13 => X"2B06D5689712598E0D3485815598E5986439C031312585AA184862965D454615", + INIT_14 => X"5C56557980C2D511356D69554E245A019110147CD1668D555F16CD6E18AD5981", + INIT_15 => X"4547156A05B44C709165B5058C4155014151861854578151255C0A1E1890E155", + INIT_16 => X"2C2148055859485162900507A804095DA5159403033C58A4458A051A45469451", + INIT_17 => X"D65165D65D4559653465B062850D534657E159901662056619D03156BAC41061", + INIT_18 => X"B40CA027558966CDB0B5594581EB405406459A4355D1A9405265B84963061695", + INIT_19 => X"B88C400052E3616445894869665813035A621616A3C160716E0031309D5A160E", + INIT_1A => X"85810003DF1055A137F7C24592C0B0534655B4753E2568459918A017D1809655", + INIT_1B => X"2ABF45A916115A458456916115A458456916D15A4584569161554844B32CD4D2", + INIT_1C => X"90665146A34835B4405B2243F45997E25841667C00140D3415982F3F5F100D16", + INIT_1D => X"914458A14585B58D0505057316525381649A743537DD175394E25B7DD251A445", + INIT_1E => X"564156596A42E5216D10D5B16F1195145157D6798BF562805801602E55501859", + INIT_1F => X"55955BA2D8F159910159565D4D217E105A5995016785D8328160E61156594E90", + INIT_20 => X"ED891416A5952D91D6561D652197FA6617D2065983117557579455155B50B645", + INIT_21 => X"96D1C15CCF5965D07595875966192514156597A438065D59859925A5D55A7182", + INIT_22 => X"86601098427198040F00102D2065F4638C0066147C25890194D197D1A48D6E32", + INIT_23 => X"2F10BD01DBE980D133F4660103040C10F04001DBE98040CF435E60123048C109", + INIT_24 => X"41CC71F0461277C043200020184454DCA90C7D198042D31F466010B440F10BC4", + INIT_25 => X"00000C00000000000000003CEAAAAAAAAAAAAAAA95555555555555540D14D180", + INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_28 => X"0000000000000000000000000000000000000000000B70000000000000000000", + INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(19 downto 18), -- Port A 2-bit Data Output + DOB => memBRead(19 downto 18), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(19 downto 18), -- Port A 2-bit Data Input + DIB => memBWrite(19 downto 18), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM10 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"00000000000200000042000800000003000A0000000A00000000038300200000", + INIT_01 => X"300AAAAAA020C232008800040000088008000000000000000000000800020000", + INIT_02 => X"AAA00002000008000000000000AAAAAAA8042AAAAAAA010AAAAAAA8020080088", + INIT_03 => X"AA800000008F00020208C0AA00000000023C000008F00000088CAAAAAAAA0AAA", + INIT_04 => X"0002830A0A000A0C282820323C2A800CAAAA00E2AAAAAA330000C88F02AA302A", + INIT_05 => X"8C0800000A0C2828002830A0A0002830A0A000A0C2828000A0C2828002830A0A", + INIT_06 => X"00300020200000C0A1000A0C000002088CA200005C130CB400003000030080C3", + INIT_07 => X"020002302E0320083088002282802C00880C88C83C880000C000083000800320", + INIT_08 => X"0322C80CE030C20033203A80C2CB0000E00022030A800C830F0A2321A0082000", + INIT_09 => X"020C00407253203845C00010EF0EF6002003008C60406000008C08C000200030", + INIT_0A => X"000003AAA80820008C020809000002318101802138028CC00E20000838403030", + INIT_0B => X"4202C0C108040C8010241C108090720804C0093413A20D00B042004C0C0000C0", + INIT_0C => X"802D008C8E130004D020800042893401283000252C01344D1008344020C13030", + INIT_0D => X"008A4000100000328380C228C82C20A028000000063200023000082C800000C0", + INIT_0E => X"02A8408800BCD830040300828028A0328C009022AA0000000EA0800030C08030", + INIT_0F => X"00A0000A0008280C031A0E8000000B8020C18000808C083C0A000C08C0A20800", + INIT_10 => X"000000808C9540880F24C0F0A0183C8000A2A0C78C78C68C90B000080080A800", + INIT_11 => X"0C100020230080883C080804208C8000A2A0C78C78C68C90B00008020822A882", + INIT_12 => X"880720A2880288820F00008800C0A800008070C0C0A8C0C140320BE030002868", + INIT_13 => X"A00C000080A0000C0A120C004000C000880028882000002E3028C0000C208C00", + INIT_14 => X"02A03008AA200022008010800C001222002A3008243000041C40D082300C0002", + INIT_15 => X"20808202003208CF6300308C0EA32823032C208220030202210210BA32028B30", + INIT_16 => X"08D080B10000B62300200C028200260C0080C20B80FF0000000030003800020C", + INIT_17 => X"C084080080080020322030C02A200B2401C0000880028000200AA000258210C8", + INIT_18 => X"82A22200A08000200A0A0820C2282A1A8CA0000800C90280080030A00B8C0000", + INIT_19 => X"7038030C21E023288C0238C80023663238A100000C2002080C000822021200A2", + INIT_1A => X"8C0C088083000C003020CD8C08382EA2083032C0008420000A3000C0C8000020", + INIT_1B => X"00F08C08A0A3022828C08A0A3022828C08A023022828C08A08280A2C0D0B6882", + INIT_1C => X"00C800000108003200820121208428084F63002088280880B000FC0A230B8800", + INIT_1D => X"088000002000300C8C0CB208838A0300000AA21072EA030B82C00F2EA2000820", + INIT_1E => X"802328022802E2A80C8AE0300F2320023A02C0294F080038C023003C03080E00", + INIT_1F => X"206003248E340008E002008C3C903C08020008E00380E000E30008A328021E00", + INIT_20 => X"ECAA3232802208C0C0808C386200BAA2C3C8E20012002B0B0281206003082300", + INIT_21 => X"00C82C04338C00893020230E2220EA32328022800A22AC00000AA020E00200AA", + INIT_22 => X"8BAA2AC8AB22EA8AAA3AAAABAEF12242EAEEFAAAEAEAB9EB858904893FB00C38", + INIT_23 => X"B62ADAAFAAAEA88604013AA2AD8AB62AA8AAA3AAAEA8AB6ECAA3AA299CAE72AC", + INIT_24 => X"FA8BABAAF8BEAEACBAC0AABBF88B3FAB8FC1804EA8AB706013AA2ADCAA22AD8A", + INIT_25 => X"00000C00000000000000003CC00000000000000000000000000000000B05893B", + INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_28 => X"00000000000000000000000000000000000000000002C0000000000000000000", + INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(21 downto 20), -- Port A 2-bit Data Output + DOB => memBRead(21 downto 20), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(21 downto 20), -- Port A 2-bit Data Input + DIB => memBWrite(21 downto 20), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM11 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"010002800005000000C1008400000003002100000021040000000B0B00000080", + INIT_01 => X"300555555818C13E024600280002446044400000000000000000001400210008", + INIT_02 => X"5558001502C05488000000002055555554085555555502055555554490240A60", + INIT_03 => X"55400000005F20014925C05500000000017C800005F080001652555555554555", + INIT_04 => X"284143450521050D141494397C95402E555500D95555557B8000D65F09557015", + INIT_05 => X"4C06A011050D1414841434505284143450521050D1414A1050D1414841434505", + INIT_06 => X"08300810202228C05A80858C82220C544955A62AAEABAEBA2AA230A8232640C7", + INIT_07 => X"81820930112311843064801515403C98683C64CC3C642000820254B002222311", + INIT_08 => X"2319C42EE8BAC200709BF860C11608091088112325648C440F25531652041820", + INIT_09 => X"0AAA64A0B1AA88B6AE80A0F9CB0D89600123002ED080D0A1082E04C2601C8232", + INIT_0A => X"80B1F855540592024B086067802000BB42034297B9016AC008640821B6A83830", + INIT_0B => X"A590C3A6964A7A3129083A696430E8864AA6423AE830CEA4A9A084AA0C8048C8", + INIT_0C => X"402E609E6DA6824AA1855024A08AA99B160820AA6292A9AA6A4229A908A6A9E9", + INIT_0D => X"0155C680202440B64308D144C55D125014820820088920293200203C44080420", + INIT_0E => X"21158224204A263099232052441402364C257115550828288DD0801236C05232", + INIT_0F => X"025008204204448D20BD0F420204075350030300404C042C95208C84C8591480", + INIT_10 => X"120000824C6A82140F18C0B258202D42025358CF4CF4CF4C70F6080202425682", + INIT_11 => X"2D2E0814132042102D960C0C114C42025358CF4CF4CF4C70F608020811195469", + INIT_12 => X"140F1159658164C80B60264402C9144202E0B8C2CA74C2C6C0F140DA32001498", + INIT_13 => X"508C820240D8202CA5A58C268202C2024698164C8BB0201D3214C8120C114C82", + INIT_14 => X"41582246551A8099826834902C91209986B53201DC3018282FC8F041320C2024", + INIT_15 => X"14404302823121C09300314C2D531653231C1041590B25085301B0E5318547A2", + INIT_16 => X"812A614202024993081A8C9343921D0C01408167603C02062020808004200508", + INIT_17 => X"C048048048202080B140B8C815580B1803C9200648096080914544201F19B8C4", + INIT_18 => X"635309A05A60803045A50814A916352D4C51801602C6196216023258074C8000", + INIT_19 => X"B2642B997AD453154C2904C48011F864F8BA80800C1809048C988C8B81208071", + INIT_1A => X"4C2886A01F5A0808B007D24C040A0258047231C180889E2205320603C46A4810", + INIT_1B => X"80704C945513251544C945513251544C945513251544C9455031215D42809601", + INIT_1C => X"08C528201A2E02316950461B05582C08889300706A9690E6B2029C005E94E8C0", + INIT_1D => X"044202085020302C4C8C718442140B248247C1B0F4D18206C3C90B4D15080612", + INIT_1E => X"4813140150A9C5588C5692388F9310815542C81567040804C25309BC02058D20", + INIT_1F => X"80842348197820041901405C3C782C95012004188320C6849309555314016C2A", + INIT_20 => X"CC55313140158184C0404C219A25715003C510202846A50F6A46008423460610", + INIT_21 => X"08C41C890A4D24963010130841A215313140150A91905D2022045012D6015414", + INIT_22 => X"4050001400501400051411551455445144445554554505515511551140808CB4", + INIT_23 => X"0500154555414015155545000500140050004155414001414154500154015001", + INIT_24 => X"5545515054551554015400055445555541451551400051455450001400500140", + INIT_25 => X"00000C00000000000000003CC000000000000000000000000000000001151151", + INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_28 => X"0000000000000000000000000000000000000000000300000000000000000000", + INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(23 downto 22), -- Port A 2-bit Data Output + DOB => memBRead(23 downto 22), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(23 downto 22), -- Port A 2-bit Data Input + DIB => memBWrite(23 downto 22), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM12 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"039A019A000D000B001200DA0007023A001E000F001E0FDA000F0BD9003C00CC", + INIT_01 => X"B69555554C5750DF077600150001D65619160003000B0003000B007E00620009", + INIT_02 => X"554C39042084105A00000001DD55555555D955555555769555555565615EB5BE", + INIT_03 => X"554AAC0000192000620183552AB000000064800001B8800A0819555555549555", + INIT_04 => X"686F8AA55961BE2A9565862064954A8855552A255555506A800A481B855060D5", + INIT_05 => X"0F947491BE2A956586F8AA559686F8AA55961BE2A9565A1BE2A956586F8AA559", + INIT_06 => X"55E4555D553130F9471D940D531356044986430CC330E31F333C3E346A848391", + INIT_07 => X"35D6B03E5162555DD551BE454D416A32594950D1695D6F969D55D0B050106257", + INIT_08 => X"6A55650674135555948D2557551899E1D319DC6686C599575286C34146735D6B", + INIT_09 => X"0B511375E55C5CCB20300054564209022543E5E74557415004E410F8141746E8", + INIT_0A => X"AE0A5E5545D396F84475FC1100639791155105719777D7445735D550CB8C5434", + INIT_0B => X"704D5111C1371164C4DA119C13584551371134971C79E5D3C571D371018C5BA1", + INIT_0C => X"994753E402D391371FF80D1371A5C46D51346795104DC671DD378774DE15C546", + INIT_0D => X"5B5A9011555CD497541A5760FB60D8541C4D34D354C86B843665D9495DD99522", + INIT_0E => X"64695D546782203E03646F924107E6D50F86A6360919C905A7E55556E49D9436", + INIT_0F => X"B8440DDE1D5511B9048D4B53755C343160951559A40F957A056F0D90D94114C7", + INIT_10 => X"D679D4140D155DD85255D5E851D14116B87360F80F80F00D0537757F43D40796", + INIT_11 => X"7410755803559DF9600C1C55540FD6387360F80F80F00D0534757C75D144000D", + INIT_12 => X"D8525415078455CE5804350557A1910638D530F845D0F840E5651B0C35474055", + INIT_13 => X"450D5D5551C06F8451150F8B46F8467840C8455CEC0766083640D5A775540D9D", + INIT_14 => X"C435C39600054001D41427915A29110183343D0001D5B8055FDAF500354C6B86", + INIT_15 => X"5E50155F46A5765083E7050F8583D043C3C4D34D43568A75400001C83704D943", + INIT_16 => X"092310E176738BC3E0850F1317C143755645556B5856754057556754DDD55B55", + INIT_17 => X"1D05D35D25D36BE56595F0D52318565417A1679C5AE171AE108065D5B81070DC", + INIT_18 => X"137710413751AC75D19455584241371D0D284586159535150C16284DD40D9740", + INIT_19 => X"68B51C594F5503C60F85C0DDBE728B201C6CDD960905D341AA04DCE847119D04", + INIT_1A => X"0F8C5FD0CDD555441033720F9048321F20C6655390C4D1167C355C5495C159F5", + INIT_1B => X"54650F25F943C97E50F25F943C97E50F25F943C97E50F25F99553100D20C86C8", + INIT_1C => X"B0D3CDD5C10D16651A0001CA4C27190C4C83E467FD85FC2686B8D90E8F841C1D", + INIT_1D => X"9B517557476727680F0FB03495F05689BECE30C59D995556D6A05DD991756036", + INIT_1E => X"9AC3CC76F058CBDDA96706F9BF837755E8D719DE3645D500F8C3E26C15549C6B", + INIT_1F => X"75776F40CEB46F9098761DF5694D6A1D776B9C198FF7418483E18F83EC767C15", + INIT_20 => X"CF6C3C3EC76E0CC7DD9D71515318703B9794416707741951E1AF35776F3A3327", + INIT_21 => X"1995184149CDC7DFA76748564D310C3C3CC76F45BAFA416F86F01755E5775604", + INIT_22 => X"C13000BC02E04C002D999D80225BDDC38B0652041E3E0C672F772F7700859A10", + INIT_23 => X"3900D6125104C0BE1369130006001000D000C25104C001872DE13009E407500B", + INIT_24 => X"9B24DA1D155701E2091800057049300F44449A44C003B116913000DC02D00F40", + INIT_25 => X"00000C00000000000000003F00000000000000003FFFFFFFEAAA954314EF7729", + INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_28 => X"00000000000000000000000000000000000000000002B0000000000000000000", + INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(25 downto 24), -- Port A 2-bit Data Output + DOB => memBRead(25 downto 24), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(25 downto 24), -- Port A 2-bit Data Input + DIB => memBWrite(25 downto 24), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM13 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"048000800000000200D00184000A017000000002000011200002000000180188", + INIT_01 => X"7C5555555854138606440000000108641104000E0006000A0002005000C00000", + INIT_02 => X"5558042D08A0B41A00000001AD555555549155555555E41555555541A0206648", + INIT_03 => X"55715C000240F00919240F55C57000000903C000243480300640555555555555", + INIT_04 => X"405C8182114172060845114903D571635555C5955555590C80300643455903D5", + INIT_05 => X"5B801D017206084505C818211405C8182114172060845017206084505C818211", + INIT_06 => X"CF9158A961AC95B82D05825991BD5A818146BA784E178E05EE196D1F5140921C", + INIT_07 => X"B005756E115DA14862955E25811175003146959146905384061691264ACA55A0", + INIT_08 => X"59A42C80120D1614043907018A5255D15255DD5D458556865145564855BB005F", + INIT_09 => X"01CCB2259A0B2392C28EB25C2C44439D7556E1C065846DC42FC145B4B017F5D4", + INIT_0A => X"5D045055085455F440192D596B5B87059615B7094314F0445810596FD2990D67", + INIT_0B => X"2AFAD9C0AB629CBFAFADDC0ABEB572DBE2CBEB0208A280BA712A3A2C017F5451", + INIT_0C => X"11556380E4B31F22CC8459F22A00B2C9AD2F53440AC8B22C8BAA332CA8CCB170", + INIT_0D => X"20521D116161320750D75445BA63043113F3CF3C5A8353456600614680580100", + INIT_0E => X"61C0465D5B55056D2C59536A410615565B4484160756D1354445850590451166", + INIT_0F => X"34540464C6282165840F2FC01644185361165611845B8175155F598598574301", + INIT_10 => X"95B81610590006D555A145D454614515B44D55B85B05B059451518414910F155", + INIT_11 => X"754218A4566586A15676D758A25B95745945B85B05B05945151841195403B8C5", + INIT_12 => X"D551A2D57526556851549CC515512185746555B44C55B454651AD2896651552D", + INIT_13 => X"8559861581715344E5155B4405F4557449226556808162B96615991018A25946", + INIT_14 => X"26810900EE302D971042C7156514441D7E116C47006114D165575485665C5744", + INIT_15 => X"A0C05611F51A011016E3015B4416DC56D6D50410605144194847857167575649", + INIT_16 => X"8501D75816390056D02C5B13154B001851558A06B000164401658184C0614458", + INIT_17 => X"0574554574665B151AA515999DD755A194515B8256D1855D195248612057559C", + INIT_18 => X"294541ADD1C95F545C0658A6DD729444592D35B5D46841BCF6D5145056598440", + INIT_19 => X"149C18D3853DD6ED5B46C5954E2306988017058001305075452D168064440507", + INIT_1A => X"5B45DE3E255C5866C889405B844000F7C4859A19500318D5F56654D4686755D5", + INIT_1B => X"94C55B661556D98555B661556D98555B661556D98555B6615966998090003DF1", + INIT_1C => X"3592E46160BFE5DAB10482E8425701001416E005E33F6F15057471E127141505", + INIT_1D => X"80C9165B516301415B5B0701161251457D340D55D4531628D7525D4509184AA5", + INIT_1E => X"16D6E0146835CA997694559D7456518A815556F59C405905B416D01856291657", + INIT_1F => X"8587514864C4538C5A1605E146B57504145784994C01A31416D14956D0141E0C", + INIT_20 => X"CD516D6D0145C6464505A965E90EB3E9566B0C5F1536A2596A25058759A61921", + INIT_21 => X"5468563D4019C7D5514156594E90616D6E0146C37529415345B4115925148658", + INIT_22 => X"01C0003000C07000268DD053D75C7D13203354162007003471F473F46485451C", + INIT_23 => X"020009137507003F200E1C000C003400D00003750700030D29C1C00BC00F0003", + INIT_24 => X"CC244C4D1D8522020A340015444E300FD448038700000200E1C0000002D00080", + INIT_25 => X"00000C00000000000000003F2AAAAAAAAAAAAAAA95555555555555541931F475", + INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_28 => X"0000000000000000000000000000000000000000000300000000000000000000", + INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(27 downto 26), -- Port A 2-bit Data Output + DOB => memBRead(27 downto 26), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(27 downto 26), -- Port A 2-bit Data Input + DIB => memBWrite(27 downto 26), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM14 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"000A000A00020008000A0002000400B2000A0008000A008A000C000A00100010", + INIT_01 => X"3C00000002000B2100020000000000020882000C000800000004000A00060002", + INIT_02 => X"0002800A00C02800AAAAAAA80400000003080000000042000000000008082020", + INIT_03 => X"00300EAAA808FAA00C008F00C03AAAAAA023EAAA80B02AB22008000000000000", + INIT_04 => X"2A0C2828002830A0A000802023C0303B0000C0000000002E2AB2200B000023C0", + INIT_05 => X"0302A00830A0A000A0C2828002A0C2828002830A0A000A830A0A000A0C282800", + INIT_06 => X"322C0000000F2030098C00000AC20218800000408020003A00A00C9008220000", + INIT_07 => X"3000B00C08080028C0002C008CC030B82000000000000B0A0C00001031310403", + INIT_08 => X"080003203C800000000302230088C3CB2C00CF0420E030020020000200F3000F", + INIT_09 => X"0284200000013410000200FB000402024000C082C002C087A08260320D0F0002", + INIT_0A => X"1C88F20068CB00320032CA23C00F020B000B0203C230201A00B0C00610320001", + INIT_0B => X"00830340024034CA0830340020C0D302C0420C0001C30028D0036C04002D0108", + INIT_0C => X"CC390F8224230200473B002007401083A38D0B0080801204828C120B304810D1", + INIT_0D => X"2B020380000CCE810202820030002ACC0B082082000003200008C80000C02802", + INIT_0E => X"004C8C800F22000C8E0E072BB02AA0A003228022B000F80018400000228C0000", + INIT_0F => X"7202A8CC8C002008E004CD363022A22F0A808008200300308807000000200D83", + INIT_10 => X"4070A00200000C00000240C208C0188072012030030030004022302201020A80", + INIT_11 => X"3802300200028CA00A8A040000030032012030030030004022302232C0A80B28", + INIT_12 => X"000000000880004802201A200008A820F24020320800321260002A2000232800", + INIT_13 => X"A0008C000C4A0B208080032230B210720008000488830208000000823000008C", + INIT_14 => X"0008812A02CA808202280340308C0A8280900FC200C08BE03940902800240B22", + INIT_15 => X"0234800B00400A0000C3A0032000C200C0C820820A0022322904885000800281", + INIT_16 => X"2209082030310040C888038181680230000000030082302223002302E8C00200", + INIT_17 => X"0C78C78C68C90B0000802000A02800020008070001C8203C880808C0A0281003", + INIT_18 => X"A121A82029842D1002A00002420A1204002880CA000088080A004208C8000A2A", + INIT_19 => X"0233E882882000C80320E0080C0E0A284C208C024008C0AC10800488800A8C00", + INIT_1A => X"032E0CC0840800023421000303022020C080C00080C20BA070002200000E03C0", + INIT_1B => X"0B000302E000C0B800302E000C0B800302E000C0B800302E0808E84000880830", + INIT_1C => X"B002E8C088442000220300C83023800C1400C300CC0A33000032C00B0700280C", + INIT_1D => X"003630032303A32803032088808800201CC82C30E08A000243080E0882302220", + INIT_1E => X"82C0C8322820D2881003602C1880230035C081C88008C0A032C0C80E00000C0B", + INIT_1F => X"20230E18800B030389304CE000303088320703880C23280000C88880C8322E08", + INIT_20 => X"DE080C0C8320883A8C8CA008A00036AA8300AE0F0221300E1312E0230A2220E3", + INIT_21 => X"03000BCE003CC3C2A32328021E00880C0C83228208AAA00720B0E32A223212A9", + INIT_22 => X"0ABA2A90AA42AE8AB02AAEFA8AC18042EFAACFBAAB4AAEAB060104013F402082", + INIT_23 => X"AC2AB3AAAEEAE8940911ABA2AB8AAE2AB8AAE2AEEAE8AAE84B2ABA2DB0A6C2A9", + INIT_24 => X"AB4EAAEAB2AAAAB4BA84AAAAB08BAAAA2A42C46AE8AAD0B11ABA2AB4AB42AB0A", + INIT_25 => X"00000C00000000000000003F000000000000000000000000000000002E06012A", + INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_28 => X"0000000000000000000000000000000000000000000170000000000000000000", + INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(29 downto 28), -- Port A 2-bit Data Output + DOB => memBRead(29 downto 28), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(29 downto 28), -- Port A 2-bit Data Input + DIB => memBWrite(29 downto 28), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); + ZPU_RAM15 : RAMB16_S2_S2 + generic map ( + INIT_A => X"0", -- Value of output RAM registers on Port A at startup + INIT_B => X"0", -- Value of output RAM registers on Port B at startup + SRVAL_A => X"0", -- Port A ouput value upon SSR assertion + SRVAL_B => X"0", -- Port B ouput value upon SSR assertion + WRITE_MODE_A => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + WRITE_MODE_B => "WRITE_FIRST", -- WRITE_FIRST, READ_FIRST or NO_CHANGE + SIM_COLLISION_CHECK => "ALL", -- "NONE", "WARNING", "GENERATE_X_ONLY", "ALL" + INIT_00 => X"012501250005000C00850021000C04790015000800150445000C06A500A20022", + INIT_01 => X"3E0000000102861A0021001A000062014461000800080008000C000500090005", + INIT_02 => X"00016181A9A606405555555408000000020400000000C1800000002406860012", + INIT_03 => X"00380D555416F5504C816F00E0355555505BD555417215799015000000000000", + INIT_04 => X"150D141484143450521044505BC038370000E0000000005D1579901720005BC0", + INIT_05 => X"232560943450521050D141484150D1414841434505210543450521050D141484", + INIT_06 => X"00220200080CA232424C242006C10156652140C2A0A8208A00A08C600C152802", + INIT_07 => X"7960B48C94080954C8002C90603830464420020820060B290C804A2B0A8A0808", + INIT_08 => X"0801A099B260808262038663204603C45802DC0C111020210811482500B7960F", + INIT_09 => X"B21A08408092A834489A08F2B02D6019E008C8D9C021C81E70D9D231028F00C1", + INIT_0A => X"3C65F50054C400B126310D53AA0B236700872053A93255150278C00D7442A482", + INIT_0B => X"40229BA900843AA20229BA9008A6EA90C4A08A6493A69908EA4E884AE83E0304", + INIT_0C => X"083213991D0B0084AC3620084E992813008A0B666021294A508A694329A528EA", + INIT_0D => X"941900480802026609C30522351855428704104100200F1080A4C42028C29489", + INIT_0E => X"09924C500B55848C49080F5E48945081231541904403C48021D020A0854C8880", + INIT_0F => X"F11354CE4C829821D2282A093015515E4540408412232430540F202202542263", + INIT_10 => X"C0B252C920AA8C820809A0C114C82140F11A123A23A23A20A08132192B490540", + INIT_11 => X"31A9320188014C4821458A02082340F11A123A23A23A20A08132193189540F14", + INIT_12 => X"82080840056000820852B53082055430F180823121423135908045108013168C", + INIT_13 => X"50204C8060860B121484231580B130B12056000826630914809200493208204C", + INIT_14 => X"60147B5503C56A444956B3C8304DAD4164688CA9A8C840D832822238801B0B15", + INIT_15 => X"050A408700809D8A08CB58231148D108C8D65965050811315FBC68B48264017B", + INIT_16 => X"3987081A30B361C8C641238A42DC6932092020630669301593001321D4C82502", + INIT_17 => X"8CF4CF4CF4C70F60802082005016080982040F2403C4582C4D2424C852942208", + INIT_18 => X"5A12D4581F1C3F2241500201C105A1AA20896085820254018580C114C4202535", + INIT_19 => X"81709601658808D02311D2042C992E2EAE684C29A084C9682040482661AD4CA0", + INIT_1A => X"231F1CC0888102070A2228232621A807D66080894AE65C90B4801182024003D0", + INIT_1B => X"060023511408D445023511408D445023511408D4450235114405D4AA486A01F5", + INIT_1C => X"F208D4C846C8108005EA29C4245760AE6A08CA81CC005E9120F1C00A4B12968C", + INIT_1D => X"26093003130B531623235855404608102D249870C644408183040C6451321180", + INIT_1E => X"42C8D6310685E5402010908C22081320554202D55024C0523108C58D80818C0F", + INIT_1F => X"1013086689640B2442308CC820343062310B24402E93142648C56148D6315DA1", + INIT_20 => X"ED148C8D631068854C4C500542A579414301690F86B5240C527110130841A213", + INIT_21 => X"82028B29217CE3C1531314016C2A548C8D6310685441680F10F6131181315052", + INIT_22 => X"4150005401505400051555515555155155055515155504555455555540A03041", + INIT_23 => X"1100451145454055115515000500140050004145454001414151500144051005", + INIT_24 => X"5544555515551154011400155405100554441545400111055150004400500440", + INIT_25 => X"00000C00000000000000003F0000000000000000000000000000000015545555", + INIT_26 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_27 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_28 => X"0000000000000000000000000000000000000000000300000000000000000000", + INIT_29 => X"00000000000000000CC000000000000000000000000000000000000000000000", + INIT_2A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_2F => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_30 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_31 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_32 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_33 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_34 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_35 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_36 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_37 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_38 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_39 => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3A => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3B => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3C => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3D => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3E => X"0000000000000000000000000000000000000000000000000000000000000000", + INIT_3F => X"0000000000000000000000000000000000000000000000000000000000000000") + port map ( + DOA => memARead(31 downto 30), -- Port A 2-bit Data Output + DOB => memBRead(31 downto 30), -- Port B 2-bit Data Output + ADDRA => memAAddr(14 downto 2), -- Port A 13-bit Address Input + ADDRB => memBAddr(14 downto 2), -- Port B 13-bit Address Input + CLKA => clk, -- Port A Clock + CLKB => clk, -- Port B Clock + DIA => memAWrite(31 downto 30), -- Port A 2-bit Data Input + DIB => memBWrite(31 downto 30), -- Port B 2-bit Data Input + ENA => re, -- Port A RAM Enable Input + ENB => high, -- PortB RAM Enable Input + SSRA => low, -- Port A Synchronous Set/Reset Input + SSRB => low, -- Port B Synchronous Set/Reset Input + WEA => memAWriteEnable, -- Port A Write Enable Input + WEB => memBWriteEnable -- Port B Write Enable Input + ); +end dualport_ram_arch; diff --git a/zpu/hdl/zpu3/src/xmake.filelist b/zpu/hdl/zpu3/src/xmake.filelist new file mode 100644 index 0000000..3d0a779 --- /dev/null +++ b/zpu/hdl/zpu3/src/xmake.filelist @@ -0,0 +1,5 @@ +vhdl zylin "zpu_config.vhd" +vhdl zylin "zpupkg.vhd" +vhdl work "dmips_ram.vhd" +vhdl zylin "zpu_top_bram_intstack.vhd" +vhdl work "testlut.vhd" diff --git a/zpu/hdl/zpu3/src/xmake.xst b/zpu/hdl/zpu3/src/xmake.xst new file mode 100644 index 0000000..bfdb23f --- /dev/null +++ b/zpu/hdl/zpu3/src/xmake.xst @@ -0,0 +1,53 @@ +set -tmpdir ../tmp +set -xsthdpdir ../xst +run +-ifn xmake.filelist +-ifmt mixed +-ofn ../syn/ic300 +-ofmt NGC +-p xc3s400-4-ft256 +-top ic300 +-opt_mode Area +-opt_level 2 +-iuc NO +-lso ic300.lso +-keep_hierarchy NO +-glob_opt AllClockNets +-rtlview Yes +-read_cores YES +-write_timing_constraints NO +-cross_clock_analysis NO +-hierarchy_separator / +-bus_delimiter <> +-case maintain +-slice_utilization_ratio 100 +-verilog2001 YES +-fsm_extract YES -fsm_encoding Auto +-safe_implementation No +-fsm_style lut +-ram_extract Yes +-ram_style Auto +-rom_extract Yes +-rom_style Auto +-mux_extract YES +-mux_style Auto +-decoder_extract YES +-priority_extract YES +-shreg_extract YES +-shift_extract YES +-xor_collapse YES +-resource_sharing YES +-mult_style auto +-iobuf YES +-max_fanout 500 +-bufg 8 +-register_duplication YES +-equivalent_register_removal NO +-register_balancing No +-slice_packing YES +-optimize_primitives NO +-use_clock_enable Yes +-use_sync_set No +-use_sync_reset No +-iob true +-slice_utilization_ratio_maxmargin 5 diff --git a/zpu/hdl/zpu3/src/zpu_config.vhd b/zpu/hdl/zpu3/src/zpu_config.vhd new file mode 100644 index 0000000..506121c --- /dev/null +++ b/zpu/hdl/zpu3/src/zpu_config.vhd @@ -0,0 +1,25 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +package zpu_config is + + constant Generate_Trace : boolean := false; + -- during simulation, set this to '0' to get matching trace.txt + constant DontCareValue : std_logic := '0'; + -- Clock frequency in MHz. + constant ZPU_Frequency : std_logic_vector(7 downto 0) := x"64"; + -- maximum address includes upper bit for IO registers + -- the rest is RAM + constant maxAddrBit : integer := 14; + constant minAddrBit : integer := 2; + -- This bit is set for read/writes to IO + -- FIX!!! eventually this should be set to wordSize-1 so as to + -- to make the address of IO independent of amount of memory + -- reserved for CPU. Requires trivial tweaks in toolchain/runtime + -- libraries. + constant ioBit : integer := maxAddrBit+1; + constant wordPower : integer := 5; + constant wordSize : integer := 2**wordPower; + +end zpu_config; diff --git a/zpu/hdl/zpu3/src/zpu_pipelined.vhd b/zpu/hdl/zpu3/src/zpu_pipelined.vhd new file mode 100644 index 0000000..207939d --- /dev/null +++ b/zpu/hdl/zpu3/src/zpu_pipelined.vhd @@ -0,0 +1,852 @@ +-- Company: ZPU3 +-- Engineer: Øyvind Harboe + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; +use IEEE.STD_LOGIC_arith.ALL; + +library zylin; +use zylin.zpu_config.all; +use zylin.zpupkg.all; + + +entity zpu_top is + Port ( clk : in std_logic; + areset : in std_logic; + io_busy : in std_logic; + io_read : in std_logic_vector(7 downto 0); + io_write : out std_logic_vector(7 downto 0); + io_addr : out std_logic_vector(maxAddrBit downto minAddrBit); + io_writeEnable : out std_logic; + io_readEnable : out std_logic; + interrupt : in std_logic; + break : out std_logic); +end zpu_top; + +architecture behave of zpu_top is + +signal readIO : std_logic; + + + +signal memAWriteEnable : std_logic; +signal memAAddr : std_logic_vector(maxAddrBit downto minAddrBit); +signal memAWrite : std_logic_vector(wordSize-1 downto 0); +signal memARead : std_logic_vector(wordSize-1 downto 0); +signal memBWriteEnable : std_logic; +signal memBAddr : std_logic_vector(maxAddrBit downto minAddrBit); +signal memBWrite : std_logic_vector(wordSize-1 downto 0); +signal memBRead : std_logic_vector(wordSize-1 downto 0); + + +signal busy : std_logic; + +signal begin_inst : std_logic; + + + +signal trace_opcode : std_logic_vector(7 downto 0); +signal trace_pc : std_logic_vector(maxAddrBit downto 0); +signal trace_sp : std_logic_vector(maxAddrBit downto minAddrBit); +signal trace_topOfStack : std_logic_vector(wordSize-1 downto 0); +signal trace_topOfStackB : std_logic_vector(wordSize-1 downto 0); + +type DecodedOpcodeType is +( +Decoded_Stall , +Decoded_Nop , +Decoded_Im , +Decoded_ImShift , +Decoded_LoadSP , +Decoded_StoreSP , +Decoded_AddSP , +Decoded_Emulate , +Decoded_Break , +Decoded_PushPC , +Decoded_PushSP , +Decoded_PopPC , +Decoded_Add , +Decoded_Or , +Decoded_And , +Decoded_Load , +Decoded_Not , +Decoded_Flip , +Decoded_Store , +Decoded_Storeb , +Decoded_PopSP , +Decoded_Ashiftleft , +Decoded_Ashiftright , +Decoded_Lshiftright , +Decoded_Eqbranch , +Decoded_Neqbranch , +Decoded_Eq , +Decoded_Neq , +Decoded_Loadb , +Decoded_Lessthan , +Decoded_Lessthanorequal , +Decoded_Ulessthan , +Decoded_Ulessthanorequal , +Decoded_Duplicate , +Decoded_Duplicate2 , +Decoded_Duplicate3 , +Decoded_MoveDown, +Decoded_MoveDown2, +Decoded_MoveDown3, +Decoded_Pushspadd, +Decoded_Callpcrel, +Decoded_Sub +); + + +signal decode_pc : std_logic_vector(maxAddrBit downto 0); +signal decode_fetchedPC : std_logic_vector(maxAddrBit downto 0); +signal decode_fetched : std_logic; +signal decode_opcode : std_logic_vector(OpCode_Size-1 downto 0); +signal decode_opcodeWord : std_logic_vector(wordSize-1 downto 0); +signal decode_starved : std_logic; +signal decode_wordStarved : std_logic; +signal decode_willBeStarved : std_logic; +signal decode_idim_flag : std_logic; + +signal execute1_stall : std_logic; +signal execute1_fetched : std_logic; +signal execute1_decodedOpcode : DecodedOpcodeType; +signal execute1_fetchedPC : std_logic_vector(maxAddrBit downto 0); +signal execute1_sp : std_logic_vector(maxAddrBit downto minAddrBit); +signal execute1_opcode : std_logic_vector(opCode_Size-1 downto 0); +signal execute1_spOffset : std_logic_vector(4 downto 0); +signal execute1_fetchPC : std_logic_vector(maxAddrBit downto 0); +signal execute1_push1 : std_logic; +signal execute1_push2 : std_logic; +signal execute1_pop1 : std_logic; +signal execute1_pop2 : std_logic; +signal execute1_antialias : std_logic; +signal execute1_savedTopOfStack : std_logic_vector(wordSize-1 downto 0); + + +signal load_decodedOpcode : DecodedOpcodeType; +signal load_opcode : std_logic_vector(opCode_Size-1 downto 0); +signal load_spOffset : std_logic_vector(4 downto 0); +signal load_stall : std_logic; +signal load_willBeStalled : std_logic; + +signal execute2_opcode : std_logic_vector(opCode_Size-1 downto 0); +signal execute2_topOfStack : std_logic_vector(wordSize-1 downto 0); +signal execute2_addResult : std_logic_vector(wordSize-1 downto 0); +signal execute2_topOfStackB : std_logic_vector(wordSize-1 downto 0); +signal execute2_pc : std_logic_vector(maxAddrBit downto 0); +signal execute2_sp : std_logic_vector(maxAddrBit downto minAddrBit); +signal execute2_loading : std_logic; +signal execute2_loadByte : std_logic; +signal execute2_storeByte : std_logic; +signal execute2_loadingDone : std_logic; +signal execute2_decodedOpcode : DecodedOpcodeType; +signal execute2_spOffset : std_logic_vector(4 downto 0); +signal execute2_persistTopOfStack : std_logic; +signal execute2_persistTopOfStackB : std_logic; +signal execute2_resync : std_logic; +signal execute2_resync2 : std_logic; +signal execute2_resync3 : std_logic; +signal execute2_resync4 : std_logic; +signal execute2_resync5 : std_logic; +signal execute2_resync6 : std_logic; +signal execute2_resync7 : std_logic; +signal execute2_resync8 : std_logic; +signal execute2_resync9 : std_logic; +signal execute2_resync10 : std_logic; + + +begin + traceFileGenerate: + if Generate_Trace generate + trace_file: trace port map ( + clk => clk, + begin_inst => begin_inst, + pc => trace_pc, + opcode => trace_opcode, + sp => trace_sp, + memA => trace_topOfStack, + memB => trace_topOfStackB, + busy => busy + ); + end generate; + + + memory: dualport_ram port map ( + clk => clk, + memAWriteEnable => memAWriteEnable, + memAAddr => memAAddr, + memAWrite => memAWrite, + memARead => memARead, + memBWriteEnable => memBWriteEnable, + memBAddr => memBAddr, + memBWrite => memBWrite, + memBRead => memBRead + ); + + opcodeControl: + process(clk, areset) + variable compareA : signed(wordSize-1 downto 0); + variable compareB : signed(wordSize-1 downto 0); + variable execute1_doFetch : boolean; + begin + if areset = '1' then + break <= '0'; + begin_inst <= '0'; + memAAddr <= (others => '0'); + memBAddr <= (others => '0'); + memAWriteEnable <= '0'; + memBWriteEnable <= '0'; + memAWrite <= (others => '0'); + memBWrite <= (others => '0'); + + memBAddr <= (others => '0'); + memBWrite <= (others => '0'); + + + io_writeEnable <= '0'; + io_readEnable <= '0'; + io_addr <= (others => '0'); + io_write <= (others => '0'); + + -- stage 1. Don't care since this is driven by stage2 + decode_pc <= (others => '0'); + decode_fetched <= '0'; + decode_starved <= '0'; + decode_opcode <= (others => '0'); + decode_opcodeWord <= (others => '0'); + + -- stage 2. + execute1_antialias <= '0'; + execute1_fetchPC <= (others => '0'); + execute1_fetched <= '0'; + execute1_decodedOpcode <= Decoded_Stall; + execute1_sp <= (2 => '0', others => '1'); + execute1_push1 <= '0'; + execute1_push2 <= '0'; + execute1_pop1 <= '0'; + execute1_pop2 <= '0'; + execute1_stall <= '1'; + + -- stage 3 + load_decodedOpcode <= Decoded_Stall; + load_stall <= '1'; + load_willBeStalled <= '1'; + + -- stage 4 + decode_idim_flag <= '0'; + execute2_pc <= (others => '0'); + execute2_sp <= (2 => '0', others => '1'); + execute2_loading <= '0'; + execute2_loadByte <= '0'; + execute2_storeByte <= '0'; + execute2_loadingDone <= '0'; + execute2_decodedOpcode <= Decoded_Stall; + execute2_resync <= '1'; + execute2_resync2 <= '0'; + execute2_resync3 <= '0'; + execute2_resync4 <= '0'; + execute2_resync5 <= '0'; + execute2_resync6 <= '0'; + execute2_resync7 <= '0'; + execute2_resync8 <= '0'; + execute2_resync9 <= '0'; + execute2_resync10 <= '0'; + execute2_persistTopOfStack <= '0'; + execute2_persistTopOfStackB <= '0'; + + -- stage 5 + memBWriteEnable <= '0'; + + + elsif (clk'event and clk = '1') then + memAWriteEnable <= '0'; + memBWriteEnable <= '0'; + io_writeEnable <= '0'; + io_readEnable <= '0'; + begin_inst <= '0'; + + -- stage0: fetch + decode_willBeStarved <= '0'; + if (decode_fetched='1') then + -- resync #4 + decode_opcodeWord <= memARead; + decode_pc <= decode_fetchedPC; + elsif (decode_pc(minAddrBit-1 downto 0)=b"11") then + decode_willBeStarved <= '1'; + else + -- we can continue decoding. + decode_pc <= decode_pc + 1; + end if; + + -- stage 0b: move to byte.. + -- resync #5 + decode_starved <= decode_willBeStarved; + case decode_pc(minAddrBit-1 downto 0) is + when "00" => decode_opcode <= decode_opcodeWord(31 downto 24); + when "01" => decode_opcode <= decode_opcodeWord(23 downto 16); + when "10" => decode_opcode <= decode_opcodeWord(15 downto 8); + when others => decode_opcode <= decode_opcodeWord(7 downto 0); + end case; + + -- stage1: decode 1 + execute1_opcode <= decode_opcode; + + execute1_spOffset(4)<=not decode_opcode(4); + execute1_spOffset(3 downto 0)<=decode_opcode(3 downto 0); + + execute1_decodedOpcode<=Decoded_Break; + + decode_idim_flag <= '0'; + + -- resync #6 + -- resync #1 + if (decode_starved = '1') then + execute1_decodedOpcode<=Decoded_Stall; + decode_idim_flag <= decode_idim_flag; + elsif (decode_opcode(7 downto 7)=OpCode_Im) then + decode_idim_flag <= '1'; + if (decode_idim_flag = '0') then + execute1_decodedOpcode<=Decoded_Im; + else + execute1_decodedOpcode<=Decoded_ImShift; + end if; + elsif (decode_opcode(7 downto 5)=OpCode_StoreSP) then + if (decode_opcode(4 downto 0)=b"10001") then + execute1_decodedOpcode<=Decoded_MoveDown; + elsif (decode_opcode(4 downto 0)=b"10010") then + execute1_decodedOpcode<=Decoded_MoveDown2; +-- elsif (decode_opcode(4 downto 0)=b"10011") then +-- execute1_decodedOpcode<=Decoded_MoveDown3; + else + execute1_decodedOpcode<=Decoded_StoreSP; + end if; + elsif (decode_opcode(7 downto 5)=OpCode_LoadSP) then + if (decode_opcode(4 downto 0)=b"10000") then + execute1_decodedOpcode<=Decoded_Duplicate; + elsif (decode_opcode(4 downto 0)=b"10001") then + execute1_decodedOpcode<=Decoded_Duplicate2; + elsif (decode_opcode(4 downto 0)=b"10010") then + execute1_decodedOpcode<=Decoded_Duplicate3; + else + execute1_decodedOpcode<=Decoded_LoadSP; + end if; + elsif (decode_opcode(7 downto 5)=OpCode_Emulate) then + execute1_decodedOpcode<=Decoded_Emulate; + if decode_opcode(5 downto 0)=OpCode_Neqbranch then + execute1_decodedOpcode <= Decoded_Neqbranch; + elsif decode_opcode(5 downto 0)=OpCode_Eq then + execute1_decodedOpcode <= Decoded_Eq; + elsif decode_opcode(5 downto 0)=OpCode_Lessthan then + execute1_decodedOpcode <= Decoded_Lessthan; + elsif decode_opcode(5 downto 0)=OpCode_Ulessthan then + execute1_decodedOpcode <= Decoded_Ulessthan; + elsif decode_opcode(5 downto 0)=OpCode_Loadb then + execute1_decodedOpcode <= Decoded_Loadb; + elsif decode_opcode(5 downto 0)=OpCode_Storeb then + execute1_decodedOpcode <= Decoded_Storeb; + elsif decode_opcode(5 downto 0)=OpCode_Pushspadd then + execute1_decodedOpcode <= Decoded_Pushspadd; + elsif decode_opcode(5 downto 0)=OpCode_Callpcrel then + execute1_decodedOpcode <= Decoded_Callpcrel; + elsif decode_opcode(5 downto 0)=OpCode_Sub then + execute1_decodedOpcode <= Decoded_Sub; + end if; + elsif (decode_opcode(7 downto 4)=OpCode_AddSP) then + if (decode_opcode(3 downto 0) = 0) then + execute1_decodedOpcode<=Decoded_Ashiftleft; + elsif (decode_opcode(3 downto 0) = 1) then +-- execute1_decodedOpcode<=Decoded_AddSP; + elsif (decode_opcode(3 downto 0) = 2) then +-- execute1_decodedOpcode<=Decoded_AddSP; + else + execute1_decodedOpcode<=Decoded_AddSP; + end if; + else + case decode_opcode(3 downto 0) is + when OpCode_Nop => + execute1_decodedOpcode<=Decoded_Nop; + when OpCode_PushSP => + execute1_decodedOpcode<=Decoded_PushSP; + when OpCode_PopPC => + execute1_decodedOpcode<=Decoded_PopPC; + when OpCode_Add => + execute1_decodedOpcode<=Decoded_Add; + when OpCode_Or => + execute1_decodedOpcode<=Decoded_Or; + when OpCode_And => + execute1_decodedOpcode<=Decoded_And; + when OpCode_Load => + execute1_decodedOpcode<=Decoded_Load; + when OpCode_Not => + execute1_decodedOpcode<=Decoded_Not; + when OpCode_Flip => + execute1_decodedOpcode<=Decoded_Flip; + when OpCode_Store => + execute1_decodedOpcode<=Decoded_Store; + when OpCode_PopSP => + execute1_decodedOpcode<=Decoded_PopSP; + when others => + execute1_decodedOpcode<=Decoded_Break; + end case; + end if; + + + -- stage 2: execute 1 - load stage. + -- + -- the address must be known without using the value on top of the stack... + -- resync #3 + execute1_fetched <= '0'; + decode_fetched <= execute1_fetched; -- the value in memAAddr will be valid for 1 cycle only + decode_fetchedPC <= execute1_fetchedPC; + + if (execute1_fetchPC(1 downto 0)/=b"00") then + execute1_fetchPC <= execute1_fetchPC+1; + end if; + + execute1_push1 <= '0'; + execute1_push2 <= execute1_push1; + execute1_pop1 <= '0'; + execute1_pop2 <= execute1_pop1; + + if ((execute1_push1 and execute1_push2)='1') then + memAWrite <= execute2_topOfStack; + else + memAWrite <= execute2_topOfStackB; + end if; + + -- resync #7 + case execute1_decodedOpcode is + when Decoded_Neqbranch | Decoded_MoveDown3 | Decoded_Load | Decoded_Loadb | Decoded_Store | Decoded_Storeb | Decoded_Emulate | Decoded_PopSP | Decoded_PopPC| Decoded_Callpcrel => + execute1_stall <= '1'; + when others => + -- nothing... + end case; + + execute1_antialias <= load_stall; + execute1_doFetch := false; + case execute1_decodedOpcode is + when Decoded_PushSP | Decoded_Emulate => + execute1_sp <= execute1_sp - 1; + execute1_push1 <= '1'; + execute1_doFetch := true; + when Decoded_Duplicate3 => + memAWriteEnable <= ((execute1_push1 and execute1_push2) or + (execute1_push1 and not execute1_pop2) or + (execute1_push2 and not execute1_pop1)) and + (not execute1_antialias and not execute1_stall); + memAAddr <= execute1_sp + 2; + execute1_sp <= execute1_sp - 1; + execute1_push1 <= '1'; + when Decoded_Im | Decoded_Duplicate | Decoded_Duplicate2 => + execute1_sp <= execute1_sp - 1; + execute1_push1 <= '1'; + execute1_doFetch := true; + when Decoded_LoadSP => + memAAddr <= execute1_sp+execute1_spOffset; + execute1_sp <= execute1_sp - 1; + execute1_push1 <= '1'; + when Decoded_AddSP => + memAAddr <= execute1_sp+execute1_spOffset; + when Decoded_MoveDown2 => + execute1_sp <= execute1_sp + 1; + execute1_pop1 <= '1'; + execute1_doFetch := true; + when Decoded_Ulessthan | Decoded_Lessthan | Decoded_Eq | Decoded_Neqbranch | Decoded_MoveDown3 | Decoded_MoveDown | Decoded_Add | Decoded_Sub | Decoded_Or | Decoded_And | Decoded_PopPC | Decoded_StoreSP => + -- be afraid :-) + memAWriteEnable <= ((execute1_push1 and execute1_push2) or + (execute1_push1 and not execute1_pop2) or + (execute1_push2 and not execute1_pop1)) and + (not execute1_antialias and not execute1_stall); + memAAddr <= execute1_sp + 2; + execute1_sp <= execute1_sp + 1; + execute1_pop1 <= '1'; + when others => + execute1_doFetch := true; + end case; + + if execute1_doFetch then + -- resync #2 + -- some instruction that does not change the stack pointer + -- and does not need use a memory operand. + -- We can fetch the next word to be decoded to avoid stalls + execute1_fetchPC <= execute1_fetchPC+1; + memAAddr <= execute1_fetchPC(maxAddrBit downto minAddrBit); + execute1_fetchedPC <= execute1_fetchPC; + execute1_fetched <= '1'; + end if; + + + -- stage 3: fetching memory takes 1 cycle + -- here we also verify that we've fetched & decoded the right + -- opcode. + -- resync #8 + load_decodedOpcode <= execute1_decodedOpcode; + load_opcode <= execute1_opcode; + load_spOffset <= execute1_spOffset; + load_stall <= execute1_stall; + -- resync #9 + if (load_stall = '1') then + execute2_decodedOpcode <= Decoded_Stall; + else + execute2_decodedOpcode <= load_decodedOpcode; + end if; + execute2_opcode <= load_opcode; + execute2_spOffset <= load_spOffset; + + -- stage 4: execute 2 - we now have both operands. This is the + -- main execute stage... + begin_inst <= '1'; + trace_pc <= execute2_pc; + trace_opcode <= execute2_opcode; + trace_sp <= execute2_sp; + trace_topOfStack <= execute2_topOfStack; + trace_topOfStackB <= execute2_topOfStackB; + + execute2_pc <= execute2_pc + 1; + execute2_loading <= '0'; + memBWriteEnable <= '0'; + + case execute2_decodedOpcode is + when Decoded_PopSP => + execute2_sp <= execute2_topOfStack(maxAddrBit downto minAddrBit); + + memBWriteEnable <= '1'; + memBAddr <= execute2_sp + 1; + memBWrite <= execute2_topOfStackB; + execute2_resync <= '1'; + when Decoded_Callpcrel => + execute2_topOfStack <= (others => DontCareValue); + execute2_topOfStack(maxAddrBit downto 0) <= execute2_pc + 1; + execute2_pc <= execute2_pc + execute2_topOfStack(maxAddrBit downto 0); + execute2_persistTopOfStack <= '1'; + when Decoded_PopPC => + execute2_pc <= execute2_topOfStack(maxAddrBit downto 0); + execute2_sp <= execute2_sp + 1; + + memBWriteEnable <= '1'; + memBAddr <= execute2_sp + 1; + memBWrite <= execute2_topOfStackB; + execute2_resync <= '1'; + when Decoded_Emulate => + execute2_sp <= execute2_sp - 1; + + execute2_topOfStack <= (others => DontCareValue); + execute2_topOfStack(maxAddrBit downto 0) <= execute2_pc + 1; + execute2_topOfStackB <= execute2_topOfStack; + + memBWriteEnable <= '1'; + memBAddr <= execute2_sp+1; + memBWrite <= execute2_topOfStackB; + -- The emulate address is: + -- 98 7654 3210 + -- 0000 00aa aaa0 0000 + execute2_pc <= (others => '0'); + execute2_pc(9 downto 5) <= execute2_opcode(4 downto 0); + execute2_persistTopOfStack <= '1'; + when Decoded_Im => + execute2_sp <= execute2_sp - 1; + for i in wordSize-1 downto 7 loop + execute2_topOfStack(i) <= execute2_opcode(6); + end loop; + execute2_topOfStack(6 downto 0) <= execute2_opcode(6 downto 0); + + execute2_topOfStackB <= execute2_topOfStack; + memBWriteEnable <= '1'; + memBAddr <= execute2_sp + 1; + memBWrite <= execute2_topOfStackB; + when Decoded_ImShift => + execute2_topOfStack(wordSize-1 downto 7) <= execute2_topOfStack(wordSize-8 downto 0); + execute2_topOfStack(6 downto 0) <= execute2_opcode(6 downto 0); + when Decoded_LoadSP => + execute2_sp <= execute2_sp - 1; + execute2_topOfStack <= memARead; + execute2_topOfStackB <= execute2_topOfStack; + memBWriteEnable <= '1'; + memBAddr <= execute2_sp + 1; + memBWrite <= execute2_topOfStackB; + when Decoded_Break => + report "Break instruction encountered" severity failure; + break <= '1'; + when Decoded_PushSP => + execute2_topOfStack <= (others => DontCareValue); + execute2_topOfStack(maxAddrBit downto minAddrBit) <= execute2_sp; + + execute2_sp <= execute2_sp - 1; + execute2_topOfStackB <= execute2_topOfStack; + memBWriteEnable <= '1'; + memBAddr <= execute2_sp + 1; + memBWrite <= execute2_topOfStackB; + when Decoded_Add => + execute2_sp <= execute2_sp + 1; + execute2_topOfStack <= execute2_topOfStackB + execute2_topOfStack; + execute2_topOfStackB <= memARead; + when Decoded_Sub => + execute2_sp <= execute2_sp + 1; + execute2_topOfStack <= execute2_topOfStackB - execute2_topOfStack; + execute2_topOfStackB <= memARead; + when Decoded_AddSP => + execute2_topOfStack <= execute2_topOfStack + memARead; + when Decoded_Or => + execute2_sp <= execute2_sp + 1; + execute2_topOfStack <= execute2_topOfStackB or execute2_topOfStack; + execute2_topOfStackB <= memARead; + when Decoded_And => + execute2_sp <= execute2_sp + 1; + execute2_topOfStack <= execute2_topOfStackB and execute2_topOfStack; + execute2_topOfStackB <= memARead; + when Decoded_Load | Decoded_Loadb | Decoded_Storeb => + if (execute2_topOfStack(ioBit)='1') then + io_addr <= execute2_topOfStack(maxAddrBit downto minAddrBit); + io_readEnable <= '1'; + else + memAAddr <= execute2_topOfStack(maxAddrBit downto minAddrBit); + execute1_fetched <= '0'; + end if; + if (execute2_decodedOpcode = Decoded_Loadb) then + execute2_loadByte <= '1'; + else + execute2_loadByte <= '0'; + end if; + if (execute2_decodedOpcode = Decoded_Storeb) then + execute2_storeByte <= '1'; + else + execute2_storebyte <= '0'; + end if; + execute2_loading <= '1'; + when Decoded_Ashiftleft => + execute2_topOfStack(wordSize-1 downto 1) <= execute2_topOfStack(wordSize-2 downto 0); + execute2_topOfStack(0) <= '0'; + when Decoded_MoveDown => + execute2_sp <= execute2_sp + 1; + execute2_topOfStackB <= memARead; + when Decoded_MoveDown2 => + execute2_sp <= execute2_sp + 1; + execute2_topOfStack <= execute2_topOfStackB; + execute2_topOfStackB <= execute2_topOfStack; + when Decoded_MoveDown3 => + execute2_sp <= execute2_sp + 1; + memBWriteEnable <= '1'; + memBAddr <= execute2_sp+execute2_spOffset; + memBWrite <= execute2_topOfStack; + + execute2_topOfStack <= execute2_topOfStackB; + execute2_topOfStackB <= memARead; + execute2_persistTopOfStack <= '1'; + when Decoded_Duplicate => + execute2_topOfStackB <= execute2_topOfStack; + execute2_sp <= execute2_sp - 1; + memBWriteEnable <= '1'; + memBAddr <= execute2_sp + 1; + memBWrite <= execute2_topOfStackB; + when Decoded_Duplicate2 => + execute2_topOfStack <= execute2_topOfStackB; + execute2_topOfStackB <= execute2_topOfStack; + execute2_sp <= execute2_sp - 1; + memBWriteEnable <= '1'; + memBAddr <= execute2_sp + 1; + memBWrite <= execute2_topOfStackB; + when Decoded_Duplicate3 => + execute2_topOfStack <= memARead; + execute2_topOfStackB <= execute2_topOfStack; + execute2_sp <= execute2_sp - 1; + memBWriteEnable <= '1'; + memBAddr <= execute2_sp + 1; + memBWrite <= execute2_topOfStackB; + when Decoded_Pushspadd => + execute2_topOfStack <= (others => DontCareValue); + execute2_topOfStack(maxAddrBit downto minAddrBit) <= execute2_sp + execute2_topOfStack(maxAddrBit-minAddrBit downto 0); + when Decoded_Not => + execute2_topOfStack <= not execute2_topOfStack; + when Decoded_Flip => + for i in 0 to wordSize-1 loop + execute2_topOfStack(i) <= execute2_topOfStack(wordSize-1-i); + end loop; + when Decoded_Store => + execute2_sp <= execute2_sp + 2; + if (execute2_topOfStack(ioBit)='0') then + memBAddr <= execute2_topOfStack(maxAddrBit downto minAddrBit); + memBWrite <= execute2_topOfStackB; + memBWriteEnable <= '1'; + else + io_addr <= execute2_topOfStack(maxAddrBit downto minAddrBit); + io_write <= execute2_topOfStackB(7 downto 0); + io_writeEnable <= '1'; + end if; + execute2_resync <= '1'; + when Decoded_StoreSP => + execute2_sp <= execute2_sp + 1; + memBWriteEnable <= '1'; + memBAddr <= execute2_sp+execute2_spOffset; + memBWrite <= execute2_topOfStack; + + execute2_topOfStack <= execute2_topOfStackB; + execute2_topOfStackB <= memARead; + when Decoded_Neqbranch => + execute2_sp <= execute2_sp + 2; + if (execute2_topOfStackB/=0) then + execute2_pc <= execute2_topOfStack(maxAddrBit downto 0) + execute2_pc; + end if; + execute2_resync <= '1'; + when Decoded_Eq => + execute2_sp <= execute2_sp + 1; + execute2_topOfStack <= (others => '0'); + if (execute2_topOfStack=execute2_topOfStackB) then + execute2_topOfStack(0) <= '1'; + end if; + execute2_topOfStackB <= memARead; + when Decoded_Ulessthan => + execute2_sp <= execute2_sp + 1; + execute2_topOfStack <= (others => '0'); + if (execute2_topOfStack + execute2_sp <= execute2_sp + 1; + execute2_topOfStack <= (others => '0'); + compareA := signed(execute2_topOfStack); + compareB := signed(execute2_topOfStackB); + if (compareA + begin_inst <= '0'; + execute2_pc <= execute2_pc; + when others => + -- nop + end case; + + -- load cycle... + execute2_loadingDone <= execute2_loading; + if (execute2_loadingDone ='1') then + if (execute2_topOfStack(ioBit)='1') then + if (io_busy = '0') then + execute2_topOfStack <= (others => '0'); + execute2_topOfStack(7 downto 0) <= io_read; + execute2_persistTopOfStack <= '1'; + else + execute2_loadingDone <= '1'; + end if; + else + if (execute2_storeByte = '1') then + execute2_sp <= execute2_sp + 2; + memBWriteEnable <= '1'; + memBAddr <= execute2_topOfStack(maxAddrBit downto minAddrBit); + memBWrite <= memARead; + case execute2_topOfStack(minAddrBit-1 downto 0) is + when "00" => memBWrite(31 downto 24) <= execute2_topOfStackB(7 downto 0); + when "01" => memBWrite(23 downto 16) <= execute2_topOfStackB(7 downto 0); + when "10" => memBWrite(15 downto 8) <= execute2_topOfStackB(7 downto 0); + when others => memBWrite(7 downto 0) <= execute2_topOfStackB(7 downto 0); + end case; +-- case execute2_topOfStack(0 downto 0) is +-- when "1" => memBWrite(15 downto 8) <= execute2_topOfStackB(7 downto 0); +-- when others => memBWrite(7 downto 0) <= execute2_topOfStackB(7 downto 0); +-- end case; + execute2_resync <= '1'; + elsif (execute2_loadByte = '1') then + execute2_topOfStack <= (others => '0'); + case execute2_topOfStack(minAddrBit-1 downto 0) is + when "00" => execute2_topOfStack(7 downto 0) <= memARead(31 downto 24); + when "01" => execute2_topOfStack(7 downto 0) <= memARead(23 downto 16); + when "10" => execute2_topOfStack(7 downto 0) <= memARead(15 downto 8); + when others => execute2_topOfStack(7 downto 0) <= memARead(7 downto 0); + end case; +-- case execute2_topOfStack(0 downto 0) is +-- when "1" => execute2_topOfStack(7 downto 0) <= memARead(15 downto 8); +-- when others => execute2_topOfStack(7 downto 0) <= memARead(7 downto 0); +-- end case; + execute2_persistTopOfStack <= '1'; + else + execute2_topOfStack <= memARead; + execute2_persistTopOfStack <= '1'; + end if; + end if; + end if; + + -- write top of stack... + execute2_persistTopOfStackB <= execute2_persistTopOfStack; + if (execute2_persistTopOfStack = '1') then + execute2_persistTopOfStack <= '0'; + memBWriteEnable <= '1'; + memBAddr <= execute2_sp; + memBWrite <= execute2_topOfStack; + end if; + if (execute2_persistTopOfStackB = '1') then + memBWriteEnable <= '1'; + memBAddr <= execute2_sp+1; + memBWrite <= execute2_topOfStackB; + + execute2_resync <= '1'; + end if; + + -- here we resync the pipeline. + -- a number of things have to happen on certain cycles + execute2_resync2 <= execute2_resync; + execute2_resync3 <= execute2_resync2; + execute2_resync4 <= execute2_resync3; + execute2_resync5 <= execute2_resync4; + execute2_resync6 <= execute2_resync5; + execute2_resync7 <= execute2_resync6; + execute2_resync8 <= execute2_resync7; + execute2_resync9 <= execute2_resync8; + execute2_resync10 <= execute2_resync9; + + if (execute2_resync = '1' ) then + -- resync #1 + execute2_resync <= '0'; + decode_starved <= '1'; + memAAddr <= execute2_sp; + end if; + if (execute2_resync2 = '1') then + -- resync #2 + execute1_fetchPC <= execute2_pc; + memAAddr <= execute2_sp + 1; + end if; + if (execute2_resync3 = '1') then + -- resync #3 + execute2_topOfStack <= memARead; + end if; + if (execute2_resync4 = '1') then + -- resync #4 + -- during this cycle the address is set to the opcode + execute2_topOfStackB <= memARead; + end if; + if (execute2_resync5 = '1') then + -- resync #5 + execute1_pop1 <= '0'; + execute1_push1 <= '0'; + end if; + if (execute2_resync6 = '1') then + -- resync #6 + decode_idim_flag <= '0'; + execute1_pop1 <= '0'; + execute1_push1 <= '0'; + end if; + if (execute2_resync7 = '1') then + -- resync #7 + execute1_sp <= execute2_sp; + execute1_stall <= '0'; + end if; + if (execute2_resync8 = '1') then + -- resync #8 +-- load_stall <= '0'; + end if; + if (execute2_resync9 = '1') then + -- resync #9 + end if; + if (execute2_resync10 = '1') then + end if; + + + + + end if; + end process; + + + +end behave; diff --git a/zpu/hdl/zpu3/src/zpu_top.vhd b/zpu/hdl/zpu3/src/zpu_top.vhd new file mode 100644 index 0000000..0ac6df4 --- /dev/null +++ b/zpu/hdl/zpu3/src/zpu_top.vhd @@ -0,0 +1,421 @@ +-- Company: ZPU3 +-- Engineer: Øyvind Harboe + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +library zylin; +use zylin.zpu_config.all; +use zylin.zpupkg.all; + + +entity zpu_top is + Port ( clk : in std_logic; + areset : in std_logic; + io_busy : in std_logic; + io_read : in std_logic_vector(7 downto 0); + io_write : out std_logic_vector(7 downto 0); + io_addr : out std_logic_vector(maxAddrBit downto minAddrBit); + io_writeEnable : out std_logic; + io_readEnable : out std_logic; + interrupt : in std_logic; + break : out std_logic); +end zpu_top; + +architecture behave of zpu_top is + +signal readIO : std_logic; + + + +signal memAWriteEnable : std_logic; +signal memAAddr : std_logic_vector(maxAddrBit downto minAddrBit); +signal memAWrite : std_logic_vector(wordSize-1 downto 0); +signal memARead : std_logic_vector(wordSize-1 downto 0); +signal memBWriteEnable : std_logic; +signal memBAddr : std_logic_vector(maxAddrBit downto minAddrBit); +signal memBWrite : std_logic_vector(wordSize-1 downto 0); +signal memBRead : std_logic_vector(wordSize-1 downto 0); + + + +signal pc : std_logic_vector(maxAddrBit downto 0); +signal sp : std_logic_vector(maxAddrBit downto minAddrBit); + +signal idim_flag : std_logic; + +--signal storeToStack : std_logic; +--signal fetchNextInstruction : std_logic; +--signal extraCycle : std_logic; +signal busy : std_logic; +--signal fetching : std_logic; + +signal begin_inst : std_logic; + + + +signal trace_opcode : std_logic_vector(7 downto 0); +signal trace_pc : std_logic_vector(maxAddrBit downto 0); +signal trace_sp : std_logic_vector(maxAddrBit downto minAddrBit); +signal trace_topOfStack : std_logic_vector(wordSize-1 downto 0); +signal trace_topOfStackB : std_logic_vector(wordSize-1 downto 0); + +-- state machine. + +subtype State_Type is std_logic_vector(3 downto 0); +constant State_Fetch : State_Type := b"0000"; +constant State_WriteIODone : State_Type := b"0001"; +constant State_Execute : State_Type := b"0010"; +constant State_StoreToStack : State_Type := b"0011"; +constant State_Add : State_Type := b"0100"; +constant State_Or : State_Type := b"0101"; +constant State_And : State_Type := b"0110"; +constant State_Store : State_Type := b"0111"; +constant State_ReadIO : State_Type := b"1000"; +constant State_WriteIO : State_Type := b"1001"; +constant State_Load : State_Type := b"1010"; +constant State_FetchNext : State_Type := b"1011"; +constant State_AddSP : State_Type := b"1100"; +constant State_ReadIODone : State_Type := b"1101"; +constant State_Decode : State_Type := b"1110"; +constant State_Resync : State_Type := b"1111"; + + +subtype DecodedOpcodeType is std_logic_vector(4 downto 0); +constant Decoded_Nop : DecodedOpcodeType := b"00000"; +constant Decoded_Im : DecodedOpcodeType := b"00001"; +constant Decoded_ImShift : DecodedOpcodeType := b"00010"; +constant Decoded_LoadSP : DecodedOpcodeType := b"00011"; +constant Decoded_StoreSP : DecodedOpcodeType := b"00100"; +constant Decoded_AddSP : DecodedOpcodeType := b"00101"; +constant Decoded_Emulate : DecodedOpcodeType := b"00110"; +constant Decoded_Break : DecodedOpcodeType := b"00111"; +constant Decoded_PushPC : DecodedOpcodeType := b"01000"; +constant Decoded_PushSP : DecodedOpcodeType := b"01001"; +constant Decoded_PopPC : DecodedOpcodeType := b"01010"; +constant Decoded_Add : DecodedOpcodeType := b"01011"; +constant Decoded_Or : DecodedOpcodeType := b"01100"; +constant Decoded_And : DecodedOpcodeType := b"01101"; +constant Decoded_Load : DecodedOpcodeType := b"01110"; +constant Decoded_Not : DecodedOpcodeType := b"01111"; +constant Decoded_Flip : DecodedOpcodeType := b"10000"; +constant Decoded_Store : DecodedOpcodeType := b"10001"; +constant Decoded_PopSP : DecodedOpcodeType := b"10010"; + +signal opcode : std_logic_vector(OpCode_Size-1 downto 0); + +signal decodedOpcode : DecodedOpcodeType; + +signal state : State_Type; + +begin + traceFileGenerate: + if Generate_Trace generate + trace_file: trace port map ( + clk => clk, + begin_inst => begin_inst, + pc => trace_pc, + opcode => trace_opcode, + sp => trace_sp, + memA => trace_topOfStack, + memB => trace_topOfStackB, + busy => busy + ); + end generate; + + + memory: dualport_ram port map ( + clk => clk, + memAWriteEnable => memAWriteEnable, + memAAddr => memAAddr, + memAWrite => memAWrite, + memARead => memARead, + memBWriteEnable => memBWriteEnable, + memBAddr => memBAddr, + memBWrite => memBWrite, + memBRead => memBRead + ); + + + + + opcodeControl: + process(clk, areset) + variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0); + variable spOffset : std_logic_vector(4 downto 0); + begin + if areset = '1' then + state <= State_Resync; + break <= '0'; + sp <= (2 => '0', others => '1'); + pc <= (others => '0'); + idim_flag <= '0'; + begin_inst <= '0'; + memAAddr <= (others => '0'); + memBAddr <= (others => '0'); + memAWriteEnable <= '0'; + memBWriteEnable <= '0'; + io_writeEnable <= '0'; + io_readEnable <= '0'; + decodedOpcode <= (others => '0'); + memAWrite <= (others => '0'); + memBWrite <= (others => '0'); + opcode <= (others => '0'); + io_addr <= (others => '0'); + io_write <= (others => '0'); + elsif (clk'event and clk = '1') then + memAWriteEnable <= '0'; + memBWriteEnable <= '0'; + -- This saves ca. 100 LUT's, by explicitly declaring that the + -- memAWrite can be left at whatever value if memAWriteEnable is + -- not set. + memAWrite <= (others => DontCareValue); + memBWrite <= (others => DontCareValue); + opcode <= (others => DontCareValue); +-- io_addr <= (others => DontCareValue); +-- io_write <= (others => DontCareValue); + spOffset := (others => DontCareValue); + memAAddr <= (others => DontCareValue); + memBAddr <= (others => DontCareValue); + + io_writeEnable <= '0'; + io_readEnable <= '0'; + begin_inst <= '0'; + + case state is + when State_Execute => + state <= State_Fetch; + -- at this point: + -- memBRead contains opcode word + -- memARead contains top of stack + pc <= pc + 1; + + -- trace + begin_inst <= '1'; + trace_pc <= pc; + trace_opcode <= opcode; + trace_sp <= sp; + trace_topOfStack <= memARead; + trace_topOfStackB <= memBRead; + + -- during the next cycle we'll be reading the next opcode + spOffset(4):=not opcode(4); + spOffset(3 downto 0):=opcode(3 downto 0); + + case decodedOpcode is + when Decoded_Im => + memAWriteEnable <= '1'; + sp <= sp - 1; + memAAddr <= sp-1; + for i in wordSize-1 downto 7 loop + memAWrite(i) <= opcode(6); + end loop; + memAWrite(6 downto 0) <= opcode(6 downto 0); + when Decoded_ImShift => + memAAddr <= sp; + memAWriteEnable <= '1'; + memAWrite(wordSize-1 downto 7) <= memARead(wordSize-8 downto 0); + memAWrite(6 downto 0) <= opcode(6 downto 0); + when Decoded_StoreSP => + memBWriteEnable <= '1'; + memBAddr <= sp+spOffset; + memBWrite <= memARead; + sp <= sp + 1; + state <= State_Resync; + when Decoded_LoadSP => + sp <= sp - 1; + memAAddr <= sp+spOffset; + when Decoded_Emulate => + sp <= sp - 1; + memAWriteEnable <= '1'; + memAAddr <= sp - 1; + memAWrite <= (others => DontCareValue); + memAWrite(maxAddrBit downto 0) <= pc + 1; + -- The emulate address is: + -- 98 7654 3210 + -- 0000 00aa aaa0 0000 + pc <= (others => '0'); + pc(9 downto 5) <= opcode(4 downto 0); + when Decoded_AddSP => + memAAddr <= sp; + memBAddr <= sp+spOffset; + state <= State_AddSP; + when Decoded_Break => + report "Break instruction encountered" severity failure; + break <= '1'; + when Decoded_PushSP => + memAWriteEnable <= '1'; + memAAddr <= sp - 1; + sp <= sp - 1; + memAWrite <= (others => DontCareValue); + memAWrite(maxAddrBit downto minAddrBit) <= sp; + when Decoded_PopPC => + pc <= memARead(maxAddrBit downto 0); + sp <= sp + 1; + state <= State_Resync; + when Decoded_Add => + sp <= sp + 1; + state <= State_Add; + when Decoded_Or => + sp <= sp + 1; + state <= State_Or; + when Decoded_And => + sp <= sp + 1; + state <= State_And; + when Decoded_Load => + if (memARead(ioBit)='1') then + io_addr <= memARead(maxAddrBit downto minAddrBit); + io_readEnable <= '1'; + state <= State_ReadIO; + else + memAAddr <= memARead(maxAddrBit downto minAddrBit); + end if; + when Decoded_Not => + memAAddr <= sp(maxAddrBit downto minAddrBit); + memAWriteEnable <= '1'; + memAWrite <= not memARead; + when Decoded_Flip => + memAAddr <= sp(maxAddrBit downto minAddrBit); + memAWriteEnable <= '1'; + for i in 0 to wordSize-1 loop + memAWrite(i) <= memARead(wordSize-1-i); + end loop; + when Decoded_Store => + memBAddr <= sp + 1; + sp <= sp + 1; + if (memARead(ioBit)='1') then + state <= State_WriteIO; + else + state <= State_Store; + end if; + when Decoded_PopSP => + sp <= memARead(maxAddrBit downto minAddrBit); + state <= State_Resync; + when Decoded_Nop => + memAAddr <= sp; + when others => + null; + end case; + when State_ReadIO => + if (io_busy = '0') then + state <= State_Fetch; + memAWriteEnable <= '1'; + memAWrite <= (others => '0'); + memAWrite(7 downto 0) <= io_read; + end if; + when State_WriteIO => + sp <= sp + 1; + io_writeEnable <= '1'; + io_addr <= memARead(maxAddrBit downto minAddrBit); + io_write <= memBRead(7 downto 0); + state <= State_WriteIODone; + when State_WriteIODone => + if (io_busy = '0') then + state <= State_Resync; + end if; + when State_Fetch => + -- We need to resync. During the *next* cycle + -- we'll fetch the opcode @ pc and thus it will + -- be available for State_Execute the cycle after + -- next + memBAddr <= pc(maxAddrBit downto minAddrBit); + state <= State_FetchNext; + when State_FetchNext => + -- at this point memARead contains the value that is either + -- from the top of stack or should be copied to the top of the stack + memAWriteEnable <= '1'; + memAWrite <= memARead; + memAAddr <= sp; + memBAddr <= sp + 1; + state <= State_Decode; + when State_Decode => + case pc(1 downto 0) is + when "00" => tOpcode := memBRead(31 downto 24); + when "01" => tOpcode := memBRead(23 downto 16); + when "10" => tOpcode := memBRead(15 downto 8); + when others => tOpcode := memBRead(7 downto 0); + end case; + idim_flag <= tOpcode(7); + opcode <= tOpcode; + if (tOpcode(7 downto 7)=OpCode_Im) then + if (idim_flag='1') then + decodedOpcode<=Decoded_ImShift; + else + decodedOpcode<=Decoded_Im; + end if; + elsif (tOpcode(7 downto 5)=OpCode_StoreSP) then + decodedOpcode<=Decoded_StoreSP; + elsif (tOpcode(7 downto 5)=OpCode_LoadSP) then + decodedOpcode<=Decoded_LoadSP; + elsif (tOpcode(7 downto 5)=OpCode_Emulate) then + decodedOpcode<=Decoded_Emulate; + elsif (tOpcode(7 downto 4)=OpCode_AddSP) then + decodedOpcode<=Decoded_AddSP; + else + case tOpcode(3 downto 0) is + when OpCode_Break => + decodedOpcode<=Decoded_Break; + when OpCode_PushSP => + decodedOpcode<=Decoded_PushSP; + when OpCode_PopPC => + decodedOpcode<=Decoded_PopPC; + when OpCode_Add => + decodedOpcode<=Decoded_Add; + when OpCode_Or => + decodedOpcode<=Decoded_Or; + when OpCode_And => + decodedOpcode<=Decoded_And; + when OpCode_Load => + decodedOpcode<=Decoded_Load; + when OpCode_Not => + decodedOpcode<=Decoded_Not; + when OpCode_Flip => + decodedOpcode<=Decoded_Flip; + when OpCode_Store => + decodedOpcode<=Decoded_Store; + when OpCode_PopSP => + decodedOpcode<=Decoded_PopSP; + when others => + decodedOpcode<=Decoded_Nop; + end case; + end if; + -- during the State_Execute cycle we'll be fetching SP+1 + memAAddr <= sp; + memBAddr <= sp + 1; + state <= State_Execute; + when State_Store => + sp <= sp + 1; + memAWriteEnable <= '1'; + memAAddr <= memARead(maxAddrBit downto minAddrBit); + memAWrite <= memBRead; + state <= State_Resync; + when State_AddSP => + state <= State_Add; + when State_Add => + memAAddr <= sp; + memAWriteEnable <= '1'; + memAWrite <= memARead + memBRead; + state <= State_Fetch; + when State_Or => + memAAddr <= sp; + memAWriteEnable <= '1'; + memAWrite <= memARead or memBRead; + state <= State_Fetch; + when State_Resync => + memAAddr <= sp; + state <= State_Fetch; + when State_And => + memAAddr <= sp; + memAWriteEnable <= '1'; + memAWrite <= memARead and memBRead; + state <= State_Fetch; + when others => + null; + end case; + end if; + end process; + + + +end behave; diff --git a/zpu/hdl/zpu3/src/zpu_top_medium.vhd b/zpu/hdl/zpu3/src/zpu_top_medium.vhd new file mode 100644 index 0000000..4896b30 --- /dev/null +++ b/zpu/hdl/zpu3/src/zpu_top_medium.vhd @@ -0,0 +1,768 @@ +-- Company: ZPU3 +-- Engineer: Øyvind Harboe + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; +use IEEE.STD_LOGIC_arith.ALL; + +library zylin; +use zylin.zpu_config.all; +use zylin.zpupkg.all; + + +entity zpu_top is + Port ( clk : in std_logic; + areset : in std_logic; + io_busy : in std_logic; + io_read : in std_logic_vector(7 downto 0); + io_write : out std_logic_vector(7 downto 0); + io_addr : out std_logic_vector(maxAddrBit downto minAddrBit); + io_writeEnable : out std_logic; + io_readEnable : out std_logic; + interrupt : in std_logic; + break : out std_logic); +end zpu_top; + +architecture behave of zpu_top is + +signal readIO : std_logic; + + + +signal memAWriteEnable : std_logic; +signal memAAddr : std_logic_vector(maxAddrBit downto minAddrBit); +signal memAWrite : std_logic_vector(wordSize-1 downto 0); +signal memARead : std_logic_vector(wordSize-1 downto 0); +signal memBWriteEnable : std_logic; +signal memBAddr : std_logic_vector(maxAddrBit downto minAddrBit); +signal memBWrite : std_logic_vector(wordSize-1 downto 0); +signal memBRead : std_logic_vector(wordSize-1 downto 0); + + + +signal pc : std_logic_vector(maxAddrBit downto 0); +signal sp : std_logic_vector(maxAddrBit downto minAddrBit); + +signal idim_flag : std_logic; + +--signal storeToStack : std_logic; +--signal fetchNextInstruction : std_logic; +--signal extraCycle : std_logic; +signal busy : std_logic; +--signal fetching : std_logic; + +signal begin_inst : std_logic; + + + +signal trace_opcode : std_logic_vector(7 downto 0); +signal trace_pc : std_logic_vector(maxAddrBit downto 0); +signal trace_sp : std_logic_vector(maxAddrBit downto minAddrBit); +signal trace_topOfStack : std_logic_vector(wordSize-1 downto 0); + +-- state machine. + +subtype State_Type is std_logic_vector(4 downto 0); +constant State_ResyncDecode : State_Type := b"00000"; +constant State_WriteIODone : State_Type := b"00001"; +constant State_Execute : State_Type := b"00010"; +constant State_StoreToStack : State_Type := b"00011"; +constant State_Add : State_Type := b"00100"; +constant State_Or : State_Type := b"00101"; +constant State_And : State_Type := b"00110"; +constant State_Store : State_Type := b"00111"; +constant State_ReadIO : State_Type := b"01000"; +constant State_WriteIO : State_Type := b"01001"; +constant State_Load : State_Type := b"01010"; +constant State_ResyncStack : State_Type := b"01011"; +constant State_AddSP : State_Type := b"01100"; +constant State_ReadIODone : State_Type := b"01101"; +constant State_Decode : State_Type := b"01110"; +constant State_LoadByte1 : State_Type := b"01111"; +constant State_LoadByte2 : State_Type := b"10000"; +constant State_StoreByte1 : State_Type := b"10001"; +constant State_StoreByte2 : State_Type := b"10010"; +constant State_Mult1 : State_Type := b"10011"; +constant State_Mult2 : State_Type := b"10100"; +constant State_Mult3 : State_Type := b"10101"; + + +subtype DecodedOpcodeType is std_logic_vector(5 downto 0); +constant Decoded_Nop : DecodedOpcodeType := b"000000"; +constant Decoded_Im : DecodedOpcodeType := b"000001"; +constant Decoded_ImShift : DecodedOpcodeType := b"000010"; +constant Decoded_LoadSP : DecodedOpcodeType := b"000011"; +constant Decoded_StoreSP : DecodedOpcodeType := b"000100"; +constant Decoded_AddSP : DecodedOpcodeType := b"000101"; +constant Decoded_Emulate : DecodedOpcodeType := b"000110"; +constant Decoded_Break : DecodedOpcodeType := b"000111"; +constant Decoded_PushPC : DecodedOpcodeType := b"001000"; +constant Decoded_PushSP : DecodedOpcodeType := b"001001"; +constant Decoded_PopPC : DecodedOpcodeType := b"001010"; +constant Decoded_Add : DecodedOpcodeType := b"001011"; +constant Decoded_Or : DecodedOpcodeType := b"001100"; +constant Decoded_And : DecodedOpcodeType := b"001101"; +constant Decoded_Load : DecodedOpcodeType := b"001110"; +constant Decoded_Not : DecodedOpcodeType := b"001111"; +constant Decoded_Flip : DecodedOpcodeType := b"010000"; +constant Decoded_Store : DecodedOpcodeType := b"010001"; +constant Decoded_PopSP : DecodedOpcodeType := b"010010"; +constant Decoded_Ashiftleft : DecodedOpcodeType := b"010011"; +constant Decoded_Ashiftright : DecodedOpcodeType := b"010100"; +constant Decoded_Lshiftright : DecodedOpcodeType := b"010101"; +constant Decoded_Eqbranch : DecodedOpcodeType := b"010110"; +constant Decoded_Neqbranch : DecodedOpcodeType := b"010111"; +constant Decoded_Eq : DecodedOpcodeType := b"011000"; +constant Decoded_Neq : DecodedOpcodeType := b"011001"; +constant Decoded_Loadb : DecodedOpcodeType := b"011010"; +constant Decoded_Lessthan : DecodedOpcodeType := b"011011"; +constant Decoded_Lessthanorequal : DecodedOpcodeType := b"011100"; +constant Decoded_Ulessthan : DecodedOpcodeType := b"011101"; +constant Decoded_Ulessthanorequal : DecodedOpcodeType := b"011110"; +constant Decoded_Storeb : DecodedOpcodeType := b"011111"; +constant Decoded_Lshift2 : DecodedOpcodeType := b"100000"; +constant Decoded_DoubleIm : DecodedOpcodeType := b"100001"; +constant Decoded_AddIm : DecodedOpcodeType := b"100011"; +constant Decoded_Mult16x16 : DecodedOpcodeType := b"100100"; +constant Decoded_Swap : DecodedOpcodeType := b"100101"; +constant Decoded_Callpcrel : DecodedOpcodeType := b"100110"; +constant Decoded_Pushspadd : DecodedOpcodeType := b"100111"; + + +signal mult1 : std_logic_vector(wordSize/2-1 downto 0); +signal mult2 : std_logic_vector(wordSize/2-1 downto 0); +signal multResult : std_logic_vector(wordSize-1 downto 0); + +signal storeByte : std_logic_vector(7 downto 0); +signal byteSelect : std_logic_vector(minAddrBit-1 downto 0); + +signal opcode : std_logic_vector(OpCode_Size-1 downto 0); +signal opcode2 : std_logic_vector(OpCode_Size-1 downto 0); + +signal decodedOpcode : DecodedOpcodeType; + +signal state : State_Type; + +begin + traceFileGenerate: + if Generate_Trace generate + trace_file: trace port map ( + clk => clk, + begin_inst => begin_inst, + pc => trace_pc, + opcode => trace_opcode, + sp => trace_sp, + memA => trace_topOfStack, + busy => busy + ); + end generate; + + + memory: dualport_ram port map ( + clk => clk, + memAWriteEnable => memAWriteEnable, + memAAddr => memAAddr, + memAWrite => memAWrite, + memARead => memARead, + memBWriteEnable => memBWriteEnable, + memBAddr => memBAddr, + memBWrite => memBWrite, + memBRead => memBRead + ); + + + process(clk, areset) + begin + if (clk'event and clk = '1') then + multResult <= mult1 * mult2; + end if; + end process; + + + + opcodeControl: + process(clk, areset) + variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0); + variable tOpcode2 : std_logic_vector(OpCode_Size-1 downto 0); + variable spOffset : std_logic_vector(4 downto 0); + variable spOffset2 : std_logic_vector(4 downto 0); + variable nextPC : std_logic_vector(maxAddrBit downto 0); + variable pushspaddTemp : std_logic_vector(maxAddrBit downto minAddrBit); + variable tempVal : std_logic_vector(wordSize-1 downto 0); + variable compareA : signed(wordSize-1 downto 0); + variable compareB : signed(wordSize-1 downto 0); + begin + if areset = '1' then + mult1 <= (others => '0'); + mult2 <= (others => '0'); + state <= State_ResyncDecode; + break <= '0'; + sp <= (2 => '0', others => '1'); + pc <= (others => '0'); + idim_flag <= '0'; + begin_inst <= '0'; + memAAddr <= (others => '0'); + memBAddr <= (others => '0'); + memAWriteEnable <= '0'; + memBWriteEnable <= '0'; + io_writeEnable <= '0'; + io_readEnable <= '0'; + decodedOpcode <= (others => '0'); + memAWrite <= (others => '0'); + memBWrite <= (others => '0'); + opcode <= (others => '0'); + io_addr <= (others => '0'); + io_write <= (others => '0'); + elsif (clk'event and clk = '1') then + memAWriteEnable <= '0'; + memBWriteEnable <= '0'; + + io_writeEnable <= '0'; + io_readEnable <= '0'; + begin_inst <= '0'; + + case state is + when State_Decode => + nextPC:=pc+1; + case pc(1 downto 0) is + when "00" => tOpcode := memARead(31 downto 24); + when "01" => tOpcode := memARead(23 downto 16); + when "10" => tOpcode := memARead(15 downto 8); + when others => tOpcode := memARead(7 downto 0); + end case; + case nextPC(1 downto 0) is + when "00" => tOpcode2 := memBRead(31 downto 24); + when "01" => tOpcode2 := memBRead(23 downto 16); + when "10" => tOpcode2 := memBRead(15 downto 8); + when others => tOpcode2 := memBRead(7 downto 0); + end case; + idim_flag <= tOpcode(7); + opcode <= tOpcode; + opcode2 <= tOpcode2; + if (tOpcode(7 downto 7)=OpCode_Im and tOpcode2(7 downto 4)=0 and tOpcode2(3 downto 0)=Opcode_Add and idim_flag='0') then + idim_flag <= '0'; + decodedOpcode <= Decoded_AddIm; + nextPC := pc + 2; + elsif (tOpcode(7 downto 7)=OpCode_Im and tOpcode2(7 downto 7)=OpCode_Im and idim_flag='0') then + decodedOpcode <= Decoded_DoubleIm; + nextPC := pc + 2; + elsif (tOpcode(7 downto 4)=OpCode_AddSP and tOpcode(3 downto 0)=0 and + tOpcode2(7 downto 4)=OpCode_AddSP and tOpcode2(3 downto 0)=0) then + decodedOpcode <= Decoded_Lshift2; + nextPC := pc + 2; + elsif (tOpcode(7 downto 7)=OpCode_Im) then + if (idim_flag='1') then + decodedOpcode<=Decoded_ImShift; + else + decodedOpcode<=Decoded_Im; + end if; + elsif (tOpcode(7 downto 5)=OpCode_StoreSP) then + decodedOpcode<=Decoded_StoreSP; + elsif (tOpcode(7 downto 5)=OpCode_LoadSP) then + decodedOpcode<=Decoded_LoadSP; + elsif (tOpcode(7 downto 5)=OpCode_Emulate) then + if tOpcode(5 downto 0)=OpCode_Eqbranch then + decodedOpcode <= Decoded_Eqbranch; + elsif tOpcode(5 downto 0)=OpCode_Neqbranch then + decodedOpcode <= Decoded_Neqbranch; + elsif tOpcode(5 downto 0)=OpCode_Eq then + decodedOpcode <= Decoded_Eq; + elsif tOpcode(5 downto 0)=OpCode_Neq then + decodedOpcode <= Decoded_Neq; + elsif tOpcode(5 downto 0)=OpCode_Lessthan then + decodedOpcode <= Decoded_Lessthan; + elsif tOpcode(5 downto 0)=OpCode_Lessthanorequal then + decodedOpcode <= Decoded_Lessthanorequal; + elsif tOpcode(5 downto 0)=OpCode_Ulessthan then + decodedOpcode <= Decoded_Ulessthan; + elsif tOpcode(5 downto 0)=OpCode_Ulessthanorequal then + decodedOpcode <= Decoded_Ulessthanorequal; + elsif tOpcode(5 downto 0)=OpCode_Loadb then + decodedOpcode <= Decoded_Loadb; + elsif tOpcode(5 downto 0)=OpCode_Storeb then + decodedOpcode <= Decoded_Storeb; + elsif tOpcode(5 downto 0)=OpCode_Mult16x16 then + decodedOpcode <= Decoded_Mult16x16; + elsif tOpcode(5 downto 0)=OpCode_Swap then + decodedOpcode <= Decoded_Swap; + elsif tOpcode(5 downto 0)=OpCode_Callpcrel then + decodedOpcode <= Decoded_Callpcrel; + elsif tOpcode(5 downto 0)=OpCode_Pushspadd then + decodedOpcode <= Decoded_Pushspadd; +-- elsif tOpcode(5 downto 0)=OpCode_Lshiftright then +-- decodedOpcode <= Decoded_Lshiftright; +-- elsif tOpcode(5 downto 0)=OpCode_Ashiftleft then +-- decodedOpcode <= Decoded_Ashiftleft; +-- elsif tOpcode(5 downto 0)=OpCode_Ashiftright then +-- decodedOpcode <= Decoded_Ashiftright; + else + decodedOpcode<=Decoded_Emulate; + end if; + elsif (tOpcode(7 downto 4)=OpCode_AddSP) then + decodedOpcode<=Decoded_AddSP; + else + case tOpcode(3 downto 0) is + when OpCode_Break => + decodedOpcode<=Decoded_Break; + when OpCode_PushPC => + decodedOpcode<=Decoded_PushPC; + when OpCode_PushSP => + decodedOpcode<=Decoded_PushSP; + when OpCode_PopPC => + decodedOpcode<=Decoded_PopPC; + when OpCode_Add => + decodedOpcode<=Decoded_Add; + when OpCode_Or => + decodedOpcode<=Decoded_Or; + when OpCode_And => + decodedOpcode<=Decoded_And; + when OpCode_Load => + decodedOpcode<=Decoded_Load; + when OpCode_Not => + decodedOpcode<=Decoded_Not; + when OpCode_Flip => + decodedOpcode<=Decoded_Flip; + when OpCode_Store => + decodedOpcode<=Decoded_Store; + when OpCode_PopSP => + decodedOpcode<=Decoded_PopSP; + when others => + decodedOpcode<=Decoded_Nop; + end case; + end if; + -- Fetch the two next opcodes... :-) + memAAddr <= nextPC(maxAddrBit downto minAddrBit); + nextPC:=nextPC+1; + memBAddr <= nextPC(maxAddrBit downto minAddrBit); + state <= State_Execute; + when State_Execute => + state <= State_Decode; + -- at this point: + -- memBRead contains opcode word + -- memARead contains top of stack + pc <= pc + 1; + + -- trace + begin_inst <= '1'; + trace_pc <= pc; + trace_opcode <= opcode; + trace_sp <= sp; + trace_topOfStack <= memARead; + + -- during the next cycle we'll be reading the next opcode + spOffset(4):=not opcode(4); + spOffset(3 downto 0):=opcode(3 downto 0); + spOffset2(4):=not opcode2(4); + spOffset2(3 downto 0):=opcode2(3 downto 0); + + case decodedOpcode is + + when Decoded_DoubleIm => + memAWriteEnable <= '1'; + sp <= sp - 1; + memAAddr <= sp-1; + for i in wordSize-1 downto 14 loop + memAWrite(i) <= opcode(6); + end loop; + memAWrite(13 downto 7) <= opcode(6 downto 0); + memAWrite(6 downto 0) <= opcode2(6 downto 0); + memBAddr <= sp; + memBWrite <= memARead; + memBWriteEnable <= '1'; + pc <= pc + 2; + when Decoded_Im => + memAWriteEnable <= '1'; + sp <= sp - 1; + memAAddr <= sp-1; + for i in wordSize-1 downto 7 loop + memAWrite(i) <= opcode(6); + end loop; + memAWrite(6 downto 0) <= opcode(6 downto 0); + memBAddr <= sp; + memBWrite <= memARead; + memBWriteEnable <= '1'; + when Decoded_ImShift => + memAAddr <= sp; + memAWriteEnable <= '1'; + memAWrite(wordSize-1 downto 7) <= memARead(wordSize-8 downto 0); + memAWrite(6 downto 0) <= opcode(6 downto 0); + memBAddr <= sp + 1; + when Decoded_StoreSP => + memAWriteEnable <= '1'; + memAAddr <= sp+spOffset; + memAWrite <= memARead; + -- avoid address crashes. + memBAddr <= sp - 1; + sp <= sp + 1; + state <= State_ResyncDecode; + when Decoded_LoadSP => + sp <= sp - 1; + if (spOffset = 0) then + -- This is a duplicate instruction. + memAAddr <= sp-1; + memAWriteEnable <= '1'; + memAWrite <= memARead; + else + memAAddr <= sp+spOffset; + end if; + memBAddr <= sp; + memBWrite <= memARead; + memBWriteEnable <= '1'; + when Decoded_Callpcrel => + memAWriteEnable <= '1'; + memAAddr <= sp; + memAWrite <= (others => DontCareValue); + memAWrite(maxAddrBit downto 0) <= pc + 1; + memBAddr <= sp+1; + pc <= pc + memARead(maxAddrBit downto 0); + state <= State_ResyncDecode; + when Decoded_Emulate => + sp <= sp - 1; + memAWriteEnable <= '1'; + memAAddr <= sp - 1; + memAWrite <= (others => DontCareValue); + memAWrite(maxAddrBit downto 0) <= pc; + memBAddr <= sp; + memBWrite <= memARead; + memBWriteEnable <= '1'; + -- The emulate address is: + -- 98 7654 3210 + -- 0000 00aa aaa0 0000 + pc <= (others => '0'); + pc(9 downto 5) <= opcode(4 downto 0); + state <= State_ResyncDecode; + when Decoded_AddSP => + if spOffset=0 then + -- avoid address line crashes... + -- FIX!!! is this an issue? + -- oh-well. While we are at it, we've got a faster + -- shift operation without updating the toolchain. + memAWriteEnable <= '1'; + memAAddr <= sp; + memAWrite <= memARead + memARead; + memBAddr <= sp+1; + else + memAWriteEnable <= '1'; + memAAddr <= sp; + memAWrite <= memARead; + memBAddr <= sp+spOffset; + state <= State_AddSP; + end if; + when Decoded_Break => + report "Break instruction encountered" severity failure; + break <= '1'; + when Decoded_PushPC => + memAWriteEnable <= '1'; + memAAddr <= sp - 1; + sp <= sp - 1; + memAWrite <= (others => DontCareValue); + memAWrite(maxAddrBit downto 0) <= pc; + memBAddr <= sp; + memBWrite <= memARead; + memBWriteEnable <= '1'; + when Decoded_PushSP => + memAWriteEnable <= '1'; + memAAddr <= sp - 1; + sp <= sp - 1; + memAWrite <= (others => DontCareValue); + memAWrite(maxAddrBit downto minAddrBit) <= sp; + memBAddr <= sp; + memBWrite <= memARead; + memBWriteEnable <= '1'; + when Decoded_Pushspadd => + memAWriteEnable <= '1'; + memAAddr <= sp; + memAWrite <= (others => DontCareValue); + pushspaddTemp := memARead(maxAddrBit-minAddrBit downto 0); + memAWrite(maxAddrBit downto minAddrBit) <= sp+pushspaddTemp; + memBAddr <= sp+1; + when Decoded_PopPC => + memAAddr <= sp; + pc <= memARead(maxAddrBit downto 0); + sp <= sp + 1; + state <= State_ResyncDecode; + when Decoded_AddIm => + memAWriteEnable <= '1'; + memAAddr <= sp; + tempVal(wordSize-1 downto 7) := (others => tOpcode(6)); + tempVal(6 downto 0) := tOpcode(6 downto 0); + memAWrite <= memARead + tempVal; + memBAddr <= sp + 1; + pc <= pc + 2; + when Decoded_Add => + memAWriteEnable <= '1'; + memAWrite <= memARead + memBRead; + memAAddr <= sp + 1; + memBAddr <= sp + 2; + sp <= sp + 1; + when Decoded_Or => + sp <= sp + 1; + memAWriteEnable <= '1'; + memAWrite <= memARead or memBRead; + memAWriteEnable <= '1'; + memAAddr <= sp + 1; + memBAddr <= sp + 2; + when Decoded_And => + sp <= sp + 1; + memAWriteEnable <= '1'; + memAWrite <= memARead and memBRead; + memAWriteEnable <= '1'; + memAAddr <= sp + 1; + memBAddr <= sp + 2; + when Decoded_Load => + if (memARead(ioBit)='1') then + io_addr <= memARead(maxAddrBit downto minAddrBit); + io_readEnable <= '1'; + state <= State_ReadIO; + else + memAAddr <= memARead(maxAddrBit downto minAddrBit); + memBAddr <= sp + 1; + end if; + when Decoded_Swap => + memAAddr <= sp; + memAWriteEnable <= '1'; + memAWrite(wordSize/2-1 downto 0) <= memARead(wordSize-1 downto wordSize/2); + memAWrite(wordSize-1 downto wordSize/2) <= memARead(wordSize/2-1 downto 0); + memBAddr <= sp + 1; + when Decoded_Not => + memAAddr <= sp; + memAWriteEnable <= '1'; + memAWrite <= not memARead; + memBAddr <= sp + 1; + when Decoded_Flip => + memAAddr <= sp; + memAWriteEnable <= '1'; + for i in 0 to wordSize-1 loop + memAWrite(i) <= memARead(wordSize-1-i); + end loop; + memBAddr <= sp + 1; + when Decoded_Lshift2 => + memAAddr <= sp; + memAWriteEnable <= '1'; + memAWrite(1 downto 0) <= (others => '0'); + memAWrite(wordSize-1 downto 2) <= memARead(wordSize-1-2 downto 0); + memBAddr <= sp + 1; + pc <= pc + 2; + when Decoded_Store => + sp <= sp + 2; + if (memARead(ioBit)='1') then + io_writeEnable <= '1'; + io_addr <= memARead(maxAddrBit downto minAddrBit); + io_write <= memBRead(7 downto 0); + state <= State_WriteIO; + else + memAWriteEnable <= '1'; + memAAddr <= memARead(maxAddrBit downto minAddrBit); + memAWrite <= memBRead; + state <= State_ResyncDecode; + end if; + when Decoded_PopSP => + sp <= memARead(maxAddrBit downto minAddrBit); + state <= State_ResyncDecode; + when Decoded_Ashiftleft => + memAWrite(wordSize-1 downto conv_integer(memARead(wordPower-1 downto 0))) <= + memBRead(wordSize-conv_integer(memARead(wordPower-1 downto 0))-1 downto 0); + if memARead(wordPower-1 downto 0)/=0 then + memAWrite(conv_integer(memARead(wordPower-1 downto 0))-1 downto 0) <= (others => '0'); + end if; + memAWriteEnable <= '1'; + memAAddr <= sp + 1; + memBAddr <= sp + 2; + sp <= sp + 1; + when Decoded_Ashiftright | Decoded_Lshiftright => + memAWrite(wordSize-1-conv_integer(memARead(wordPower-1 downto 0)) downto 0) <= + memBRead(wordSize-1 downto conv_integer(memARead(wordPower-1 downto 0))); + if memARead(wordPower-1 downto 0)/=0 then + if decodedOpcode=Decoded_Ashiftright and memBRead(wordSize-1)='1' then + memAWrite(wordSize-1 downto wordSize-conv_integer(memARead(wordPower-1 downto 0))-1) <= (others => '1'); + else + memAWrite(wordSize-1 downto wordSize-conv_integer(memARead(wordPower-1 downto 0))-1) <= (others => '0'); + end if; + end if; + memAWriteEnable <= '1'; + memAAddr <= sp + 1; + memBAddr <= sp + 2; + sp <= sp + 1; + when Decoded_Eqbranch => + sp <= sp + 2; + if (memBRead=0) then + pc <= memARead(maxAddrBit downto 0) + pc; + end if; + state <= State_ResyncDecode; + when Decoded_Neqbranch => + sp <= sp + 2; + if (memBRead/=0) then + pc <= memARead(maxAddrBit downto 0) + pc; + end if; + state <= State_ResyncDecode; + when Decoded_Eq => + sp <= sp + 1; + memAWrite <= (others => '0'); + if (memARead=memBRead) then + memAWrite(0) <= '1'; + end if; + memAAddr <= sp + 1; + memAWriteEnable <= '1'; + memBAddr <= sp + 2; + when Decoded_Neq => + sp <= sp + 1; + memAWrite <= (others => '0'); + if (memARead/=memBRead) then + memAWrite(0) <= '1'; + end if; + memAAddr <= sp + 1; + memAWriteEnable <= '1'; + memBAddr <= sp + 2; + when Decoded_Ulessthan => + sp <= sp + 1; + memAWrite <= (others => '0'); + if (memARead + sp <= sp + 1; + memAWrite <= (others => '0'); + if (memARead<=memBRead) then + memAWrite(0) <= '1'; + end if; + memAAddr <= sp + 1; + memAWriteEnable <= '1'; + memBAddr <= sp + 2; + when Decoded_Lessthan => + sp <= sp + 1; + memAWrite <= (others => '0'); + compareA := signed(memARead); + compareB := signed(memBRead); + if (compareA + sp <= sp + 1; + memAWrite <= (others => '0'); + compareA := signed(memARead); + compareB := signed(memBRead); + if (compareA<=compareB) then + memAWrite(0) <= '1'; + end if; + memAAddr <= sp + 1; + memAWriteEnable <= '1'; + memBAddr <= sp + 2; + when Decoded_Loadb => + byteSelect <= memARead(minAddrBit-1 downto 0); + memAAddr <= memARead(maxAddrBit downto minAddrBit); + state <= State_LoadByte1; + when Decoded_Storeb => + sp <= sp + 2; + byteSelect <= memARead(minAddrBit-1 downto 0); + storeByte <= memBRead(7 downto 0); + memAAddr <= memARead(maxAddrBit downto minAddrBit); + memBAddr <= sp; + state <= State_StoreByte1; + when Decoded_Mult16x16 => + mult1 <= memARead(wordSize/2-1 downto 0); + mult2 <= memBRead(wordSize/2-1 downto 0); + sp <= sp + 1; + state <= State_Mult1; + when others => + -- nop. Here we persist whatever was loaded into + -- memARead + memAAddr <= sp; + memAWriteEnable <= '1'; + memAWrite <= memARead; + memBAddr <= sp + 1; + + end case; + when State_ReadIO => + state <= State_ReadIODone; + when State_ReadIODone => + if (io_busy = '0') then + state <= State_ResyncDecode; + memAWriteEnable <= '1'; + memAWrite <= (others => '0'); + memAWrite(7 downto 0) <= io_read; + memAAddr <= sp; + end if; + when State_WriteIO => + state <= State_WriteIODone; + when State_WriteIODone => + if (io_busy = '0') then + state <= State_ResyncDecode; + end if; + when State_ResyncDecode => + memAAddr <= pc(maxAddrBit downto minAddrBit); + nextPC:=pc+1; + memBAddr <= nextPC(maxAddrBit downto minAddrBit); + state <= State_ResyncStack; + when State_ResyncStack => + memAAddr <= sp; + memBAddr <= sp+1; + state <= State_Decode; + when State_AddSP => + memAAddr <= pc(maxAddrBit downto minAddrBit); + nextPC:=pc+1; + memBAddr <= nextPC(maxAddrBit downto minAddrBit); + state <= State_Add; + when State_Add => + memAWriteEnable <= '1'; + memAWrite <= memARead + memBRead; + memAAddr <= sp; + memBAddr <= sp + 1; + state <= State_Decode; + when State_LoadByte1 => + memAAddr <= pc(maxAddrBit downto minAddrBit); + nextPC:=pc+1; + memBAddr <= nextPC(maxAddrBit downto minAddrBit); + state <= State_LoadByte2; + when State_LoadByte2 => + memAWriteEnable <= '1'; + memAAddr <= sp; + memAWrite <= (others => '0'); + case byteSelect is + when "00" => memAWrite(7 downto 0) <= memARead(31 downto 24); + when "01" => memAWrite(7 downto 0) <= memARead(23 downto 16); + when "10" => memAWrite(7 downto 0) <= memARead(15 downto 8); + when others => memAWrite(7 downto 0) <= memARead(7 downto 0); + end case; + memBAddr <= sp + 1; + state <= State_Decode; + when State_StoreByte1 => + state <= State_StoreByte2; + when State_StoreByte2 => + memAWriteEnable <= '1'; + memAAddr <= memBRead(maxAddrBit downto minAddrBit); + memAWrite <= memARead; + case byteSelect is + when "00" => memAWrite(31 downto 24) <= storeByte; + when "01" => memAWrite(23 downto 16) <= storeByte; + when "10" => memAWrite(15 downto 8) <= storeByte; + when others => memAWrite(7 downto 0) <= storeByte; + end case; + state <= State_ResyncDecode; + when State_Mult1 => + memAAddr <= pc(maxAddrBit downto minAddrBit); + nextPC:=pc+1; + memBAddr <= nextPC(maxAddrBit downto minAddrBit); + state <= State_Mult2; + when State_Mult2 => + memAWriteEnable <= '1'; + memAWrite <= multResult; + memAAddr <= sp; + memBAddr <= sp + 1; + state <= State_Decode; + + when others => + null; + end case; + end if; + end process; + + + +end behave; diff --git a/zpu/hdl/zpu3/src/zpuio.vhd b/zpu/hdl/zpu3/src/zpuio.vhd new file mode 100644 index 0000000..96e9aea --- /dev/null +++ b/zpu/hdl/zpu3/src/zpuio.vhd @@ -0,0 +1,180 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +library zylin; +use zylin.arm7.all; + +library zylin; +use zylin.zpu_config.all; +use zylin.zpupkg.all; + +entity zpuio is + port ( areset : in std_logic; + cpu_clk : in std_logic; + clk_status : in std_logic_vector(2 downto 0); + cpu_din : in std_logic_vector(15 downto 0); + cpu_a : in std_logic_vector(20 downto 0); + cpu_we : in std_logic_vector(1 downto 0); + cpu_re : in std_logic; + cpu_dout : inout std_logic_vector(15 downto 0)); +end zpuio; + +architecture behave of zpuio is + +signal timer_read : std_logic_vector(7 downto 0); +--signal timer_write : std_logic_vector(7 downto 0); +signal timer_we : std_logic; + + +signal io_busy : std_logic; +signal io_read : std_logic_vector(7 downto 0); +signal io_write : std_logic_vector(7 downto 0); +signal io_addr : std_logic_vector(maxAddrBit downto minAddrBit); +signal io_writeEnable : std_logic; +signal io_readEnable : std_logic; + +signal din : std_logic_vector(7 downto 0); +signal dout : std_logic_vector(7 downto 0); +signal adr : std_logic_vector(15 downto 0); +signal break : std_logic; +signal we : std_logic; +signal re : std_logic; + + +-- uart forwarding... + +signal uartTXPending : std_logic; +signal uartTXCleared : std_logic; +signal uartData : std_logic_vector(7 downto 0); + +signal readingTimer : std_logic; +begin + + timerinst: timer port map ( + clk => cpu_clk, + areset => areset, + we => timer_we, + din => io_write, + adr => io_addr(4 downto 2), + dout => timer_read); + + zpu: zpu_top port map ( + clk => cpu_clk , + areset => areset, + io_busy => io_busy, + io_writeEnable => io_writeEnable, + io_readEnable => io_readEnable, + io_write => io_write, + io_read => io_read, + io_addr => io_addr, + interrupt => '0' + --, +-- break => cpu_fiq_p +); + + + -- Read/write are on different addresses + -- The registers are 8 bits and mapped to bit[7:0] + -- + -- 0xC000 Write: Writes to UART TX FIFO (4 byte FIFO) + -- Read : Reads from UART RX FIFO (4 byte FIFO) + -- 0xC004 Read : UART status register + -- Bit 0 = RX FIFO empty + -- Bit 1 = TX FIFO full + -- 0xA000 Skrive: LED's (8 stk.) + + -- 0x9000 Write: bit 0: 1= reset counter + -- 0= counter running + -- bit 1: 1= sample counter (when set to 1) + -- 0=not used + -- Read : counter bit[7:0] + -- 0x9004 Read: counter bit [15:8] + -- 0x9008 Read: counter bit [23:16] + -- 0x900C Read: counter bit [31:24] + -- 0x9010 Read: counter bit [39:32] + -- 0x9014 Read: counter bit [47:40] + -- 0x9018 Read: counter bit [55:48] + -- 0x901C Read: counter bit [63:56] + -- + -- 0x8800 Read: unsigned 8-bit integer with FPGA frequency (in MHz) + + fauxUart: + process(cpu_clk, areset) + begin + if areset = '1' then + io_busy <= '0'; + uartTXPending <= '0'; + timer_we <= '0'; + io_busy <= '1'; + uartData <= x"58"; -- 'X' + readingTimer <= '0'; + elsif (cpu_clk'event and cpu_clk = '1') then + timer_we <= '0'; + io_busy <= '1'; + if uartTXCleared = '1' then + uartTXPending <= '0'; + end if; + + if io_writeEnable = '1' then + if io_addr=x"1000" then + -- Write to UART + uartData <= io_write; + uartTXPending <= '1'; + io_busy <= '0'; + elsif io_addr(12)='1' then + timer_we <= '1'; + io_busy <= '0'; + else + report "Illegal IO write" severity failure; + end if; + end if; + if (io_readEnable = '1') then + if io_addr=x"1001" then + io_read <= (0=>'1', -- recieve empty + 1 => uartTXPending, -- tx full + others => '0'); + io_busy <= '0'; + elsif io_addr(12)='1' then + readingTimer <= '1'; + io_busy <= '1'; + elsif io_addr(11)='1' then + io_read <= ZPU_Frequency; + io_busy <= '0'; + else + report "Illegal IO read" severity failure; + end if; + + else + if (readingTimer = '1') then + readingTimer <= '0'; + io_read <= timer_read; + io_busy <= '0'; + else + io_read <= (others => '1'); + end if; + end if; + end if; + end process; + + + forwardUARTOutputToARM: + process(cpu_clk, areset) + begin + if areset = '1' then + uartTXCleared <= '0'; + elsif (cpu_clk = '1' and cpu_clk'event) then + if cpu_we(0) = '1' and cpu_a(3 downto 1) = "000" then + uartTXCleared <= cpu_din(0); + else + uartTXCleared <= uartTXCleared; + end if; + end if; + end process; + + cpu_dout(7 downto 0) <= uartData when (cpu_re = '1' and cpu_a(3 downto 1) = "001") else (others => 'Z'); + cpu_dout <= (0 => uartTXPending, others => '0') when (cpu_re = '1' and cpu_a(3 downto 1) = "000") else (others => 'Z'); + + + +end behave; diff --git a/zpu/hdl/zpu3/src/zpupkg.vhd b/zpu/hdl/zpu3/src/zpupkg.vhd new file mode 100644 index 0000000..a904b11 --- /dev/null +++ b/zpu/hdl/zpu3/src/zpupkg.vhd @@ -0,0 +1,130 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_ARITH.all; + +library zylin; +use zylin.zpu_config.all; + +package zpupkg is + + component dualport_ram is + port (clk : in std_logic; + memAWriteEnable : in std_logic; + memAAddr : in std_logic_vector(maxAddrBit downto minAddrBit); + memAWrite : in std_logic_vector(wordSize-1 downto 0); + memARead : out std_logic_vector(wordSize-1 downto 0); + memBWriteEnable : in std_logic; + memBAddr : in std_logic_vector(maxAddrBit downto minAddrBit); + memBWrite : in std_logic_vector(wordSize-1 downto 0); + memBRead : out std_logic_vector(wordSize-1 downto 0)); + end component; + + + component trace is + port( + clk : in std_logic; + begin_inst : in std_logic; + pc : in std_logic_vector(maxAddrBit downto 0); + opcode : in std_logic_vector(7 downto 0); + sp : in std_logic_vector(maxAddrBit downto minAddrBit); + memA : in std_logic_vector(wordSize-1 downto 0); + memB : in std_logic_vector(wordSize-1 downto 0); + busy : in std_logic + ); + end component; + + component zpu_top is + Port ( clk : in std_logic; + areset : in std_logic; + io_busy : in std_logic; + io_read : in std_logic_vector(7 downto 0); + io_write : out std_logic_vector(7 downto 0); + io_addr : out std_logic_vector(maxAddrBit downto minAddrBit); + io_writeEnable : out std_logic; + io_readEnable : out std_logic; + interrupt : in std_logic; + break : out std_logic); + end component; + + + component timer is + port( + clk : in std_logic; + areset : in std_logic; + we : in std_logic; + din : in std_logic_vector(7 downto 0); + adr : in std_logic_vector(2 downto 0); + dout : out std_logic_vector(7 downto 0)); + end component; + + + component zpuio is + port ( areset : in std_logic; + cpu_clk : in std_logic; + clk_status : in std_logic_vector(2 downto 0); + cpu_din : in std_logic_vector(15 downto 0); + cpu_a : in std_logic_vector(20 downto 0); + cpu_we : in std_logic_vector(1 downto 0); + cpu_re : in std_logic; + cpu_dout : inout std_logic_vector(15 downto 0)); + end component; + + + -- opcode decode constants + constant OpCode_Im : std_logic_vector(7 downto 7) := "1"; + constant OpCode_StoreSP : std_logic_vector(7 downto 5) := "010"; + constant OpCode_LoadSP : std_logic_vector(7 downto 5) := "011"; + constant OpCode_Emulate : std_logic_vector(7 downto 5) := "001"; + constant OpCode_AddSP : std_logic_vector(7 downto 4) := "0001"; + constant OpCode_Short : std_logic_vector(7 downto 4) := "0000"; + + constant OpCode_Break : std_logic_vector(3 downto 0) := "0000"; + constant OpCode_Shiftleft: std_logic_vector(3 downto 0) := "0001"; + constant OpCode_PushSP : std_logic_vector(3 downto 0) := "0010"; + constant OpCode_PushInt : std_logic_vector(3 downto 0) := "0011"; + + constant OpCode_PopPC : std_logic_vector(3 downto 0) := "0100"; + constant OpCode_Add : std_logic_vector(3 downto 0) := "0101"; + constant OpCode_And : std_logic_vector(3 downto 0) := "0110"; + constant OpCode_Or : std_logic_vector(3 downto 0) := "0111"; + + constant OpCode_Load : std_logic_vector(3 downto 0) := "1000"; + constant OpCode_Not : std_logic_vector(3 downto 0) := "1001"; + constant OpCode_Flip : std_logic_vector(3 downto 0) := "1010"; + constant OpCode_Nop : std_logic_vector(3 downto 0) := "1011"; + + constant OpCode_Store : std_logic_vector(3 downto 0) := "1100"; + constant OpCode_PopSP : std_logic_vector(3 downto 0) := "1101"; + constant OpCode_Compare : std_logic_vector(3 downto 0) := "1110"; + constant OpCode_PopInt : std_logic_vector(3 downto 0) := "1111"; + + constant OpCode_Lessthan : std_logic_vector(5 downto 0) := conv_std_logic_vector(36, 6); + constant OpCode_Lessthanorequal : std_logic_vector(5 downto 0) := conv_std_logic_vector(37, 6); + constant OpCode_Ulessthan : std_logic_vector(5 downto 0) := conv_std_logic_vector(38, 6); + constant OpCode_Ulessthanorequal : std_logic_vector(5 downto 0) := conv_std_logic_vector(39, 6); + + constant OpCode_Swap : std_logic_vector(5 downto 0) := conv_std_logic_vector(40, 6); + + constant OpCode_Lshiftright : std_logic_vector(5 downto 0) := conv_std_logic_vector(42, 6); + constant OpCode_Ashiftleft : std_logic_vector(5 downto 0) := conv_std_logic_vector(43, 6); + constant OpCode_Ashiftright : std_logic_vector(5 downto 0) := conv_std_logic_vector(44, 6); + + constant OpCode_Eq : std_logic_vector(5 downto 0) := conv_std_logic_vector(46, 6); + constant OpCode_Neq : std_logic_vector(5 downto 0) := conv_std_logic_vector(47, 6); + + constant OpCode_Sub : std_logic_vector(5 downto 0) := conv_std_logic_vector(49, 6); + constant OpCode_Loadb : std_logic_vector(5 downto 0) := conv_std_logic_vector(51, 6); + constant OpCode_Storeb : std_logic_vector(5 downto 0) := conv_std_logic_vector(52, 6); + + constant OpCode_Eqbranch : std_logic_vector(5 downto 0) := conv_std_logic_vector(55, 6); + constant OpCode_Neqbranch : std_logic_vector(5 downto 0) := conv_std_logic_vector(56, 6); + + constant OpCode_Pushspadd : std_logic_vector(5 downto 0) := conv_std_logic_vector(61, 6); + constant OpCode_Mult16x16 : std_logic_vector(5 downto 0) := conv_std_logic_vector(62, 6); + constant OpCode_Callpcrel : std_logic_vector(5 downto 0) := conv_std_logic_vector(63, 6); + + + + constant OpCode_Size : integer := 8; + +end zpupkg; diff --git a/zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7pkg.vhd b/zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7pkg.vhd new file mode 100644 index 0000000..95fbc18 --- /dev/null +++ b/zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7pkg.vhd @@ -0,0 +1,31 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +package arm7 is + + component arm7wb + generic( + simulate_io_time : boolean := false); + port ( areset : in std_logic; + cpu_clk : in std_logic; + cpu_clk_2x : in std_logic; + cpu_a_p : in std_logic_vector(20 downto 0); + cpu_wr_n_p : in std_logic_vector(1 downto 0); + cpu_cs_n_p : in std_logic_vector(3 downto 1); + cpu_oe_n_p : in std_logic; + cpu_d_p : inout std_logic_vector(15 downto 0); + cpu_irq_p : out std_logic_vector(1 downto 0); + cpu_fiq_p : out std_logic; + cpu_wait_n_p : out std_logic; + + cpu_din : out std_logic_vector(15 downto 0); + cpu_a : out std_logic_vector(20 downto 0); + cpu_we : out std_logic_vector(1 downto 0); + cpu_re : out std_logic; + cpu_dout : in std_logic_vector(15 downto 0)); + end component; + +end arm7; + + \ No newline at end of file diff --git a/zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7wb.vhd b/zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7wb.vhd new file mode 100644 index 0000000..55b8125 --- /dev/null +++ b/zpu/hdl/zpu4/dummyfpgalib/arm7/src/arm7wb.vhd @@ -0,0 +1,213 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +entity arm7wb is + generic( + simulate_io_time : boolean := false); + port ( areset : in std_logic; + cpu_clk : in std_logic; + cpu_clk_2x : in std_logic; + cpu_a_p : in std_logic_vector(20 downto 0); + cpu_wr_n_p : in std_logic_vector(1 downto 0); + cpu_cs_n_p : in std_logic_vector(3 downto 1); + cpu_oe_n_p : in std_logic; + cpu_d_p : inout std_logic_vector(15 downto 0); + cpu_irq_p : out std_logic_vector(1 downto 0); + cpu_fiq_p : out std_logic; + cpu_wait_n_p : out std_logic; + + cpu_din : out std_logic_vector(15 downto 0); + cpu_a : out std_logic_vector(20 downto 0); + cpu_we : out std_logic_vector(1 downto 0); + cpu_re : out std_logic; + cpu_dout : in std_logic_vector(15 downto 0)); +end arm7wb; + +architecture behave of arm7wb is + +attribute keep : string; + +signal cpu_oe_n : std_logic; +signal cpu_fiq : std_logic; +signal cpu_wait_n : std_logic; +signal cpu_clk_toggle : std_logic; +signal cpu_clk_smp1 : std_logic; +signal cpu_clk_smp2 : std_logic; +signal cpu_clk_phase : std_logic; +signal cpu_oe_n_del : std_logic; +signal cpu_a_smp : std_logic_vector(20 downto 0); +signal cpu_d_smp : std_logic_vector(15 downto 0); + +signal int_oe_n : std_logic_vector(15 downto 0); +attribute keep of int_oe_n:signal is "true"; + +signal cpu_irq : std_logic_vector(1 downto 0); +signal cpu_wr_n : std_logic_vector(1 downto 0); +signal cpu_cs_n : std_logic_vector(3 downto 1); + +signal dout : std_logic_vector(15 downto 0); +signal cpu_d_p_out : std_logic_vector(15 downto 0); +signal read_cnt : std_logic_vector(1 downto 0); + +signal cpu_wr_n_p_del : std_logic_vector(1 downto 0); +signal cpu_a_p_del : std_logic_vector(20 downto 0); +signal cpu_d_p_del : std_logic_vector(15 downto 0); +signal cpu_cs_n_p_del : std_logic_vector(3 downto 1); +signal cpu_oe_n_p_del : std_logic; + +constant Sim_Delay : time := 0.5 ns; +constant Clock_2_Out : time := 5.5 ns; +constant Input_Setup : time := 2.5 ns; + +begin + + cpu_wait_n <= '1'; + cpu_fiq <= '1'; + cpu_irq <= "11"; + + iotimingon: + if simulate_io_time generate + begin + cpu_wr_n_p_del <= "XX" after 0 ns, cpu_wr_n_p after Input_Setup; + cpu_a_p_del <= "XXXXXXXXXXXXXXXXXXXXX" after 0 ns, cpu_a_p after Input_Setup; + cpu_d_p_del <= "XXXXXXXXXXXXXXXX" after 0 ns, cpu_d_p after Input_Setup; + cpu_cs_n_p_del <= "XXX" after 0 ns, cpu_cs_n_p after Input_Setup; + cpu_oe_n_p_del <= 'X' after 0 ns, cpu_oe_n_p after Input_Setup; + end generate; + + iotimingoff: + if not simulate_io_time generate + begin + cpu_wr_n_p_del <= cpu_wr_n_p; + cpu_a_p_del <= cpu_a_p; + cpu_d_p_del <= cpu_d_p; + cpu_cs_n_p_del <= cpu_cs_n_p; + cpu_oe_n_p_del <= cpu_oe_n_p; + end generate; + + process(cpu_clk, areset) -- Toggle FF with 1x clock to find phase + begin + if areset = '1' then + cpu_clk_toggle <= '0'; + elsif (cpu_clk'event and cpu_clk = '1') then + cpu_clk_toggle <= not(cpu_clk_toggle); + end if; + end process; + + process(cpu_clk_2x, areset) -- Find phase relationsship between 1x and 2x clock + begin + if areset = '1' then + cpu_clk_smp1 <= '0'; + cpu_clk_smp2 <= '1'; + cpu_clk_phase <= '0'; + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + cpu_clk_smp1 <= cpu_clk_toggle; + cpu_clk_smp2 <= cpu_clk_smp1; + if cpu_clk_smp1 = '1' and cpu_clk_smp2 = '0' then + cpu_clk_phase <= '0' after Sim_Delay; + else + cpu_clk_phase <= not(cpu_clk_phase) after Sim_Delay; + end if; + end if; + end process; + + process(cpu_clk_2x, areset) -- Sample input signals + begin + if areset = '1' then + cpu_oe_n <= '1'; + cpu_a_smp <= "000000000000000000000"; + cpu_d_smp <= "0000000000000000"; + cpu_wr_n <= "11"; + cpu_cs_n <= "111"; + elsif (cpu_clk_2x = '1' and cpu_clk_2x'event) then + cpu_oe_n <= cpu_oe_n_p_del after Sim_Delay; + cpu_a_smp <= cpu_a_p_del after Sim_Delay; + cpu_d_smp <= cpu_d_p_del after Sim_Delay; + cpu_wr_n <= cpu_wr_n_p_del after Sim_Delay; + cpu_cs_n <= cpu_cs_n_p_del after Sim_Delay; + end if; + end process; + + cpu_d_out: + for i in 0 to 15 generate + begin + process(cpu_clk_2x, areset) + begin + if areset = '1' then + cpu_d_p(i) <= 'Z'; + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + if int_oe_n(i) = '0' then + cpu_d_p(i) <= cpu_d_p_out(i) after Clock_2_Out; + else + cpu_d_p(i) <= 'Z' after Clock_2_Out; + end if; + end if; + end process; + end generate; + + process(cpu_clk, areset) -- Clocked output pins + begin + if areset = '1' then + cpu_d_p_out <= "1111111111111111"; + cpu_wait_n_p <= '1'; + cpu_irq_p <= "11"; + cpu_fiq_p <= '1'; + elsif (cpu_clk = '1' and cpu_clk'event) then + cpu_d_p_out <= cpu_dout; + cpu_wait_n_p <= '1'; + cpu_irq_p <= "11"; + cpu_fiq_p <= '1'; + end if; + end process; + + process(cpu_clk, areset) -- Generate control signals + begin + if areset = '1' then + int_oe_n <= "1111111111111111"; + read_cnt <= "00"; + cpu_we <= "00"; + cpu_re <= '0'; + cpu_a <= "000000000000000000000"; + cpu_din <= "0000000000000000"; + elsif (cpu_clk = '1' and cpu_clk'event) then + + cpu_a <= cpu_a_smp; + cpu_din <= cpu_d_smp; + + cpu_oe_n_del <= cpu_oe_n; + + if cpu_cs_n(1) = '1' then + read_cnt <= "00"; + else + read_cnt <= read_cnt + '1'; + end if; + + if read_cnt = "01" and cpu_cs_n(1) = '0' and cpu_wr_n(0) = '0' then + cpu_we(0) <= '1'; + else + cpu_we(0) <= '0'; + end if; + + if read_cnt = "01" and cpu_cs_n(1) = '0' and cpu_wr_n(1) = '0' then + cpu_we(1) <= '1'; + else + cpu_we(1) <= '0'; + end if; + + if read_cnt = "00" and cpu_cs_n(1) = '0' and cpu_oe_n = '0' then + cpu_re <= '1'; + else + cpu_re <= '0'; + end if; + + if read_cnt = "01" and cpu_cs_n(1) = '0' and cpu_oe_n = '0' then + int_oe_n <= "0000000000000000"; + else + int_oe_n <= "1111111111111111"; + end if; + + end if; + end process; + +end behave; diff --git a/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/simscripts/ddr_tb.do b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/simscripts/ddr_tb.do new file mode 100644 index 0000000..d2c22cf --- /dev/null +++ b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/simscripts/ddr_tb.do @@ -0,0 +1,17 @@ +vlib zylin +vcom -93 -explicit -work zylin ../ddrsdram/src/ddr_pkg.vhd +vcom -93 -explicit -work zylin ../ddrsdram/src/ddr_top.vhd +vcom -93 -explicit -work zylin ../ddrsdram/src/mt46v16m16.vhd +vcom -93 -explicit -work zylin ../ddrsdram/src/ddr_tb.vhd +vlib work +vsim -t 1ps zylin.ddr_tb +view wave +view signals +radix hex +add wave * +add wave sim:/ddr_tb/ddr_ctrl/* +force -freeze sim:/ddr_tb/areset 1 0 +run 10 ns +force -freeze sim:/ddr_tb/areset 0 0 +when sim:/ddr_tb/break_out stop +run 10 ms \ No newline at end of file diff --git a/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/simscripts/ddr_top.do b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/simscripts/ddr_top.do new file mode 100644 index 0000000..31dd294 --- /dev/null +++ b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/simscripts/ddr_top.do @@ -0,0 +1,111 @@ +vlib zylin +vcom -93 -explicit -work zylin ../ddrsdram/src/ddr_pkg.vhd +vcom -93 -explicit -work zylin ../ddrsdram/src/ddr_top.vhd +vlib work +vsim -t 1ps zylin.ddr_top +view wave +view signals +radix hex +# Add wave signals + +add wave -divider "System" +add wave sim:/ddr_top/areset +add wave sim:/ddr_top/cpu_clk +add wave sim:/ddr_top/cpu_clk_2x +add wave sim:/ddr_top/cpu_clk_4x +add wave sim:/ddr_top/ddr_in_clk +add wave sim:/ddr_top/ddr_in_clk_2x + +add wave -divider "Ctrl interface" +add wave sim:/ddr_top/cpu_clk +add wave sim:/ddr_top/ddr_data_read +add wave sim:/ddr_top/ddr_data_write +add wave sim:/ddr_top/ddr_req +add wave sim:/ddr_top/ddr_rd_wr_n +add wave sim:/ddr_top/ddr_req_len +add wave sim:/ddr_top/ddr_wr_mask +add wave sim:/ddr_top/ddr_read_en +add wave sim:/ddr_top/ddr_write_en +add wave sim:/ddr_top/ddr_command +add wave sim:/ddr_top/ddr_command_we + +add wave -divider "DDR interface" +add wave sim:/ddr_top/sdr_clk_p +add wave sim:/ddr_top/sdr_clk_n_p +add wave sim:/ddr_top/cke_q_p +add wave sim:/ddr_top/cs_qn_p +add wave sim:/ddr_top/ras_qn_p +add wave sim:/ddr_top/cas_qn_p +add wave sim:/ddr_top/we_qn_p +add wave sim:/ddr_top/dm_q_p +add wave sim:/ddr_top/dqs_q_p +add wave sim:/ddr_top/ba_q_p +add wave sim:/ddr_top/sdr_a_p +add wave sim:/ddr_top/sdr_d_p + +add wave -divider "Internal signals" +add wave sim:/ddr_top/clk2_phase +add wave sim:/ddr_top/clk4_phase +add wave sim:/ddr_top/ddr_state +add wave sim:/ddr_top/sdr_oe_n +add wave sim:/ddr_top/sdr_smp +add wave sim:/ddr_top/sdr_d + + +# Add input signals +force -freeze sim:/ddr_top/cpu_clk_4x 1 0, 0 {1.875 ns} -r 3.75 +run 100 ps +force -freeze sim:/ddr_top/cpu_clk_2x 1 0, 0 {3.75 ns} -r 7.5 +run 100 ps +force -freeze sim:/ddr_top/cpu_clk 1 0, 0 {7.5 ns} -r 15 +force -freeze sim:/ddr_top/ddr_in_clk 1 2ns, 0 {5.75 ns} -r 7.5 +force -freeze sim:/ddr_top/ddr_in_clk_2x 0 0.125ns, 1 {2 ns} -r 3.75 + +force -freeze sim:/ddr_top/areset 1 0 +force -freeze sim:/ddr_top/ddr_command 0000 0 +force -freeze sim:/ddr_top/ddr_command_we 0 0 +force -freeze sim:/ddr_top/ddr_data_write 1234abcd 0 +force -freeze sim:/ddr_top/ddr_req 0 0 +force -freeze sim:/ddr_top/ddr_req_adr 000000 0 +force -freeze sim:/ddr_top/ddr_rd_wr_n 0 0 +force -freeze sim:/ddr_top/ddr_req_len 000 0 +force -freeze sim:/ddr_top/ddr_wr_mask 0 0 + +# Start simulation +run 45 +force -freeze sim:/ddr_top/areset 0 0 +run 92 +# DDR Command +force -freeze sim:/ddr_top/ddr_command 000A 0 +force -freeze sim:/ddr_top/ddr_command_we 1 0 +run 15 +force -freeze sim:/ddr_top/ddr_command 0000 0 +force -freeze sim:/ddr_top/ddr_command_we 0 0 +run 90 +# DDR Read +force -freeze sim:/ddr_top/ddr_req 1 0 +force -freeze sim:/ddr_top/ddr_req_adr 00ABCD 0 +force -freeze sim:/ddr_top/ddr_rd_wr_n 1 0 +force -freeze sim:/ddr_top/ddr_req_len 000 0 +force -freeze sim:/ddr_top/ddr_wr_mask 0 0 +run 15 +force -freeze sim:/ddr_top/ddr_req 0 0 +force -freeze sim:/ddr_top/ddr_req_adr 000000 0 +force -freeze sim:/ddr_top/ddr_rd_wr_n 0 0 +force -freeze sim:/ddr_top/ddr_req_len 000 0 +force -freeze sim:/ddr_top/ddr_wr_mask 0 0 +run 150 +# DDR Write +force -freeze sim:/ddr_top/ddr_req 1 0 +force -freeze sim:/ddr_top/ddr_req_adr 00ABCD 0 +force -freeze sim:/ddr_top/ddr_rd_wr_n 0 0 +force -freeze sim:/ddr_top/ddr_req_len 000 0 +force -freeze sim:/ddr_top/ddr_wr_mask 0 0 +run 15 +force -freeze sim:/ddr_top/ddr_req 0 0 +force -freeze sim:/ddr_top/ddr_req_adr 000000 0 +force -freeze sim:/ddr_top/ddr_rd_wr_n 0 0 +force -freeze sim:/ddr_top/ddr_req_len 000 0 +force -freeze sim:/ddr_top/ddr_wr_mask 0 0 +run 180 + diff --git a/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_pkg.vhd b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_pkg.vhd new file mode 100644 index 0000000..95f4b8a --- /dev/null +++ b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_pkg.vhd @@ -0,0 +1,90 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +package ddr is + + component ddr_top + generic( + simulate_io_time : boolean := false); + port ( -- Asyncronous reset and clocks + areset : in std_logic; + cpu_clk : in std_logic; + cpu_clk_2x : in std_logic; + cpu_clk_4x : in std_logic; + ddr_in_clk : in std_logic; + ddr_in_clk_2x : in std_logic; + + -- Command interface + ddr_command : in std_logic_vector(15 downto 0); + ddr_command_we : in std_logic; + refresh_en : in std_logic; + + + -- Data interface signals + ddr_data_read : out std_logic_vector(31 downto 0); -- Data read from DDR SDRAM + ddr_data_write : in std_logic_vector(35 downto 0); -- Data to be written to DDR SDRAM + ddr_req_adr : in std_logic_vector(23 downto 1); -- Request address + ddr_req : in std_logic; -- Request DDR SDRAM access + ddr_req_ack : out std_logic; -- Request acknowledge + ddr_busy : out std_logic; -- Request acknowledge + ddr_rd_wr_n : in std_logic; -- Access type 1=READ, 0=WRITE + ddr_req_len : in std_logic; -- Number of 16-bits words to transfer (0=2, 1=8) + ddr_read_en : out std_logic; -- Enable signal for read data + ddr_write_en : out std_logic; -- Enable (read) signal for data write + + -- DDR SDRAM Signals + sdr_clk_p : out std_logic; -- ddr_sdram_clock + sdr_clk_n_p : out std_logic; -- /ddr_sdram_clock + cke_q_p : out std_logic; -- clock enable + cs_qn_p : out std_logic; -- /chip select + ras_qn_p : inout std_logic; -- /ras + cas_qn_p : inout std_logic; -- /cas + we_qn_p : inout std_logic; -- /write enable + dm_q_p : out std_logic_vector(1 downto 0); -- data mask bits, set to "00" + dqs_q_p : out std_logic_vector(1 downto 0); -- data strobe, only for write + ba_q_p : out std_logic_vector(1 downto 0); -- bank select + sdr_a_p : out std_logic_vector(12 downto 0); -- address bus + sdr_d_p : inout std_logic_vector(15 downto 0)); -- bidir data bus + end component; + + component MT46V16M16 + GENERIC ( -- Timing for -75Z CL2 + tCK : TIME := 7.500 ns; + tCH : TIME := 3.375 ns; -- 0.45*tCK + tCL : TIME := 3.375 ns; -- 0.45*tCK + tDH : TIME := 0.500 ns; + tDS : TIME := 0.500 ns; + tIH : TIME := 0.900 ns; + tIS : TIME := 0.900 ns; + tMRD : TIME := 15.000 ns; + tRAS : TIME := 40.000 ns; + tRAP : TIME := 20.000 ns; + tRC : TIME := 65.000 ns; + tRFC : TIME := 75.000 ns; + tRCD : TIME := 20.000 ns; + tRP : TIME := 20.000 ns; + tRRD : TIME := 15.000 ns; + tWR : TIME := 15.000 ns; + addr_bits : INTEGER := 13; + data_bits : INTEGER := 16; + cols_bits : INTEGER := 9 + ); + PORT ( + Dq : INOUT STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z'); + Dqs : INOUT STD_LOGIC_VECTOR (1 DOWNTO 0) := "ZZ"; + Addr : IN STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + Ba : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + Clk : IN STD_LOGIC; + Clk_n : IN STD_LOGIC; + Cke : IN STD_LOGIC; + Cs_n : IN STD_LOGIC; + Ras_n : IN STD_LOGIC; + Cas_n : IN STD_LOGIC; + We_n : IN STD_LOGIC; + Dm : IN STD_LOGIC_VECTOR (1 DOWNTO 0) + ); + end component; + +end ddr; + \ No newline at end of file diff --git a/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_tb.vhd b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_tb.vhd new file mode 100644 index 0000000..5666532 --- /dev/null +++ b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_tb.vhd @@ -0,0 +1,301 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; +library zylin; +use zylin.ddr.all; + +entity ddr_tb is + port ( areset : in std_logic; + break_out : out std_logic); +end ddr_tb; + +architecture behave of ddr_tb is + +signal cpu_clk : std_logic; +signal cpu_clk_2x : std_logic; +signal cpu_clk_4x : std_logic; +signal ddr_in_clk : std_logic; +signal ddr_in_clk_2x : std_logic; + +signal ddr_command : std_logic_vector(15 downto 0); +signal ddr_command_we : std_logic; + +signal ddr_data_read : std_logic_vector(31 downto 0); -- Data read from DDR SDRAM +signal ddr_data_write : std_logic_vector(35 downto 0); -- Data to be written to DDR SDRAM +signal ddr_req_adr : std_logic_vector(23 downto 1); -- Request address +signal ddr_req : std_logic; -- Request DDR SDRAM access +signal ddr_req_ack : std_logic; -- Request acknowledge +signal ddr_busy : std_logic; -- Request acknowledge +signal ddr_rd_wr_n : std_logic; -- Access type 1=READ, 0=WRITE +signal ddr_req_len : std_logic; -- Number of 16-bits words to transfer +signal ddr_read_en : std_logic; -- Enable signal for read data +signal ddr_write_en : std_logic; -- Enable (read) signal for data write +signal refresh_en : std_logic; + +signal sdr_clk_p : std_logic; -- ddr_sdram_clock +signal sdr_clk_n_p : std_logic; -- /ddr_sdram_clock +signal cke_q_p : std_logic; -- clock enable +signal cs_qn_p : std_logic; -- /chip select +signal ras_qn_p : std_logic; -- /ras +signal cas_qn_p : std_logic; -- /cas +signal we_qn_p : std_logic; -- /write enable +signal dm_q_p : std_logic_vector(1 downto 0); -- data mask bits, set to "00" +signal dqs_q_p : std_logic_vector(1 downto 0); -- data strobe, only for write +signal ba_q_p : std_logic_vector(1 downto 0); -- bank select +signal sdr_a_p : std_logic_vector(12 downto 0); -- address bus +signal sdr_d_p : std_logic_vector(15 downto 0); -- bidir data bus + +constant min_time : time := 1.875 ns; + +begin + + clock1: + process + begin + loop + cpu_clk_4x <= '1'; + wait for min_time; + cpu_clk_4x <= '0'; + wait for min_time; + end loop; + end process; + + clock2: + process + begin + loop + cpu_clk_2x <= '1' after 100 ps; + wait until rising_edge(cpu_clk_4x); + cpu_clk_2x <= '0' after 100 ps; + wait until rising_edge(cpu_clk_4x); + end loop; + end process; + + clock3: + process + begin + loop + cpu_clk <= '1' after 100 ps; + wait until rising_edge(cpu_clk_2x); + cpu_clk <= '0' after 100 ps; + wait until rising_edge(cpu_clk_2x); + end loop; + end process; + + ddr_in_clk_2x <= cpu_clk_4x after 1 ns; + + clock4: + process + begin + loop + ddr_in_clk <= '0' after 100 ps; + wait until rising_edge(ddr_in_clk_2x); + ddr_in_clk <= '1' after 100 ps; + wait until rising_edge(ddr_in_clk_2x); + end loop; + end process; + + inputdata: + process + begin + -- Wait until global reset released + loop + ddr_command <= x"0000"; + ddr_command_we <= '0'; + ddr_data_write <= x"000000000"; + ddr_req <= '0'; + ddr_req_adr <= "00000000000000000000000"; + ddr_rd_wr_n <= '0'; + ddr_req_len <= '0'; + break_out <= '0'; + refresh_en <= '0'; + + wait until falling_edge(areset); + + -- DDR initialization sequence + -- Wait more than 200 us + wait for 201000 ns; + + -- Send precharge command + wait until rising_edge(cpu_clk); + ddr_command <= x"8000"; + ddr_command_we <= '1'; + wait until rising_edge(cpu_clk); + ddr_command <= x"0000"; + ddr_command_we <= '0'; + + -- Wait for 1 us + wait for 1000 ns; + + -- Load extended mode register + -- Enable DLL + -- Normal drive strength + wait until rising_edge(cpu_clk); + ddr_command <= x"2000"; + ddr_command_we <= '1'; + wait until rising_edge(cpu_clk); + ddr_command <= x"0000"; + ddr_command_we <= '0'; + + -- Wait for 1 us + wait for 1000 ns; + + -- Load mode register + -- Burst length: 2 + -- Burst type: Sequential + -- Cas latency: 2 + -- Reset DLL + wait until rising_edge(cpu_clk); + ddr_command <= x"0121"; + ddr_command_we <= '1'; + wait until rising_edge(cpu_clk); + ddr_command <= x"0000"; + ddr_command_we <= '0'; + + -- Wait for 1 us + wait for 1000 ns; + + -- Send precharge command + wait until rising_edge(cpu_clk); + ddr_command <= x"8000"; + ddr_command_we <= '1'; + wait until rising_edge(cpu_clk); + ddr_command <= x"0000"; + ddr_command_we <= '0'; + + -- Enable refresh + refresh_en <= '1'; + + -- Wait 30 us (minimum 2 autorefresh cycles) + wait for 30000 ns; + + -- Load mode register + -- Burst length: 2 + -- Burst type: Sequential + -- Cas latency: 2 + -- Deactivate Reset DLL + wait until rising_edge(cpu_clk); + ddr_command <= x"0021"; + ddr_command_we <= '1'; + wait until rising_edge(cpu_clk); + ddr_command <= x"0000"; + ddr_command_we <= '0'; + + -- Wait for 2 us (DLL stable) + wait for 2000 ns; + + -- Write data to DDR + wait until rising_edge(cpu_clk_2x); + ddr_data_write <= x"312345678"; + ddr_req <= '1'; + ddr_req_adr <= "00000000000000000000000"; + ddr_rd_wr_n <= '0'; + ddr_req_len <= '0'; + wait until rising_edge(ddr_write_en); + wait until rising_edge(cpu_clk_2x); + ddr_req <= '0'; + ddr_req_adr <= "00000000000000000000000"; + ddr_rd_wr_n <= '0'; + ddr_req_len <= '0'; + ddr_data_write <= x"000000000"; + wait for 100 ns; + + -- Read data from DDR + wait until rising_edge(cpu_clk_2x); + ddr_req <= '1'; + ddr_req_adr <= "00000000000000000000000"; + ddr_rd_wr_n <= '1'; + ddr_req_len <= '0'; + wait until rising_edge(ddr_req_ack); + wait until rising_edge(cpu_clk_2x); + ddr_req <= '0'; + ddr_req_adr <= "00000000000000000000000"; + ddr_rd_wr_n <= '0'; + ddr_req_len <= '0'; + ddr_data_write <= x"000000000"; + + + + wait for 100 ns; + break_out <= '1'; + wait for 100 ns; + + end loop; + + end process; + + ddr_ctrl: + ddr_top port map( + areset => areset, + cpu_clk => cpu_clk, + cpu_clk_2x => cpu_clk_2x, + cpu_clk_4x => cpu_clk_4x, + ddr_in_clk => ddr_in_clk, + ddr_in_clk_2x => ddr_in_clk_2x, + + -- Command interface + ddr_command => ddr_command, + ddr_command_we => ddr_command_we, + refresh_en => refresh_en, + + -- Data interface signals + ddr_data_read => ddr_data_read, + ddr_data_write => ddr_data_write, + ddr_req_adr => ddr_req_adr, + ddr_req => ddr_req, + ddr_req_ack => ddr_req_ack, + ddr_busy => ddr_busy, + ddr_rd_wr_n => ddr_rd_wr_n, + ddr_req_len => ddr_req_len, + ddr_read_en => ddr_read_en, + ddr_write_en => ddr_write_en, + -- DDR SDRAM Signals + sdr_clk_p => sdr_clk_p, + sdr_clk_n_p => sdr_clk_n_p, + cke_q_p => cke_q_p, + cs_qn_p => cs_qn_p, + ras_qn_p => ras_qn_p, + cas_qn_p => cas_qn_p, + we_qn_p => we_qn_p, + dm_q_p => dm_q_p, + dqs_q_p => dqs_q_p, + ba_q_p => ba_q_p, + sdr_a_p => sdr_a_p, + sdr_d_p => sdr_d_p); + + myram: + MT46V16M16 generic map( + tCK => 7.500 ns, + tCH => 3.375 ns, -- 0.45*tCK + tCL => 3.375 ns, -- 0.45*tCK + tDH => 0.500 ns, + tDS => 0.500 ns, + tIH => 0.900 ns, + tIS => 0.900 ns, + tMRD => 15.000 ns, + tRAS => 40.000 ns, + tRAP => 20.000 ns, + tRC => 65.000 ns, + tRFC => 75.000 ns, + tRCD => 20.000 ns, + tRP => 20.000 ns, + tRRD => 15.000 ns, + tWR => 15.000 ns, + addr_bits => 13, + data_bits => 16, + cols_bits => 9) + port map( + Dq => sdr_d_p, + Dqs => dqs_q_p, + Addr => sdr_a_p, + Ba => ba_q_p, + Clk => sdr_clk_p, + Clk_n => sdr_clk_n_p, + Cke => cke_q_p, + Cs_n => cs_qn_p, + Ras_n => ras_qn_p, + Cas_n => cas_qn_p, + We_n => we_qn_p, + Dm => dm_q_p); + +end behave; diff --git a/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_top.vhd b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_top.vhd new file mode 100644 index 0000000..d5e98e1 --- /dev/null +++ b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/ddr_top.vhd @@ -0,0 +1,660 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +entity ddr_top is + generic( + simulate_io_time : boolean := false); + port ( -- Asyncronous reset and clocks + areset : in std_logic; + cpu_clk : in std_logic; + cpu_clk_2x : in std_logic; + cpu_clk_4x : in std_logic; + ddr_in_clk : in std_logic; + ddr_in_clk_2x : in std_logic; + + -- Command interface + ddr_command : in std_logic_vector(15 downto 0); + ddr_command_we : in std_logic; + refresh_en : in std_logic; + + -- Data interface signals + ddr_data_read : out std_logic_vector(31 downto 0); -- Data read from DDR SDRAM + ddr_data_write : in std_logic_vector(35 downto 0); -- Data to be written to DDR SDRAM + ddr_req_adr : in std_logic_vector(23 downto 1); -- Request address + ddr_req : in std_logic; -- Request DDR SDRAM access + ddr_req_ack : out std_logic; -- Request acknowledge + ddr_busy : out std_logic; -- Request acknowledge + ddr_rd_wr_n : in std_logic; -- Access type 1=READ, 0=WRITE + ddr_req_len : in std_logic; -- Number of 16-bits words to transfer (0=2, 1=8) + ddr_read_en : out std_logic; -- Enable signal for read data + ddr_write_en : out std_logic; -- Enable (read) signal for data write + + -- DDR SDRAM Signals + sdr_clk_p : out std_logic; -- ddr_sdram_clock + sdr_clk_n_p : out std_logic; -- /ddr_sdram_clock + cke_q_p : out std_logic; -- clock enable + cs_qn_p : out std_logic; -- /chip select + ras_qn_p : inout std_logic; -- /ras + cas_qn_p : inout std_logic; -- /cas + we_qn_p : inout std_logic; -- /write enable + dm_q_p : out std_logic_vector(1 downto 0); -- data mask bits, set to "00" + dqs_q_p : out std_logic_vector(1 downto 0); -- data strobe, only for write + ba_q_p : out std_logic_vector(1 downto 0); -- bank select + sdr_a_p : out std_logic_vector(12 downto 0); -- address bus + sdr_d_p : inout std_logic_vector(15 downto 0)); -- bidir data bus +end ddr_top; + +architecture behave of ddr_top is + +attribute keep : string; + +signal cpu_clk_tog : std_logic; +signal ddr_cmd : std_logic_vector(15 downto 0); +signal ddr_cmd_we_smp : std_logic; +signal new_command : std_logic; + +signal cpu_clk_2x_smp1 : std_logic; +signal cpu_clk_2x_smp2 : std_logic; +signal cpu_clk_4x_smp1 : std_logic; +signal cpu_clk_4x_smp2 : std_logic; + +signal clk2_phase : std_logic; +signal clk4_phase : std_logic_vector(3 downto 0); +signal clk4_phase_short : std_logic_vector(1 downto 0); + +signal ddr_clk_tog : std_logic; +signal ddr_clk_smp1 : std_logic; +signal ddr_clk_smp2 : std_logic; +signal ddr_clk_phase : std_logic; + +signal smp_req_adr : std_logic_vector(23 downto 1); +signal smp_req_type : std_logic; +signal smp_req_len : std_logic; +signal ddr_write_en_int : std_logic; +signal ddr_read_en_int : std_logic; + +signal dqs_q : std_logic_vector(1 downto 0); +signal dqs_oe_n : std_logic_vector(1 downto 0); +attribute keep of dqs_oe_n:signal is "true"; +signal cas_qn : std_logic; +signal ras_qn : std_logic; +signal we_qn : std_logic; +signal ba_q : std_logic_vector(1 downto 0); +signal sdr_clk : std_logic; +signal sdr_clk_n : std_logic; +signal sdr_a : std_logic_vector(12 downto 0); +signal sdr_d : std_logic_vector(15 downto 0); +signal sdr_smp : std_logic_vector(35 downto 0); +signal sdr_oe_n : std_logic_vector(15 downto 0); +attribute keep of sdr_oe_n:signal is "true"; +signal sdr_oe_ctrl : std_logic; +signal sdr_wr_msw : std_logic_vector(17 downto 0); +attribute keep of sdr_wr_msw:signal is "true"; +signal dm_q : std_logic_vector(1 downto 0); + +signal cas_n_smp : std_logic; +signal ras_n_smp : std_logic; +signal we_n_smp : std_logic; +signal read_start_sig : std_logic; +signal sdr_d_in : std_logic_vector(15 downto 0); +signal read_time_cnt : std_logic_vector(1 downto 0); +signal read_input_en : std_logic; +signal ddr_data_read_int : std_logic_vector(31 downto 0); + +signal refresh_pend : std_logic; +signal refresh_end : std_logic; +signal refresh_cnt : std_logic_vector(9 downto 0); +signal refresh_wait_cnt : std_logic_vector(2 downto 0); +signal refresh_wait_end : std_logic; + +signal cas_qn_p_del : std_logic; +signal ras_qn_p_del : std_logic; +signal we_qn_p_del : std_logic; +signal sdr_d_p_del : std_logic_vector(15 downto 0); + +type state_type is (idle, act, act_nop1, act_nop2, rd_wr, rd_nop1, + rd_nop2, pre, pre_nop1, pre_nop2, wr_nop1, wr_nop2, + wr_nop3, cmd, cpu_pre, refresh, refresh_wait); +signal ddr_state : state_type; + +constant Clk_to_Output : time := 2.2 ns; +constant Sim_Delay : time := 0.5 ns; +constant Input_Setup : time := 2.5 ns; + +constant Refresh_Interval : std_logic_vector(9 downto 0) := "1111100110"; + +begin + + iotimingon: + if simulate_io_time generate + begin + cas_qn_p_del <= 'X' after 0 ns, cas_qn_p after Input_Setup; + ras_qn_p_del <= 'X' after 0 ns, ras_qn_p after Input_Setup; + we_qn_p_del <= 'X' after 0 ns, we_qn_p after Input_Setup; + sdr_d_p_del <= "XXXXXXXXXXXXXXXX" after 0 ns, sdr_d_p after Input_Setup; + end generate; + + iotimingoff: + if not simulate_io_time generate + begin + cas_qn_p_del <= cas_qn_p; + ras_qn_p_del <= ras_qn_p; + we_qn_p_del <= we_qn_p; + sdr_d_p_del <= sdr_d_p; + end generate; + + ddr_write_en <= ddr_write_en_int; + ddr_read_en <= ddr_read_en_int; + ddr_data_read <= ddr_data_read_int; + + process(cpu_clk, areset) -- Toggle a flip-flop with cpu_clk, in order + begin -- to find phase relation with 2x and 4x clocks + if areset = '1' then + cpu_clk_tog <= '0'; + elsif (cpu_clk'event and cpu_clk = '1') then + cpu_clk_tog <= not(cpu_clk_tog) after Sim_Delay; + end if; + end process; + + process(cpu_clk_2x, areset) -- Find phase relation between cpu_clk and cpu_clk_2x + begin + if areset = '1' then + cpu_clk_2x_smp1 <= '0'; + cpu_clk_2x_smp2 <= '0'; + clk2_phase <= '0'; + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + cpu_clk_2x_smp1 <= cpu_clk_tog after Sim_Delay; + cpu_clk_2x_smp2 <= cpu_clk_2x_smp1 after Sim_Delay; + if (cpu_clk_2x_smp1 = '1' and cpu_clk_2x_smp2 = '0') then + clk2_phase <= '0' after Sim_Delay; + else + clk2_phase <= not(clk2_phase) after Sim_Delay; + end if; + end if; + end process; + + process(cpu_clk_4x, areset) -- Find phase relation between cpu_clk and cpu_clk_4x + begin + if areset = '1' then + cpu_clk_4x_smp1 <= '0'; + cpu_clk_4x_smp2 <= '0'; + clk4_phase <= "0000"; + clk4_phase_short <= "00"; + elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then + cpu_clk_4x_smp1 <= cpu_clk_tog after Sim_Delay; + cpu_clk_4x_smp2 <= cpu_clk_4x_smp1 after Sim_Delay; + if (cpu_clk_4x_smp1 = '1' and cpu_clk_4x_smp2 = '0') then + clk4_phase <= "0100" after Sim_Delay; + clk4_phase_short <= "01" after Sim_Delay; + else + clk4_phase <= (clk4_phase(2 downto 0) & clk4_phase(3)) after Sim_Delay; + clk4_phase_short <= clk4_phase_short(0) & clk4_phase_short(1); + end if; + end if; + end process; + + process(cpu_clk_4x, areset) -- + begin + if areset = '1' then + sdr_clk <= '0'; + sdr_clk_n <= '0'; + elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then + if clk4_phase_short(0) = '1' then + sdr_clk <= '1' after Sim_Delay; + else + sdr_clk <= '0' after Sim_Delay; + end if; + if clk4_phase_short(1) = '1' then + sdr_clk_n <= '1' after Sim_Delay; + else + sdr_clk_n <= '0' after Sim_Delay; + end if; + end if; + end process; + + cke_q_p <= '1' after Clk_to_Output; + cs_qn_p <= '0' after Clk_to_Output; + + process(cpu_clk_4x, areset) -- + begin + if areset = '1' then + ras_qn_p <= '1'; + cas_qn_p <= '1'; + we_qn_p <= '1'; + dqs_q_p <= "ZZ"; + sdr_a_p <= "0000000000000"; + ba_q_p <= "00"; + sdr_clk_p <= '0'; + sdr_clk_n_p <= '1'; + elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then + ras_qn_p <= transport ras_qn after Clk_to_Output; + cas_qn_p <= transport cas_qn after Clk_to_Output; + we_qn_p <= transport we_qn after Clk_to_Output; + if dqs_oe_n(0) = '0' then + dqs_q_p(0) <= transport dqs_q(0) after Clk_to_Output; + else + dqs_q_p(0) <= transport 'Z' after Clk_to_Output; + end if; + if dqs_oe_n(1) = '0' then + dqs_q_p(1) <= transport dqs_q(1) after Clk_to_Output; + else + dqs_q_p(1) <= transport 'Z' after Clk_to_Output; + end if; + sdr_a_p <= transport sdr_a after Clk_to_Output; + ba_q_p <= transport ba_q after Clk_to_Output; + sdr_clk_p <= transport sdr_clk after Clk_to_Output; + sdr_clk_n_p <= transport sdr_clk_n after Clk_to_Output; + end if; + end process; + + process(cpu_clk_2x, areset) -- + begin + if areset = '1' then + ddr_state <= idle; + ras_qn <= '1'; + cas_qn <= '1'; + we_qn <= '1'; + smp_req_adr <= (others => '0'); + smp_req_type <= '0'; + smp_req_len <= '0'; + sdr_a <= "XXXXXXXXXXXXX"; + ba_q <= "00"; + ddr_req_ack <= '0'; + ddr_busy <= '1'; + ddr_write_en_int <= '0'; + ddr_read_en_int <= '0'; + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + + -- Default values + ras_qn <= '1' after Sim_Delay; + cas_qn <= '1' after Sim_Delay; + we_qn <= '1' after Sim_Delay; + sdr_a <= "XXXXXXXXXXXXX" after Sim_Delay; + ba_q <= "00" after Sim_Delay; + ddr_req_ack <= '0' after Sim_Delay; + ddr_busy <= '1' after Sim_Delay; + ddr_write_en_int <= '0' after Sim_Delay; + ddr_read_en_int <= '0' after Sim_Delay; + + case ddr_state is + when idle => + smp_req_adr <= ddr_req_adr after Sim_Delay; + smp_req_type <= ddr_rd_wr_n after Sim_Delay; + smp_req_len <= ddr_req_len after Sim_Delay; + ddr_busy <= '0' after Sim_Delay; + if refresh_pend = '1' then + ddr_state <= refresh after Sim_Delay; + elsif new_command = '1' then + if ddr_cmd(15) = '1' then + ddr_state <= cpu_pre after Sim_Delay; + else + ddr_state <= cmd after Sim_Delay; + end if; + elsif ddr_req = '1' then + ddr_state <= act after Sim_Delay; + else + ddr_state <= idle after Sim_Delay; + end if; + when act => + sdr_a <= smp_req_adr(23 downto 11) after Sim_Delay; + ras_qn <= '0' after Sim_Delay; + ddr_state <= act_nop1 after Sim_Delay; + ddr_req_ack <= '1' after Sim_Delay; + ddr_write_en_int <= not(smp_req_type) after Sim_Delay; + when act_nop1 => + ddr_state <= act_nop2 after Sim_Delay; + when act_nop2 => + ddr_state <= rd_wr after Sim_Delay; + when rd_wr => + sdr_a(10) <= '0' after Sim_Delay; -- Disable auto precharge + sdr_a(9 downto 0) <= smp_req_adr(10 downto 1) after Sim_Delay; + cas_qn <= '0' after Sim_Delay; + we_qn <= smp_req_type after Sim_Delay; + if smp_req_type = '1' then + ddr_state <= rd_nop1 after Sim_Delay; + else + ddr_state <= wr_nop1 after Sim_Delay; + end if; + when wr_nop1 => + ddr_state <= wr_nop2 after Sim_Delay; + when wr_nop2 => + ddr_state <= wr_nop3 after Sim_Delay; + when wr_nop3 => + ddr_state <= pre after Sim_Delay; + when rd_nop1 => + ddr_state <= rd_nop2 after Sim_Delay; + when rd_nop2 => + ddr_state <= pre after Sim_Delay; + when pre => + ras_qn <= '0' after Sim_Delay; + we_qn <= '0' after Sim_Delay; + sdr_a(10) <= '1' after Sim_Delay; -- Precharge all banks + ddr_state <= pre_nop1 after Sim_Delay; + ddr_read_en_int <= smp_req_type after Sim_Delay; + when pre_nop1 => + ddr_state <= pre_nop2 after Sim_Delay; + when cmd => + cas_qn <= '0' after Sim_Delay; + ras_qn <= '0' after Sim_Delay; + we_qn <= '0' after Sim_Delay; + ba_q <= ddr_cmd(14 downto 13) after Sim_Delay; + sdr_a <= ddr_cmd(12 downto 0) after Sim_Delay; + ddr_state <= idle after Sim_Delay; + when cpu_pre => + ddr_state <= pre after Sim_Delay; + when refresh => + cas_qn <= '0' after Sim_Delay; + ras_qn <= '0' after Sim_Delay; + ddr_state <= refresh_wait after Sim_Delay; + when refresh_wait => + if refresh_wait_end = '1' then + ddr_state <= pre after Sim_Delay; + end if; + when pre_nop2 => + ddr_state <= idle after Sim_Delay; + when others => + ddr_state <= idle after Sim_Delay; + end case; + end if; + end process; + + process(cpu_clk, areset) -- + begin + if areset = '1' then + ddr_cmd <= "0000000000000000"; + elsif (cpu_clk'event and cpu_clk = '1') then + if ddr_command_we = '1' then + ddr_cmd <= ddr_command after Sim_Delay; + else + ddr_cmd <= ddr_cmd after Sim_Delay; + end if; + end if; + end process; + + process(cpu_clk_2x, areset) -- + begin + if areset = '1' then + ddr_cmd_we_smp <= '0'; + new_command <= '0'; + sdr_smp <= "000000000000000000000000000000000000"; + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + ddr_cmd_we_smp <= ddr_command_we after Sim_Delay; + if ddr_command_we = '0' and ddr_cmd_we_smp = '1' then + new_command <= '1' after Sim_Delay; + elsif ddr_state = cmd or ddr_state = cpu_pre then + new_command <= '0' after Sim_Delay; + else + new_command <= new_command after Sim_Delay; + end if; + + if ddr_write_en_int = '1' then + sdr_smp <= ddr_data_write after Sim_Delay; + else + sdr_smp <= sdr_smp after Sim_Delay; + end if; + + end if; + end process; + + process(cpu_clk_4x, areset) -- + begin + if areset = '1' then + dqs_q <= "00"; + dqs_oe_n <= "11"; + sdr_oe_ctrl <= '1'; + sdr_wr_msw <= "000000000000000000"; + elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then + + if ddr_state = wr_nop1 and clk4_phase_short(0) = '1' then + sdr_oe_ctrl <= '0' after Sim_Delay; + elsif ddr_state = wr_nop3 and clk4_phase_short(0) = '1' then + sdr_oe_ctrl <= '1' after Sim_Delay; + else + sdr_oe_ctrl <= sdr_oe_ctrl after Sim_Delay; + end if; + + if ddr_state = idle or ddr_state = wr_nop3 then + dqs_oe_n <= "11" after Sim_Delay; + elsif ddr_state = wr_nop1 then + dqs_oe_n <= "00" after Sim_Delay; + else + dqs_oe_n <= dqs_oe_n after Sim_Delay; + end if; + + if (ddr_state = wr_nop2 and clk4_phase_short(0) = '1') then + dqs_q <= "11" after Sim_Delay; + else + dqs_q <= "00" after Sim_Delay; + end if; + + if ddr_state = wr_nop1 and clk4_phase_short(1) = '1' then + sdr_wr_msw <= "111111111111111111" after Sim_Delay; + else + sdr_wr_msw <= "000000000000000000" after Sim_Delay; + end if; + + end if; + end process; + + -- NOTE! DATA OUTPUT PATH. CLOCKED ON FALLING 4X CLOCK + process(cpu_clk_4x, areset) -- + begin + if areset = '1' then + sdr_d_p <= "ZZZZZZZZZZZZZZZZ"; + dm_q_p <= "11"; + sdr_oe_n <= "1111111111111111"; + sdr_d <= "0000000000000000"; + dm_q <= "11"; + elsif (cpu_clk_4x'event and cpu_clk_4x = '0') then + + for i in 0 to 15 loop + if sdr_oe_n(i) = '0' then + sdr_d_p(i) <= transport sdr_d(i) after Clk_to_Output; + else + sdr_d_p(i) <= transport 'Z' after Clk_to_Output; + end if; + end loop; + + dm_q_p <= transport dm_q after Clk_to_Output; + + if sdr_oe_ctrl = '0' then + sdr_oe_n <= "0000000000000000" after Sim_Delay; + else + sdr_oe_n <= "1111111111111111" after Sim_Delay; + end if; + + for i in 0 to 15 loop + if sdr_wr_msw(i) = '0' then + sdr_d(i) <= sdr_smp(i) after Sim_Delay; + else + sdr_d(i) <= sdr_smp(i+16) after Sim_Delay; + end if; + end loop; + + for i in 0 to 1 loop + if sdr_wr_msw(i+16) = '0' then + dm_q(i) <= sdr_smp(i+32) after Sim_Delay; + else + dm_q(i) <= sdr_smp(i+34) after Sim_Delay; + end if; + end loop; + + end if; + end process; + + process(cpu_clk_2x, areset) -- + begin + if areset = '1' then + refresh_cnt <= "0000000000"; + refresh_pend <= '0'; + refresh_end <= '0'; + refresh_wait_cnt <= "000"; + refresh_wait_end <= '0'; + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + + if refresh_cnt = Refresh_Interval then + refresh_end <= '1'; + else + refresh_end <= '0'; + end if; + + if refresh_end = '1' then + refresh_cnt <= "0000000000"; + else + refresh_cnt <= refresh_cnt + '1'; + end if; + + if refresh_end = '1' and refresh_en = '1' then + refresh_pend <= '1' after Sim_Delay; + elsif ddr_state = refresh then + refresh_pend <= '0' after Sim_Delay; + else + refresh_pend <= refresh_pend after Sim_Delay; + end if; + + if ddr_state = refresh_wait then + refresh_wait_cnt <= refresh_wait_cnt + '1'; + else + refresh_wait_cnt <= "000"; + end if; + + if refresh_wait_cnt = "111" then + refresh_wait_end <= '1' after Sim_Delay; + else + refresh_wait_end <= '0' after Sim_Delay; + end if; + + end if; + end process; + + -- 911. THIS IS A DUMMY FOR FGPA IMPEMENTATION TESTING + + process(ddr_in_clk, areset) + begin + if areset = '1' then + ddr_clk_tog <= '0'; + elsif (ddr_in_clk'event and ddr_in_clk = '1') then + ddr_clk_tog <= not(ddr_clk_tog) after Sim_Delay; + end if; + end process; + + process(ddr_in_clk_2x, areset) + begin + if areset = '1' then + ddr_clk_smp1 <= '0'; + ddr_clk_smp2 <= '0'; + ddr_clk_phase <= '0'; + elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then + ddr_clk_smp1 <= ddr_clk_tog after Sim_Delay; + ddr_clk_smp2 <= ddr_clk_smp1 after Sim_Delay; + if ddr_clk_smp1 = '1' and ddr_clk_smp2 = '0' then + ddr_clk_phase <= '0'; + else + ddr_clk_phase <= not(ddr_clk_phase); + end if; + end if; + end process; + + process(ddr_in_clk_2x, areset) + begin + if areset = '1' then + cas_n_smp <= '0'; + ras_n_smp <= '0'; + we_n_smp <= '0'; + read_start_sig <= '0'; + elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then + cas_n_smp <= cas_qn_p_del after Sim_Delay; + ras_n_smp <= ras_qn_p_del after Sim_Delay; + we_n_smp <= we_qn_p_del after Sim_Delay; + if ras_n_smp = '1' and cas_n_smp = '0' and we_n_smp = '1' and ddr_clk_phase = '1' then + read_start_sig <= '1' after Sim_Delay; + else + read_start_sig <= '0' after Sim_Delay; + end if; + end if; + end process; + + process(ddr_in_clk_2x, areset) + begin + if areset = '1' then + sdr_d_in <= "0000000000000000"; + elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then + sdr_d_in <= sdr_d_p_del after Sim_Delay; + end if; + end process; + + process(ddr_in_clk_2x, areset) + begin + if areset = '1' then + read_time_cnt <= "00"; + read_input_en <= '0'; + elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then + + if read_start_sig = '1' then + read_time_cnt <= "01" after Sim_Delay; + elsif read_time_cnt = "00" then + read_time_cnt <= read_time_cnt after Sim_Delay; + else + read_time_cnt <= read_time_cnt + '1' after Sim_Delay; + end if; + + if read_time_cnt = "11" then + read_input_en <= '1' after Sim_Delay; + else + read_input_en <= '0' after Sim_Delay; + end if; + + end if; + end process; + + process(ddr_in_clk_2x, areset) + begin + if areset = '1' then + ddr_data_read_int <= "00000000000000000000000000000000"; + elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then + ddr_data_read_int(31 downto 16) <= "0000000000000000" after Sim_Delay; + if read_input_en = '1' then + ddr_data_read_int(15 downto 0) <= sdr_d_in after Sim_Delay; + else + ddr_data_read_int(15 downto 0) <= ddr_data_read_int(15 downto 0) after Sim_Delay; + end if; + end if; + end process; + + + + + + + + + -- ############### + + process(cpu_clk, areset) -- + begin + if areset = '1' then + elsif (cpu_clk'event and cpu_clk = '1') then + end if; + end process; + + + process(cpu_clk_2x, areset) -- + begin + if areset = '1' then + elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then + end if; + end process; + + + process(cpu_clk_4x, areset) -- + begin + if areset = '1' then + elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then + end if; + end process; + + +end behave; + + diff --git a/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/mt46v16m16.vhd b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/mt46v16m16.vhd new file mode 100644 index 0000000..6b89345 --- /dev/null +++ b/zpu/hdl/zpu4/dummyfpgalib/ddrsdram/src/mt46v16m16.vhd @@ -0,0 +1,1320 @@ +----------------------------------------------------------------------------------------- +-- +-- File Name: MT46V16M16.VHD +-- Version: 2.1 +-- Date: January 14th, 2002 +-- Model: Behavioral +-- Simulator: NCDesktop - http://www.cadence.com +-- ModelSim PE - http://www.model.com +-- +-- Dependencies: None +-- +-- Author: Son P. Huynh +-- Email: sphuynh@micron.com +-- Phone: (208) 368-3825 +-- Company: Micron Technology, Inc. +-- Part Number: MT46V16M16 (4 Mb x 16 x 4 Banks) +-- +-- Description: Micron 256 Mb SDRAM DDR (Double Data Rate) +-- +-- Limitation: Doesn't model internal refresh counter +-- +-- Note: +-- +-- Disclaimer: THESE DESIGNS ARE PROVIDED "AS IS" WITH NO WARRANTY +-- WHATSOEVER AND MICRON SPECIFICALLY DISCLAIMS ANY +-- IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR +-- A PARTICULAR PURPOSE, OR AGAINST INFRINGEMENT. +-- +-- Copyright (c) 1998 Micron Semiconductor Products, Inc. +-- All rights researved +-- +-- Rev Author Date Changes +-- --- ---------------------------- ---------- ------------------------------------- +-- 2.1 Son P. Huynh 01/14/2002 - Fix Burst_counter +-- Micron Technology, Inc. +-- +-- 2.0 Son P. Huynh 11/08/2001 - Second release +-- Micron Technology, Inc. - Rewrote and remove SHARED VARIABLE +-- +----------------------------------------------------------------------------------------- + +LIBRARY IEEE; + USE IEEE.STD_LOGIC_1164.ALL; + USE IEEE.STD_LOGIC_UNSIGNED.ALL; + USE IEEE.STD_LOGIC_ARITH.ALL; + +ENTITY MT46V16M16 IS + GENERIC ( -- Timing for -75Z CL2 + tCK : TIME := 7.500 ns; + tCH : TIME := 3.375 ns; -- 0.45*tCK + tCL : TIME := 3.375 ns; -- 0.45*tCK + tDH : TIME := 0.500 ns; + tDS : TIME := 0.500 ns; + tIH : TIME := 0.900 ns; + tIS : TIME := 0.900 ns; + tMRD : TIME := 15.000 ns; + tRAS : TIME := 40.000 ns; + tRAP : TIME := 20.000 ns; + tRC : TIME := 65.000 ns; + tRFC : TIME := 75.000 ns; + tRCD : TIME := 20.000 ns; + tRP : TIME := 20.000 ns; + tRRD : TIME := 15.000 ns; + tWR : TIME := 15.000 ns; + addr_bits : INTEGER := 13; + data_bits : INTEGER := 16; + cols_bits : INTEGER := 9 + ); + PORT ( + Dq : INOUT STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z'); + Dqs : INOUT STD_LOGIC_VECTOR (1 DOWNTO 0) := "ZZ"; + Addr : IN STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + Ba : IN STD_LOGIC_VECTOR (1 DOWNTO 0); + Clk : IN STD_LOGIC; + Clk_n : IN STD_LOGIC; + Cke : IN STD_LOGIC; + Cs_n : IN STD_LOGIC; + Ras_n : IN STD_LOGIC; + Cas_n : IN STD_LOGIC; + We_n : IN STD_LOGIC; + Dm : IN STD_LOGIC_VECTOR (1 DOWNTO 0) + ); +END MT46V16M16; + +ARCHITECTURE behave OF MT46V16M16 IS + -- Array for Read pipeline + TYPE Array_Read_cmnd IS ARRAY (8 DOWNTO 0) OF STD_LOGIC; + TYPE Array_Read_bank IS ARRAY (8 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0); + TYPE Array_Read_cols IS ARRAY (8 DOWNTO 0) OF STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0); + + -- Array for Write pipeline + TYPE Array_Write_cmnd IS ARRAY (2 DOWNTO 0) OF STD_LOGIC; + TYPE Array_Write_bank IS ARRAY (2 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0); + TYPE Array_Write_cols IS ARRAY (2 DOWNTO 0) OF STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0); + + -- Array for Auto Precharge + TYPE Array_Read_precharge IS ARRAY (3 DOWNTO 0) OF STD_LOGIC; + TYPE Array_Write_precharge IS ARRAY (3 DOWNTO 0) OF STD_LOGIC; + TYPE Array_Count_precharge IS ARRAY (3 DOWNTO 0) OF INTEGER; + + -- Array for Manual Precharge + TYPE Array_A10_precharge IS ARRAY (8 DOWNTO 0) OF STD_LOGIC; + TYPE Array_Bank_precharge IS ARRAY (8 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0); + TYPE Array_Cmnd_precharge IS ARRAY (8 DOWNTO 0) OF STD_LOGIC; + + -- Array for Burst Terminate + TYPE Array_Cmnd_bst IS ARRAY (8 DOWNTO 0) OF STD_LOGIC; + + -- Array for Memory Access + TYPE Array_ram_type IS ARRAY (2**cols_bits - 1 DOWNTO 0) OF STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0); + TYPE Array_ram_pntr IS ACCESS Array_ram_type; + TYPE Array_ram_stor IS ARRAY (2**addr_bits - 1 DOWNTO 0) OF Array_ram_pntr; + + -- Data pair + SIGNAL Dq_pair : STD_LOGIC_VECTOR (2 * data_bits - 1 DOWNTO 0); + SIGNAL Dm_pair : STD_LOGIC_VECTOR (3 DOWNTO 0); + + -- Mode Register + SIGNAL Mode_reg : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0'); + + -- Command Decode Variables + SIGNAL Active_enable, Aref_enable, Burst_term, Ext_mode_enable : STD_LOGIC := '0'; + SIGNAL Mode_reg_enable, Prech_enable, Read_enable, Write_enable : STD_LOGIC := '0'; + + -- Burst Length Decode Variables + SIGNAL Burst_length_2, Burst_length_4, Burst_length_8, Burst_length_f : STD_LOGIC := '0'; + + -- Cas Latency Decode Variables + SIGNAL Cas_latency_15, Cas_latency_2, Cas_latency_25, Cas_latency_3, Cas_latency_4 : STD_LOGIC := '0'; + + -- Internal Control Signals + SIGNAL Cs_in, Ras_in, Cas_in, We_in : STD_LOGIC := '0'; + + -- System Clock + SIGNAL Sys_clk : STD_LOGIC := '0'; + + -- Dqs buffer + SIGNAL Dqs_out : STD_LOGIC_VECTOR (1 DOWNTO 0) := "ZZ"; + +BEGIN + -- Strip the strength + Cs_in <= To_X01 (Cs_n); + Ras_in <= To_X01 (Ras_n); + Cas_in <= To_X01 (Cas_n); + We_in <= To_X01 (We_n); + + -- Commands Decode + Active_enable <= NOT(Cs_in) AND NOT(Ras_in) AND Cas_in AND We_in; + Aref_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND We_in; + Burst_term <= NOT(Cs_in) AND Ras_in AND Cas_in AND NOT(We_in); + Ext_mode_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND NOT(We_in) AND Ba(0) AND NOT(Ba(1)); + Mode_reg_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND NOT(We_in) AND NOT(Ba(0)) AND NOT(Ba(1)); + Prech_enable <= NOT(Cs_in) AND NOT(Ras_in) AND Cas_in AND NOT(We_in); + Read_enable <= NOT(Cs_in) AND Ras_in AND NOT(Cas_in) AND We_in; + Write_enable <= NOT(Cs_in) AND Ras_in AND NOT(Cas_in) AND NOT(We_in); + + -- Burst Length Decode + Burst_length_2 <= NOT(Mode_reg(2)) AND NOT(Mode_reg(1)) AND Mode_reg(0); + Burst_length_4 <= NOT(Mode_reg(2)) AND Mode_reg(1) AND NOT(Mode_reg(0)); + Burst_length_8 <= NOT(Mode_reg(2)) AND Mode_reg(1) AND Mode_reg(0); + Burst_length_f <= (Mode_reg(2)) AND Mode_reg(1) AND Mode_reg(0); + + -- CAS Latency Decode + Cas_latency_15 <= Mode_reg(6) AND NOT(Mode_reg(5)) AND (Mode_reg(4)); + Cas_latency_2 <= NOT(Mode_reg(6)) AND Mode_reg(5) AND NOT(Mode_reg(4)); + Cas_latency_25 <= Mode_reg(6) AND Mode_reg(5) AND NOT(Mode_reg(4)); + Cas_latency_3 <= NOT(Mode_reg(6)) AND Mode_reg(5) AND Mode_reg(4); + Cas_latency_4 <= (Mode_reg(6)) AND NOT(Mode_reg(5)) AND NOT(Mode_reg(4)); + + -- Dqs buffer + Dqs <= Dqs_out; + + -- + -- System Clock + -- + int_clk : PROCESS (Clk, Clk_n) + VARIABLE ClkZ, CkeZ : STD_LOGIC := '0'; + begin + IF Clk = '1' AND Clk_n = '0' THEN + ClkZ := '1'; + CkeZ := Cke; + ELSIF Clk = '0' AND Clk_n = '1' THEN + ClkZ := '0'; + END IF; + Sys_clk <= CkeZ AND ClkZ; + END PROCESS; + + -- + -- Main Process + -- + state_register : PROCESS + -- Precharge Variables + VARIABLE Pc_b0, Pc_b1, Pc_b2, Pc_b3 : STD_LOGIC := '0'; + + -- Activate Variables + VARIABLE Act_b0, Act_b1, Act_b2, Act_b3 : STD_LOGIC := '1'; + + -- Data IO variables + VARIABLE Data_in_enable, Data_out_enable : STD_LOGIC := '0'; + + -- Internal address mux variables + VARIABLE Cols_brst : STD_LOGIC_VECTOR (2 DOWNTO 0); + VARIABLE Prev_bank : STD_LOGIC_VECTOR (1 DOWNTO 0) := "00"; + VARIABLE Bank_addr : STD_LOGIC_VECTOR (1 DOWNTO 0) := "00"; + VARIABLE Cols_addr : STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0); + VARIABLE Rows_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + VARIABLE B0_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + VARIABLE B1_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + VARIABLE B2_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + VARIABLE B3_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0); + + -- DLL Reset variables + VARIABLE DLL_enable : STD_LOGIC := '0'; + VARIABLE DLL_reset : STD_LOGIC := '0'; + VARIABLE DLL_done : STD_LOGIC := '0'; + VARIABLE DLL_count : INTEGER := 0; + + -- Timing Check + VARIABLE MRD_chk : TIME := 0 ns; + VARIABLE RFC_chk : TIME := 0 ns; + VARIABLE RRD_chk : TIME := 0 ns; + VARIABLE RAS_chk0, RAS_chk1, RAS_chk2, RAS_chk3 : TIME := 0 ns; + VARIABLE RAP_chk0, RAP_chk1, RAP_chk2, RAP_chk3 : TIME := 0 ns; + VARIABLE RC_chk0, RC_chk1, RC_chk2, RC_chk3 : TIME := 0 ns; + VARIABLE RCD_chk0, RCD_chk1, RCD_chk2, RCD_chk3 : TIME := 0 ns; + VARIABLE RP_chk0, RP_chk1, RP_chk2, RP_chk3 : TIME := 0 ns; + VARIABLE WR_chk0, WR_chk1, WR_chk2, WR_chk3 : TIME := 0 ns; + + -- Read pipeline variables + VARIABLE Read_cmnd : Array_Read_cmnd; + VARIABLE Read_bank : Array_Read_bank; + VARIABLE Read_cols : Array_Read_cols; + + -- Write pipeline variables + VARIABLE Write_cmnd : Array_Write_cmnd; + VARIABLE Write_bank : Array_Write_bank; + VARIABLE Write_cols : Array_Write_cols; + + -- Auto Precharge variables + VARIABLE Read_precharge : Array_Read_precharge := ('0' & '0' & '0' & '0'); + VARIABLE Write_precharge : Array_Write_precharge := ('0' & '0' & '0' & '0'); + VARIABLE Count_precharge : Array_Count_precharge := ( 0 & 0 & 0 & 0 ); + + -- Manual Precharge variables + VARIABLE A10_precharge : Array_A10_precharge; + VARIABLE Bank_precharge : Array_Bank_precharge; + VARIABLE Cmnd_precharge : Array_Cmnd_precharge; + + -- Burst Terminate variable + VARIABLE Cmnd_bst : Array_Cmnd_bst; + + -- Memory Banks + VARIABLE Bank0 : Array_ram_stor; + VARIABLE Bank1 : Array_ram_stor; + VARIABLE Bank2 : Array_ram_stor; + VARIABLE Bank3 : Array_ram_stor; + + -- Burst Counter + VARIABLE Burst_counter : STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0); + + -- Internal Dqs initialize + VARIABLE Dqs_int : STD_LOGIC := '0'; + + -- Data buffer for DM Mask + VARIABLE Data_buf : STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z'); + + -- + -- Initialize empty rows + -- + PROCEDURE Init_mem (Bank : STD_LOGIC_VECTOR; Row_index : INTEGER) IS + VARIABLE i, j : INTEGER := 0; + BEGIN + IF Bank = "00" THEN + IF Bank0 (Row_index) = NULL THEN -- Check to see if row empty + Bank0 (Row_index) := NEW Array_ram_type; -- Open new row for access + FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP -- Filled row with zeros + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank0 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + ELSIF Bank = "01" THEN + IF Bank1 (Row_index) = NULL THEN + Bank1 (Row_index) := NEW Array_ram_type; + FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank1 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + ELSIF Bank = "10" THEN + IF Bank2 (Row_index) = NULL THEN + Bank2 (Row_index) := NEW Array_ram_type; + FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank2 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + ELSIF Bank = "11" THEN + IF Bank3 (Row_index) = NULL THEN + Bank3 (Row_index) := NEW Array_ram_type; + FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP + FOR j IN (data_bits - 1) DOWNTO 0 LOOP + Bank3 (Row_index) (i) (j) := '0'; + END LOOP; + END LOOP; + END IF; + END IF; + END; + + -- + -- Burst Counter + -- + PROCEDURE Burst_decode IS + VARIABLE Cols_temp : STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0) := (OTHERS => '0'); + BEGIN + -- Advance burst counter + Burst_counter := Burst_counter + 1; + + -- Burst Type + IF Mode_reg (3) = '0' THEN + Cols_temp := Cols_addr + 1; + ELSIF Mode_reg (3) = '1' THEN + Cols_temp (2) := Burst_counter (2) XOR Cols_brst (2); + Cols_temp (1) := Burst_counter (1) XOR Cols_brst (1); + Cols_temp (0) := Burst_counter (0) XOR Cols_brst (0); + END IF; + + -- Burst Length + IF Burst_length_2 = '1' THEN + Cols_addr (0) := Cols_temp (0); + ELSIF Burst_length_4 = '1' THEN + Cols_addr (1 DOWNTO 0) := Cols_temp (1 DOWNTO 0); + ELSIF Burst_length_8 = '1' THEN + Cols_addr (2 DOWNTO 0) := Cols_temp (2 DOWNTO 0); + ELSE + Cols_addr := Cols_temp; + END IF; + + -- Data counter + IF Burst_length_2 = '1' THEN + IF Burst_counter >= 2 THEN + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + ELSIF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + ELSIF Burst_length_4 = '1' THEN + IF Burst_counter >= 4 THEN + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + ELSIF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + ELSIF Burst_length_8 = '1' THEN + IF Burst_counter >= 8 THEN + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + ELSIF Data_out_enable = '1' THEN + Data_out_enable := '0'; + END IF; + END IF; + END IF; + END; + + BEGIN + WAIT ON Sys_clk; + + -- + -- Manual Precharge Pipeline + -- + IF ((Sys_clk'EVENT AND Sys_clk = '0') OR (Sys_clk'EVENT AND Sys_clk = '1')) THEN + -- A10 Precharge Pipeline + A10_precharge(0) := A10_precharge(1); + A10_precharge(1) := A10_precharge(2); + A10_precharge(2) := A10_precharge(3); + A10_precharge(3) := A10_precharge(4); + A10_precharge(4) := A10_precharge(5); + A10_precharge(5) := A10_precharge(6); + A10_precharge(6) := A10_precharge(7); + A10_precharge(7) := A10_precharge(8); + A10_precharge(8) := '0'; + + -- Bank Precharge Pipeline + Bank_precharge(0) := Bank_precharge(1); + Bank_precharge(1) := Bank_precharge(2); + Bank_precharge(2) := Bank_precharge(3); + Bank_precharge(3) := Bank_precharge(4); + Bank_precharge(4) := Bank_precharge(5); + Bank_precharge(5) := Bank_precharge(6); + Bank_precharge(6) := Bank_precharge(7); + Bank_precharge(7) := Bank_precharge(8); + Bank_precharge(8) := "00"; + + -- Command Precharge Pipeline + Cmnd_precharge(0) := Cmnd_precharge(1); + Cmnd_precharge(1) := Cmnd_precharge(2); + Cmnd_precharge(2) := Cmnd_precharge(3); + Cmnd_precharge(3) := Cmnd_precharge(4); + Cmnd_precharge(4) := Cmnd_precharge(5); + Cmnd_precharge(5) := Cmnd_precharge(6); + Cmnd_precharge(6) := Cmnd_precharge(7); + Cmnd_precharge(7) := Cmnd_precharge(8); + Cmnd_precharge(8) := '0'; + + -- Terminate Read if same bank or all banks + IF ((Cmnd_precharge (0) = '1') AND + (Bank_precharge (0) = Bank_addr OR A10_precharge (0) = '1') AND + (Data_out_enable = '1')) THEN + Data_out_enable := '0'; + END IF; + END IF; + + -- + -- Burst Terminate Pipeline + -- + IF ((Sys_clk'EVENT AND Sys_clk = '0') OR (Sys_clk'EVENT AND Sys_clk = '1')) THEN + -- Burst Terminate pipeline + Cmnd_bst (0) := Cmnd_bst (1); + Cmnd_bst (1) := Cmnd_bst (2); + Cmnd_bst (2) := Cmnd_bst (3); + Cmnd_bst (3) := Cmnd_bst (4); + Cmnd_bst (4) := Cmnd_bst (5); + Cmnd_bst (5) := Cmnd_bst (6); + Cmnd_bst (6) := Cmnd_bst (7); + Cmnd_bst (7) := Cmnd_bst (8); + Cmnd_bst (8) := '0'; + + -- Terminate current Read + IF ((Cmnd_bst (0) = '1') AND (Data_out_enable = '1')) THEN + Data_out_enable := '0'; + END IF; + END IF; + + -- + -- Dq and Dqs Drivers + -- + IF ((Sys_clk'EVENT AND Sys_clk = '0') OR (Sys_clk'EVENT AND Sys_clk = '1')) THEN + -- Read Command Pipeline + Read_cmnd (0) := Read_cmnd (1); + Read_cmnd (1) := Read_cmnd (2); + Read_cmnd (2) := Read_cmnd (3); + Read_cmnd (3) := Read_cmnd (4); + Read_cmnd (4) := Read_cmnd (5); + Read_cmnd (5) := Read_cmnd (6); + Read_cmnd (6) := Read_cmnd (7); + Read_cmnd (7) := Read_cmnd (8); + Read_cmnd (8) := '0'; + + -- Read Bank Pipeline + Read_bank (0) := Read_bank (1); + Read_bank (1) := Read_bank (2); + Read_bank (2) := Read_bank (3); + Read_bank (3) := Read_bank (4); + Read_bank (4) := Read_bank (5); + Read_bank (5) := Read_bank (6); + Read_bank (6) := Read_bank (7); + Read_bank (7) := Read_bank (8); + Read_bank (8) := "00"; + + -- Read Column Pipeline + Read_cols (0) := Read_cols (1); + Read_cols (1) := Read_cols (2); + Read_cols (2) := Read_cols (3); + Read_cols (3) := Read_cols (4); + Read_cols (4) := Read_cols (5); + Read_cols (5) := Read_cols (6); + Read_cols (6) := Read_cols (7); + Read_cols (7) := Read_cols (8); + Read_cols (8) := (OTHERS => '0'); + + -- Initialize Read command + IF Read_cmnd (0) = '1' THEN + Data_out_enable := '1'; + Bank_addr := Read_bank (0); + Cols_addr := Read_cols (0); + Cols_brst := Cols_addr (2 DOWNTO 0); + Burst_counter := (OTHERS => '0'); + + -- Row address mux + CASE Bank_addr IS + WHEN "00" => Rows_addr := B0_row_addr; + WHEN "01" => Rows_addr := B1_row_addr; + WHEN "10" => Rows_addr := B2_row_addr; + WHEN OTHERS => Rows_addr := B3_row_addr; + END CASE; + END IF; + + -- Toggle Dqs during Read command + IF Data_out_enable = '1' THEN + Dqs_int := '0'; + IF Dqs_out = "00" THEN + Dqs_out <= "11"; + ELSIF Dqs_out = "11" THEN + Dqs_out <= "00"; + ELSE + Dqs_out <= "00"; + END IF; + ELSIF Data_out_enable = '0' AND Dqs_int = '0' THEN + Dqs_out <= "ZZ"; + END IF; + + -- Initialize Dqs for Read command + IF Read_cmnd (2) = '1' THEN + IF Data_out_enable = '0' THEN + Dqs_int := '1'; + Dqs_out <= "00"; + END IF; + END IF; + + -- Read Latch + IF Data_out_enable = '1' THEN + -- Initialize Memory + Init_mem (Bank_addr, CONV_INTEGER(Rows_addr)); + + -- Output Data + CASE Bank_addr IS + WHEN "00" => Dq <= Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN "01" => Dq <= Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN "10" => Dq <= Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN OTHERS => Dq <= Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + END CASE; + + -- Increase Burst Counter + Burst_decode; + ELSE + Dq <= (OTHERS => 'Z'); + END IF; + END IF; + + -- + -- Write FIFO and DM Mask Logic + -- + IF Sys_clk'EVENT AND Sys_clk = '1' THEN + -- Write command pipeline + Write_cmnd (0) := Write_cmnd (1); + Write_cmnd (1) := Write_cmnd (2); + Write_cmnd (2) := '0'; + + -- Write command pipeline + Write_bank (0) := Write_bank (1); + Write_bank (1) := Write_bank (2); + Write_bank (2) := "00"; + + -- Write column pipeline + Write_cols (0) := Write_cols (1); + Write_cols (1) := Write_cols (2); + Write_cols (2) := (OTHERS => '0'); + + -- Initialize Write command + IF Write_cmnd (0) = '1' THEN + Data_in_enable := '1'; + Bank_addr := Write_bank (0); + Cols_addr := Write_cols (0); + Cols_brst := Cols_addr (2 DOWNTO 0); + Burst_counter := (OTHERS => '0'); + + -- Row address mux + CASE Bank_addr IS + WHEN "00" => Rows_addr := B0_row_addr; + WHEN "01" => Rows_addr := B1_row_addr; + WHEN "10" => Rows_addr := B2_row_addr; + WHEN OTHERS => Rows_addr := B3_row_addr; + END CASE; + END IF; + + -- Write data + IF Data_in_enable = '1' THEN + -- Initialize memory + Init_mem (Bank_addr, CONV_INTEGER(Rows_addr)); + + -- Write first data + IF Dm_pair (1) = '0' OR Dm_pair (0) = '0' THEN + -- Data Buffer + CASE Bank_addr IS + WHEN "00" => Data_buf := Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN "01" => Data_buf := Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN "10" => Data_buf := Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN OTHERS => Data_buf := Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + END CASE; + + -- Perform DM Mask + IF Dm_pair (0) = '0' THEN + Data_buf ( 7 DOWNTO 0) := Dq_pair ( 7 DOWNTO 0); + END IF; + IF Dm_pair (1) = '0' THEN + Data_buf (15 DOWNTO 8) := Dq_pair (15 DOWNTO 8); + END IF; + + -- Write Data + CASE Bank_addr IS + WHEN "00" => Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + WHEN "01" => Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + WHEN "10" => Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + WHEN OTHERS => Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + END CASE; + END IF; + + -- Increase Burst Counter + Burst_decode; + + -- Write second data + IF Dm_pair (3) = '0' OR Dm_pair (2) = '0' THEN + -- Data Buffer + CASE Bank_addr IS + WHEN "00" => Data_buf := Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN "01" => Data_buf := Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN "10" => Data_buf := Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + WHEN OTHERS => Data_buf := Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)); + END CASE; + + -- Perform DM Mask + IF Dm_pair (2) = '0' THEN + Data_buf ( 7 DOWNTO 0) := Dq_pair (23 DOWNTO 16); + END IF; + IF Dm_pair (3) = '0' THEN + Data_buf (15 DOWNTO 8) := Dq_pair (31 DOWNTO 24); + END IF; + + -- Write Data + CASE Bank_addr IS + WHEN "00" => Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + WHEN "01" => Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + WHEN "10" => Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + WHEN OTHERS => Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf; + END CASE; + END IF; + + -- Increase Burst Counter + Burst_decode; + + -- tWR start and tWTR check + IF Dm_pair (3 DOWNTO 2) = "00" OR Dm_pair (1 DOWNTO 0) = "00" THEN + CASE Bank_addr IS + WHEN "00" => WR_chk0 := NOW; + WHEN "01" => WR_chk1 := NOW; + WHEN "10" => WR_chk2 := NOW; + WHEN OTHERS => WR_chk3 := NOW; + END CASE; + + -- tWTR check + ASSERT (Read_enable = '0') + REPORT "tWTR violation during Read" + SEVERITY WARNING; + END IF; + END IF; + END IF; + + -- + -- Auto Precharge Calculation + -- + IF Sys_clk'EVENT AND Sys_clk = '1' THEN + -- Precharge counter + IF Read_precharge (0) = '1' OR Write_precharge (0) = '1' THEN + Count_precharge (0) := Count_precharge (0) + 1; + END IF; + IF Read_precharge (1) = '1' OR Write_precharge (1) = '1' THEN + Count_precharge (1) := Count_precharge (1) + 1; + END IF; + IF Read_precharge (2) = '1' OR Write_precharge (2) = '1' THEN + Count_precharge (2) := Count_precharge (2) + 1; + END IF; + IF Read_precharge (3) = '1' OR Write_precharge (3) = '1' THEN + Count_precharge (3) := Count_precharge (3) + 1; + END IF; + + -- Read with AutoPrecharge Calculation + -- The device start internal precharge when: + -- 1. Meet tRAS requirement + -- 2. BL/2 cycles after command + IF ((Read_precharge(0) = '1') AND (NOW - RAS_chk0 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge(0) >= 1) OR + (Burst_length_4 = '1' AND Count_precharge(0) >= 2) OR + (Burst_length_8 = '1' AND Count_precharge(0) >= 4)) THEN + Pc_b0 := '1'; + Act_b0 := '0'; + RP_chk0 := NOW; + Read_precharge(0) := '0'; + END IF; + END IF; + IF ((Read_precharge(1) = '1') AND (NOW - RAS_chk1 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge(1) >= 1) OR + (Burst_length_4 = '1' AND Count_precharge(1) >= 2) OR + (Burst_length_8 = '1' AND Count_precharge(1) >= 4)) THEN + Pc_b1 := '1'; + Act_b1 := '0'; + RP_chk1 := NOW; + Read_precharge(1) := '0'; + END IF; + END IF; + IF ((Read_precharge(2) = '1') AND (NOW - RAS_chk2 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge(2) >= 1) OR + (Burst_length_4 = '1' AND Count_precharge(2) >= 2) OR + (Burst_length_8 = '1' AND Count_precharge(2) >= 4)) THEN + Pc_b2 := '1'; + Act_b2 := '0'; + RP_chk2 := NOW; + Read_precharge(2) := '0'; + END IF; + END IF; + IF ((Read_precharge(3) = '1') AND (NOW - RAS_chk3 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge(3) >= 1) OR + (Burst_length_4 = '1' AND Count_precharge(3) >= 2) OR + (Burst_length_8 = '1' AND Count_precharge(3) >= 4)) THEN + Pc_b3 := '1'; + Act_b3 := '0'; + RP_chk3 := NOW; + Read_precharge(3) := '0'; + END IF; + END IF; + + -- Write with AutoPrecharge Calculation + -- The device start internal precharge when: + -- 1. Meet tRAS requirement + -- 2. Two clock after last burst + -- Since tWR is time base, the model will compensate tRP + IF ((Write_precharge(0) = '1') AND (NOW - RAS_chk0 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge (0) >= 4) OR + (Burst_length_4 = '1' AND Count_precharge (0) >= 5) OR + (Burst_length_8 = '1' AND Count_precharge (0) >= 7)) THEN + Pc_b0 := '1'; + Act_b0 := '0'; + RP_chk0 := NOW - ((2 * tCK) - tWR); + Write_precharge(0) := '0'; + END IF; + END IF; + IF ((Write_precharge(1) = '1') AND (NOW - RAS_chk1 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge (1) >= 4) OR + (Burst_length_4 = '1' AND Count_precharge (1) >= 5) OR + (Burst_length_8 = '1' AND Count_precharge (1) >= 7)) THEN + Pc_b1 := '1'; + Act_b1 := '0'; + RP_chk1 := NOW - ((2 * tCK) - tWR); + Write_precharge(1) := '0'; + END IF; + END IF; + IF ((Write_precharge(2) = '1') AND (NOW - RAS_chk2 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge (2) >= 4) OR + (Burst_length_4 = '1' AND Count_precharge (2) >= 5) OR + (Burst_length_8 = '1' AND Count_precharge (2) >= 7)) THEN + Pc_b2 := '1'; + Act_b2 := '0'; + RP_chk2 := NOW - ((2 * tCK) - tWR); + Write_precharge(2) := '0'; + END IF; + END IF; + IF ((Write_precharge(3) = '1') AND (NOW - RAS_chk3 >= tRAS)) THEN + IF ((Burst_length_2 = '1' AND Count_precharge (3) >= 4) OR + (Burst_length_4 = '1' AND Count_precharge (3) >= 5) OR + (Burst_length_8 = '1' AND Count_precharge (3) >= 7)) THEN + Pc_b3 := '1'; + Act_b3 := '0'; + RP_chk3 := NOW - ((2 * tCK) - tWR); + Write_precharge(3) := '0'; + END IF; + END IF; + END IF; + + -- + -- DLL Counter + -- + IF Sys_clk'EVENT AND Sys_clk = '1' THEN + IF (DLL_Reset = '1' AND DLL_done = '0') THEN + DLL_count := DLL_count + 1; + IF (DLL_count >= 200) THEN + DLL_done := '1'; + END IF; + END IF; + END IF; + + -- + -- Control Logic + -- + IF Sys_clk'EVENT AND Sys_clk = '1' THEN + -- Auto Refresh + IF Aref_enable = '1' THEN + -- Auto Refresh to Auto Refresh + ASSERT (NOW - RFC_chk >= tRFC) + REPORT "tRFC violation during Auto Refresh" + SEVERITY WARNING; + + -- Precharge to Auto Refresh + ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND + (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP)) + REPORT "tRP violation during Auto Refresh" + SEVERITY WARNING; + + -- Precharge to Auto Refresh + ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') + REPORT "All banks must be Precharge before Auto Refresh" + SEVERITY WARNING; + + -- Record current tRFC time + RFC_chk := NOW; + END IF; + + -- Extended Load Mode Register + IF Ext_mode_enable = '1' THEN + IF (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') THEN + IF (Addr (0) = '0') THEN + DLL_enable := '1'; + ELSE + DLL_enable := '0'; + END IF; + END IF; + + -- Precharge to EMR + ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') + REPORT "All bank must be Precharged before Extended Mode Register" + SEVERITY WARNING; + + -- Precharge to EMR + ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND + (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP)) + REPORT "tRP violation during Extended Load Register" + SEVERITY WARNING; + + -- LMR/EMR to EMR + ASSERT (NOW - MRD_chk >= tMRD) + REPORT "tMRD violation during Extended Mode Register" + SEVERITY WARNING; + + -- Record current tMRD time + MRD_chk := NOW; + END IF; + + -- Load Mode Register + IF Mode_reg_enable = '1' THEN + -- Register mode + Mode_reg <= Addr; + + -- DLL Reset + IF (DLL_enable = '1' AND Addr (8) = '1') THEN + DLL_reset := '1'; + DLL_done := '0'; + DLL_count := 0; + ELSIF (DLL_enable = '1' AND DLL_reset = '0' AND Addr (8) = '0') THEN + ASSERT (FALSE) + REPORT "DLL is ENABLE: DLL RESET is require" + SEVERITY WARNING; + ELSIF (DLL_enable = '0' AND Addr (8) = '1') THEN + ASSERT (FALSE) + REPORT "DLL is DISABLE: DLL RESET will be ignored" + SEVERITY WARNING; + END IF; + + -- Precharge to LMR + ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') + REPORT "All bank must be Precharged before Load Mode Register" + SEVERITY WARNING; + + -- Precharge to EMR + ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND + (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP)) + REPORT "tRP violation during Load Mode Register" + SEVERITY WARNING; + + -- LMR/ELMR to LMR + ASSERT (NOW - MRD_chk >= tMRD) + REPORT "tMRD violation during Load Mode Register" + SEVERITY WARNING; + + -- Check for invalid Burst Length + ASSERT ((Addr (2 DOWNTO 0) = "001") OR -- BL = 2 + (Addr (2 DOWNTO 0) = "010") OR -- BL = 4 + (Addr (2 DOWNTO 0) = "011")) -- BL = 8 + REPORT "Invalid Burst Length during Load Mode Register" + SEVERITY WARNING; + + -- Check for invalid CAS Latency + ASSERT ((Addr (6 DOWNTO 4) = "010") OR -- CL = 2.0 + (Addr (6 DOWNTO 4) = "110")) -- CL = 2.5 + REPORT "Invalid CAS Latency during Load Mode Register" + SEVERITY WARNING; + + -- Record current tMRD time + MRD_chk := NOW; + END IF; + + -- Active Block (latch Bank and Row Address) + IF Active_enable = '1' THEN + -- Activate an OPEN bank can corrupt data + ASSERT ((Ba = "00" AND Act_b0 = '0') OR + (Ba = "01" AND Act_b1 = '0') OR + (Ba = "10" AND Act_b2 = '0') OR + (Ba = "11" AND Act_b3 = '0')) + REPORT "Bank is already activated - data can be corrupted" + SEVERITY WARNING; + + -- Activate Bank 0 + IF Ba = "00" AND Pc_b0 = '1' THEN + -- Activate to Activate (same bank) + ASSERT (NOW - RC_chk0 >= tRC) + REPORT "tRC violation during Activate Bank 0" + SEVERITY WARNING; + + -- Precharge to Active + ASSERT (NOW - RP_chk0 >= tRP) + REPORT "tRP violation during Activate Bank 0" + SEVERITY WARNING; + + -- Record Variables for checking violation + Act_b0 := '1'; + Pc_b0 := '0'; + B0_row_addr := Addr; + RC_chk0 := NOW; + RCD_chk0 := NOW; + RAS_chk0 := NOW; + RAP_chk0 := NOW; + END IF; + + -- Activate Bank 1 + IF Ba = "01" AND Pc_b1 = '1' THEN + -- Activate to Activate (same bank) + ASSERT (NOW - RC_chk1 >= tRC) + REPORT "tRC violation during Activate Bank 1" + SEVERITY WARNING; + + -- Precharge to Active + ASSERT (NOW - RP_chk1 >= tRP) + REPORT "tRP violation during Activate Bank 1" + SEVERITY WARNING; + + -- Record Variables for checking violation + Act_b1 := '1'; + Pc_b1 := '0'; + B1_row_addr := Addr; + RC_chk1 := NOW; + RCD_chk1 := NOW; + RAS_chk1 := NOW; + RAP_chk1 := NOW; + END IF; + + -- Activate Bank 2 + IF Ba = "10" AND Pc_b2 = '1' THEN + -- Activate to Activate (same bank) + ASSERT (NOW - RC_chk2 >= tRC) + REPORT "tRC violation during Activate Bank 2" + SEVERITY WARNING; + + -- Precharge to Active + ASSERT (NOW - RP_chk2 >= tRP) + REPORT "tRP violation during Activate Bank 2" + SEVERITY WARNING; + + -- Record Variables for checking violation + Act_b2 := '1'; + Pc_b2 := '0'; + B2_row_addr := Addr; + RC_chk2 := NOW; + RCD_chk2 := NOW; + RAS_chk2 := NOW; + RAP_chk2 := NOW; + END IF; + + -- Activate Bank 3 + IF Ba = "11" AND Pc_b3 = '1' THEN + -- Activate to Activate (same bank) + ASSERT (NOW - RC_chk3 >= tRC) + REPORT "tRC violation during Activate Bank 3" + SEVERITY WARNING; + + -- Precharge to Active + ASSERT (NOW - RP_chk3 >= tRP) + REPORT "tRP violation during Activate Bank 3" + SEVERITY WARNING; + + -- Record Variables for checking violation + Act_b3 := '1'; + Pc_b3 := '0'; + B3_row_addr := Addr; + RC_chk3 := NOW; + RCD_chk3 := NOW; + RAS_chk3 := NOW; + RAP_chk3 := NOW; + END IF; + + -- Activate Bank A to Activate Bank B + IF (Prev_bank /= Ba) THEN + ASSERT (NOW - RRD_chk >= tRRD) + REPORT "tRRD violation during Activate" + SEVERITY WARNING; + END IF; + + -- AutoRefresh to Activate + ASSERT (NOW - RFC_chk >= tRFC) + REPORT "tRFC violation during Activate" + SEVERITY WARNING; + + -- Record Variables for Checking Violation + RRD_chk := NOW; + Prev_bank := Ba; + END IF; + + -- Precharge Block - Consider NOP if bank already precharged or in process of precharging + IF Prech_enable = '1' THEN + -- EMR or LMR to Precharge + ASSERT (NOW - MRD_chk >= tMRD) + REPORT "tMRD violation during Precharge" + SEVERITY WARNING; + + -- Precharge Bank 0 + IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "00")) AND Act_b0 = '1') THEN + Act_b0 := '0'; + Pc_b0 := '1'; + RP_chk0 := NOW; + + -- Activate to Precharge bank 0 + ASSERT (NOW - RAS_chk0 >= tRAS) + REPORT "tRAS violation during Precharge" + SEVERITY WARNING; + + -- tWR violation check for Write + ASSERT (NOW - WR_chk0 >= tWR) + REPORT "tWR violation during Precharge" + SEVERITY WARNING; + END IF; + + -- Precharge Bank 1 + IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "01")) AND Act_b1 = '1') THEN + Act_b1 := '0'; + Pc_b1 := '1'; + RP_chk1 := NOW; + + -- Activate to Precharge + ASSERT (NOW - RAS_chk1 >= tRAS) + REPORT "tRAS violation during Precharge" + SEVERITY WARNING; + + -- tWR violation check for Write + ASSERT (NOW - WR_chk1 >= tWR) + REPORT "tWR violation during Precharge" + SEVERITY WARNING; + END IF; + + -- Precharge Bank 2 + IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "10")) AND Act_b2 = '1') THEN + Act_b2 := '0'; + Pc_b2 := '1'; + RP_chk2 := NOW; + + -- Activate to Precharge + ASSERT (NOW - RAS_chk2 >= tRAS) + REPORT "tRAS violation during Precharge" + SEVERITY WARNING; + + -- tWR violation check for Write + ASSERT (NOW - WR_chk2 >= tWR) + REPORT "tWR violation during Precharge" + SEVERITY WARNING; + END IF; + + -- Precharge Bank 3 + IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "11")) AND Act_b3 = '1') THEN + Act_b3 := '0'; + Pc_b3 := '1'; + RP_chk3 := NOW; + + -- Activate to Precharge + ASSERT (NOW - RAS_chk3 >= tRAS) + REPORT "tRAS violation during Precharge" + SEVERITY WARNING; + + -- tWR violation check for Write + ASSERT (NOW - WR_chk3 >= tWR) + REPORT "tWR violation during Precharge" + SEVERITY WARNING; + END IF; + + -- Pipeline for READ + IF CAS_latency_15 = '1' THEN + A10_precharge (3) := Addr(10); + Bank_precharge (3) := Ba; + Cmnd_precharge (3) := '1'; + ELSIF CAS_latency_2 = '1' THEN + A10_precharge (4) := Addr(10); + Bank_precharge (4) := Ba; + Cmnd_precharge (4) := '1'; + ELSIF CAS_latency_25 = '1' THEN + A10_precharge (5) := Addr(10); + Bank_precharge (5) := Ba; + Cmnd_precharge (5) := '1'; + ELSIF CAS_latency_3 = '1' THEN + A10_precharge (6) := Addr(10); + Bank_precharge (6) := Ba; + Cmnd_precharge (6) := '1'; + ELSIF CAS_latency_4 = '1' THEN + A10_precharge (8) := Addr(10); + Bank_precharge (8) := Ba; + Cmnd_precharge (8) := '1'; + END IF; + END IF; + + -- Burst Terminate + IF Burst_term = '1' THEN + -- Pipeline for Read + IF CAS_latency_15 = '1' THEN + Cmnd_bst (3) := '1'; + ELSIF CAS_latency_2 = '1' THEN + Cmnd_bst (4) := '1'; + ELSIF CAS_latency_25 = '1' THEN + Cmnd_bst (5) := '1'; + ELSIF CAS_latency_3 = '1' THEN + Cmnd_bst (6) := '1'; + ELSIF CAS_latency_4 = '1' THEN + Cmnd_bst (8) := '1'; + END IF; + + -- Terminate Write + ASSERT (Data_in_enable = '0') + REPORT "It's illegal to Burst Terminate a Write" + SEVERITY WARNING; + + -- Terminate Read with Auto Precharge + ASSERT (Read_precharge (0) = '0' AND Read_precharge (1) = '0' AND + Read_precharge (2) = '0' AND Read_precharge (3) = '0') + REPORT "It's illegal to Burst Terminate a Read with Auto Precharge" + SEVERITY WARNING; + END IF; + + -- Read Command + IF Read_enable = '1' THEN + -- CAS Latency Pipeline + IF Cas_latency_15 = '1' THEN + Read_cmnd (3) := '1'; + Read_bank (3) := Ba; + Read_cols (3) := Addr (8 DOWNTO 0); + ELSIF Cas_latency_2 = '1' THEN + Read_cmnd (4) := '1'; + Read_bank (4) := Ba; + Read_cols (4) := Addr (8 DOWNTO 0); + ELSIF Cas_latency_25 = '1' THEN + Read_cmnd (5) := '1'; + Read_bank (5) := Ba; + Read_cols (5) := Addr (8 DOWNTO 0); + ELSIF Cas_latency_3 = '1' THEN + Read_cmnd (6) := '1'; + Read_bank (6) := Ba; + Read_cols (6) := Addr (8 DOWNTO 0); + ELSIF Cas_latency_4 = '1' THEN + Read_cmnd (8) := '1'; + Read_bank (8) := Ba; + Read_cols (8) := Addr (8 DOWNTO 0); + END IF; + + -- Write to Read: Terminate Write Immediately + IF Data_in_enable = '1' THEN + Data_in_enable := '0'; + END IF; + + -- Interrupting a Read with Auto Precharge (same bank only) + ASSERT (Read_precharge(CONV_INTEGER(Ba)) = '0') + REPORT "It's illegal to interrupt a Read with Auto Precharge" + SEVERITY WARNING; + + -- Activate to Read + ASSERT ((Ba = "00" AND Act_b0 = '1') OR + (Ba = "01" AND Act_b1 = '1') OR + (Ba = "10" AND Act_b2 = '1') OR + (Ba = "11" AND Act_b3 = '1')) + REPORT "Bank is not Activated for Read" + SEVERITY WARNING; + + -- Activate to Read without Auto Precharge + IF Addr (10) = '0' THEN + ASSERT ((Ba = "00" AND NOW - RCD_chk0 >= tRCD) OR + (Ba = "01" AND NOW - RCD_chk1 >= tRCD) OR + (Ba = "10" AND NOW - RCD_chk2 >= tRCD) OR + (Ba = "11" AND NOW - RCD_chk3 >= tRCD)) + REPORT "tRCD violation during Read" + SEVERITY WARNING; + END IF; + + -- Activate to Read with Auto Precharge + IF Addr (10) = '1' THEN + ASSERT ((Ba = "00" AND NOW - RAP_chk0 >= tRAP) OR + (Ba = "01" AND NOW - RAP_chk1 >= tRAP) OR + (Ba = "10" AND NOW - RAP_chk2 >= tRAP) OR + (Ba = "11" AND NOW - RAP_chk3 >= tRAP)) + REPORT "tRAP violation during Read" + SEVERITY WARNING; + END IF; + + -- Auto precharge + IF Addr (10) = '1' THEN + Read_precharge (Conv_INTEGER(Ba)) := '1'; + Count_precharge (Conv_INTEGER(Ba)) := 0; + END IF; + + -- DLL Check + IF (DLL_reset = '1') THEN + ASSERT (DLL_done = '1') + REPORT "DLL RESET not complete" + SEVERITY WARNING; + END IF; + END IF; + + -- Write Command + IF Write_enable = '1' THEN + -- Pipeline for Write + Write_cmnd (2) := '1'; + Write_bank (2) := Ba; + Write_cols (2) := Addr (8 DOWNTO 0); + + -- Interrupting a Write with Auto Precharge (same bank only) + ASSERT (Write_precharge(CONV_INTEGER(Ba)) = '0') + REPORT "It's illegal to interrupt a Write with Auto Precharge" + SEVERITY WARNING; + + -- Activate to Write + ASSERT ((Ba = "00" AND Act_b0 = '1') OR + (Ba = "01" AND Act_b1 = '1') OR + (Ba = "10" AND Act_b2 = '1') OR + (Ba = "11" AND Act_b3 = '1')) + REPORT "Bank is not Activated for Write" + SEVERITY WARNING; + + -- Activate to Write + ASSERT ((Ba = "00" AND NOW - RCD_chk0 >= tRCD) OR + (Ba = "01" AND NOW - RCD_chk1 >= tRCD) OR + (Ba = "10" AND NOW - RCD_chk2 >= tRCD) OR + (Ba = "11" AND NOW - RCD_chk3 >= tRCD)) + REPORT "tRCD violation during Write" + SEVERITY WARNING; + + -- Auto precharge + IF Addr (10) = '1' THEN + Write_precharge (Conv_INTEGER(Ba)) := '1'; + Count_precharge (Conv_INTEGER(Ba)) := 0; + END IF; + END IF; + END IF; + END PROCESS; + + -- + -- Dqs Receiver + -- + dqs_rcvrs : PROCESS + VARIABLE Dm_temp : STD_LOGIC_VECTOR (1 DOWNTO 0); + VARIABLE Dq_temp : STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0); + BEGIN + WAIT ON Dqs; + -- Latch data at posedge Dqs + IF Dqs'EVENT AND Dqs (1) = '1' AND Dqs (0) = '1' THEN + Dq_temp := Dq; + Dm_temp := Dm; + END IF; + -- Latch data at negedge Dqs + IF Dqs'EVENT AND Dqs (1) = '0' AND Dqs (0) = '0' THEN + Dq_pair <= (Dq & Dq_temp); + Dm_pair <= (Dm & Dm_temp); + END IF; + END PROCESS; + + -- + -- Setup timing checks + -- + Setup_check : PROCESS + BEGIN + WAIT ON Sys_clk; + IF Sys_clk'EVENT AND Sys_clk = '1' THEN + ASSERT(Cke'LAST_EVENT >= tIS) + REPORT "CKE Setup time violation -- tIS" + SEVERITY WARNING; + ASSERT(Cs_n'LAST_EVENT >= tIS) + REPORT "CS# Setup time violation -- tIS" + SEVERITY WARNING; + ASSERT(Cas_n'LAST_EVENT >= tIS) + REPORT "CAS# Setup time violation -- tIS" + SEVERITY WARNING; + ASSERT(Ras_n'LAST_EVENT >= tIS) + REPORT "RAS# Setup time violation -- tIS" + SEVERITY WARNING; + ASSERT(We_n'LAST_EVENT >= tIS) + REPORT "WE# Setup time violation -- tIS" + SEVERITY WARNING; + ASSERT(Addr'LAST_EVENT >= tIS) + REPORT "ADDR Setup time violation -- tIS" + SEVERITY WARNING; + ASSERT(Ba'LAST_EVENT >= tIS) + REPORT "BA Setup time violation -- tIS" + SEVERITY WARNING; + END IF; + END PROCESS; + + -- + -- Hold timing checks + -- + Hold_check : PROCESS + BEGIN + WAIT ON Sys_clk'DELAYED (tIH); + IF Sys_clk'DELAYED (tIH) = '1' THEN + ASSERT(Cke'LAST_EVENT >= tIH) + REPORT "CKE Hold time violation -- tIH" + SEVERITY WARNING; + ASSERT(Cs_n'LAST_EVENT >= tIH) + REPORT "CS# Hold time violation -- tIH" + SEVERITY WARNING; + ASSERT(Cas_n'LAST_EVENT >= tIH) + REPORT "CAS# Hold time violation -- tIH" + SEVERITY WARNING; + ASSERT(Ras_n'LAST_EVENT >= tIH) + REPORT "RAS# Hold time violation -- tIH" + SEVERITY WARNING; + ASSERT(We_n'LAST_EVENT >= tIH) + REPORT "WE# Hold time violation -- tIH" + SEVERITY WARNING; + ASSERT(Addr'LAST_EVENT >= tIH) + REPORT "ADDR Hold time violation -- tIH" + SEVERITY WARNING; + ASSERT(Ba'LAST_EVENT >= tIH) + REPORT "BA Hold time violation -- tIH" + SEVERITY WARNING; + END IF; + END PROCESS; + +END behave; diff --git a/zpu/hdl/zpu4/src/.cvsignore b/zpu/hdl/zpu4/src/.cvsignore new file mode 100644 index 0000000..41c40a0 --- /dev/null +++ b/zpu/hdl/zpu4/src/.cvsignore @@ -0,0 +1,5 @@ +work +vsim.wlf +xilinx_device_details.xml +tcl_stacktrace.txt +vish_stacktrace.vstf diff --git a/zpu/hdl/zpu4/src/bram.vhd b/zpu/hdl/zpu4/src/bram.vhd new file mode 100644 index 0000000..435f3f4 --- /dev/null +++ b/zpu/hdl/zpu4/src/bram.vhd @@ -0,0 +1,3807 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + + +library zylin; +use zylin.zpu_config.all; +use zylin.zpupkg.all; + +entity dram is +port (clk : in std_logic; + areset : in std_logic; + mem_writeEnable : in std_logic; + mem_readEnable : in std_logic; + mem_addr : in std_logic_vector(maxAddrBit downto 0); + mem_write : in std_logic_vector(wordSize-1 downto 0); + mem_read : out std_logic_vector(wordSize-1 downto 0); + mem_busy : out std_logic; + mem_writeMask : in std_logic_vector(wordBytes-1 downto 0)); +end dram; + +architecture dram_arch of dram is + +type ram_type is array(0 to ((2**(maxAddrBit+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); + +shared variable ram : ram_type := +( +0 => x"800b0b0b", +1 => x"0b0b8070", +2 => x"0b0b80e5", +3 => x"d00c3a0b", +4 => x"0b0bbed7", +5 => x"04000000", +6 => x"00000000", +7 => x"00000000", +8 => x"80088408", +9 => x"88080b0b", +10 => x"0bbfa72d", +11 => x"880c840c", +12 => x"800c0400", +13 => x"00000000", +14 => x"00000000", +15 => x"00000000", +16 => x"71fd0608", +17 => x"72830609", +18 => x"81058205", +19 => x"832b2a83", +20 => x"ffff0652", +21 => x"0b0b0400", +22 => x"00000000", +23 => x"00000000", +24 => x"71fd0608", +25 => x"83ffff73", +26 => x"83060981", +27 => x"05820583", +28 => x"2b2b0906", +29 => x"7383ffff", +30 => x"0b0b0b0b", +31 => x"83a70400", +32 => x"72098105", +33 => x"72057373", +34 => x"09060906", +35 => x"73097306", +36 => x"070a8106", +37 => x"530b0b51", +38 => x"04000000", +39 => x"00000000", +40 => x"72722473", +41 => x"732e0753", +42 => x"0b0b5104", +43 => x"00000000", +44 => x"00000000", +45 => x"00000000", +46 => x"00000000", +47 => x"00000000", +48 => x"71737109", +49 => x"71068106", +50 => x"30720a10", +51 => x"0a720a10", +52 => x"0a31050a", +53 => x"81065151", +54 => x"530b0b51", +55 => x"04000000", +56 => x"72722673", +57 => x"732e0753", +58 => x"0b0b5104", +59 => x"00000000", +60 => x"00000000", +61 => x"00000000", +62 => x"00000000", +63 => x"00000000", +64 => x"00000000", +65 => x"00000000", +66 => x"00000000", +67 => x"00000000", +68 => x"00000000", +69 => x"00000000", +70 => x"00000000", +71 => x"00000000", +72 => x"0b0b0b88", +73 => x"c6040000", +74 => x"00000000", +75 => x"00000000", +76 => x"00000000", +77 => x"00000000", +78 => x"00000000", +79 => x"00000000", +80 => x"720a722b", +81 => x"0a530b0b", +82 => x"51040000", +83 => x"00000000", +84 => x"00000000", +85 => x"00000000", +86 => x"00000000", +87 => x"00000000", +88 => x"72729f06", +89 => x"0981050b", +90 => x"0b0b88a7", +91 => x"05040000", +92 => x"00000000", +93 => x"00000000", +94 => x"00000000", +95 => x"00000000", +96 => x"72722aff", +97 => x"739f062a", +98 => x"0974090a", +99 => x"8106ff05", +100 => x"0607530b", +101 => x"0b510400", +102 => x"00000000", +103 => x"00000000", +104 => x"7171530b", +105 => x"0b510406", +106 => x"73830609", +107 => x"81058205", +108 => x"832b0b2b", +109 => x"0772fc06", +110 => x"0c515104", +111 => x"00000000", +112 => x"72098105", +113 => x"72050970", +114 => x"81050906", +115 => x"0a810653", +116 => x"0b0b5104", +117 => x"00000000", +118 => x"00000000", +119 => x"00000000", +120 => x"72098105", +121 => x"72050970", +122 => x"81050906", +123 => x"0a098106", +124 => x"530b0b51", +125 => x"04000000", +126 => x"00000000", +127 => x"00000000", +128 => x"71098105", +129 => x"520b0b04", +130 => x"00000000", +131 => x"00000000", +132 => x"00000000", +133 => x"00000000", +134 => x"00000000", +135 => x"00000000", +136 => x"72720981", +137 => x"0505530b", +138 => x"0b510400", +139 => x"00000000", +140 => x"00000000", +141 => x"00000000", +142 => x"00000000", +143 => x"00000000", +144 => x"72097206", +145 => x"73730906", +146 => x"07530b0b", +147 => x"51040000", +148 => x"00000000", +149 => x"00000000", +150 => x"00000000", +151 => x"00000000", +152 => x"71fc0608", +153 => x"72830609", +154 => x"81058305", +155 => x"1010102a", +156 => x"81ff0652", +157 => x"0b0b0400", +158 => x"00000000", +159 => x"00000000", +160 => x"71fc0608", +161 => x"0b0b80e5", +162 => x"bc738306", +163 => x"10100508", +164 => x"060b0b0b", +165 => x"88ac0400", +166 => x"00000000", +167 => x"00000000", +168 => x"80088408", +169 => x"88087575", +170 => x"0b0b0ba3", +171 => x"fa2d5050", +172 => x"80085688", +173 => x"0c840c80", +174 => x"0c510400", +175 => x"00000000", +176 => x"80088408", +177 => x"88087575", +178 => x"0b0b0ba4", +179 => x"ca2d5050", +180 => x"80085688", +181 => x"0c840c80", +182 => x"0c510400", +183 => x"00000000", +184 => x"72097081", +185 => x"0509060a", +186 => x"8106ff05", +187 => x"70540b0b", +188 => x"71067309", +189 => x"727405ff", +190 => x"05060751", +191 => x"51510400", +192 => x"72097081", +193 => x"0509060a", +194 => x"098106ff", +195 => x"0570540b", +196 => x"0b710673", +197 => x"09727405", +198 => x"ff050607", +199 => x"51515104", +200 => x"05ff0504", +201 => x"00000000", +202 => x"00000000", +203 => x"00000000", +204 => x"00000000", +205 => x"00000000", +206 => x"00000000", +207 => x"00000000", +208 => x"810b0b0b", +209 => x"80e5cc0c", +210 => x"51040000", +211 => x"00000000", +212 => x"00000000", +213 => x"00000000", +214 => x"00000000", +215 => x"00000000", +216 => x"71810552", +217 => x"0b0b0400", +218 => x"00000000", +219 => x"00000000", +220 => x"00000000", +221 => x"00000000", +222 => x"00000000", +223 => x"00000000", +224 => x"00000000", +225 => x"00000000", +226 => x"00000000", +227 => x"00000000", +228 => x"00000000", +229 => x"00000000", +230 => x"00000000", +231 => x"00000000", +232 => x"02840572", +233 => x"10100552", +234 => x"0b0b0400", +235 => x"00000000", +236 => x"00000000", +237 => x"00000000", +238 => x"00000000", +239 => x"00000000", +240 => x"00000000", +241 => x"00000000", +242 => x"00000000", +243 => x"00000000", +244 => x"00000000", +245 => x"00000000", +246 => x"00000000", +247 => x"00000000", +248 => x"717105ff", +249 => x"0571530b", +250 => x"0b510400", +251 => x"00000000", +252 => x"00000000", +253 => x"00000000", +254 => x"00000000", +255 => x"00000000", +256 => x"84803f80", +257 => x"cef23f04", +258 => x"10101010", +259 => x"10101010", +260 => x"10101010", +261 => x"10101010", +262 => x"10101010", +263 => x"10101010", +264 => x"10101010", +265 => x"10101053", +266 => x"0b0b5104", +267 => x"7381ff06", +268 => x"73830609", +269 => x"81058305", +270 => x"1010102b", +271 => x"0772fc06", +272 => x"0c515104", +273 => x"3c047272", +274 => x"80728106", +275 => x"ff050972", +276 => x"06057110", +277 => x"520b0b72", +278 => x"0a100a53", +279 => x"0b0b72e9", +280 => x"38515153", +281 => x"0b0b5104", +282 => x"70700b0b", +283 => x"80f5c008", +284 => x"520b0b84", +285 => x"0b720508", +286 => x"70810651", +287 => x"510b0b70", +288 => x"f2387108", +289 => x"81ff0680", +290 => x"0c505004", +291 => x"70700b0b", +292 => x"80f5c008", +293 => x"520b0b84", +294 => x"0b720508", +295 => x"700a100a", +296 => x"70810651", +297 => x"51510b0b", +298 => x"70ed3873", +299 => x"720c5050", +300 => x"0480e5cc", +301 => x"08802ea8", +302 => x"38838080", +303 => x"0b0b0b80", +304 => x"f5c00c82", +305 => x"a0800b0b", +306 => x"0b80f5c4", +307 => x"0c829080", +308 => x"0b80f5d4", +309 => x"0c0b0b80", +310 => x"f5c80b80", +311 => x"f5d80c04", +312 => x"f8808080", +313 => x"a40b0b0b", +314 => x"80f5c00c", +315 => x"f8808082", +316 => x"800b0b0b", +317 => x"80f5c40c", +318 => x"f8808084", +319 => x"800b80f5", +320 => x"d40cf880", +321 => x"8080940b", +322 => x"80f5d80c", +323 => x"f8808080", +324 => x"9c0b80f5", +325 => x"d00cf880", +326 => x"8080a00b", +327 => x"80f5dc0c", +328 => x"04f23d0d", +329 => x"600b0b80", +330 => x"f5c40856", +331 => x"5d82750c", +332 => x"8059805a", +333 => x"800b8f3d", +334 => x"71101017", +335 => x"70085957", +336 => x"5d5b8076", +337 => x"81ff067c", +338 => x"832b5658", +339 => x"520b0b0b", +340 => x"76530b0b", +341 => x"7b5198c6", +342 => x"3f7d7f7a", +343 => x"72077c72", +344 => x"07717160", +345 => x"8105415f", +346 => x"5d5b5957", +347 => x"557a8724", +348 => x"80c1380b", +349 => x"0b80f5c4", +350 => x"087b1010", +351 => x"71057008", +352 => x"58515580", +353 => x"7681ff06", +354 => x"7c832b56", +355 => x"58520b0b", +356 => x"0b76530b", +357 => x"0b7b5198", +358 => x"853f7d7f", +359 => x"7a72077c", +360 => x"72077171", +361 => x"60810541", +362 => x"5f5d5b59", +363 => x"5755877b", +364 => x"25c13876", +365 => x"7d0c7784", +366 => x"1e0c7c80", +367 => x"0c903d0d", +368 => x"04707080", +369 => x"f5cc3351", +370 => x"0b0b70b2", +371 => x"3880e5d8", +372 => x"08700852", +373 => x"0b0b520b", +374 => x"0b0b7080", +375 => x"2e9a3884", +376 => x"720580e5", +377 => x"d80c702d", +378 => x"80e5d808", +379 => x"7008520b", +380 => x"0b520b0b", +381 => x"0b70e838", +382 => x"810b80f5", +383 => x"cc345050", +384 => x"0404700b", +385 => x"0b80f5bc", +386 => x"08802e8e", +387 => x"380b0b0b", +388 => x"0b800b80", +389 => x"2e098106", +390 => x"83385004", +391 => x"0b0b80f5", +392 => x"bc510b0b", +393 => x"0bf3d93f", +394 => x"50040470", +395 => x"70028f05", +396 => x"33520b0b", +397 => x"0b0b718a", +398 => x"2e893871", +399 => x"51fccd3f", +400 => x"5050048d", +401 => x"51fcc53f", +402 => x"7151fcc0", +403 => x"3f505004", +404 => x"cd3d0db6", +405 => x"3d707084", +406 => x"05520b0b", +407 => x"088cab5d", +408 => x"56a63d5f", +409 => x"5d807570", +410 => x"81055733", +411 => x"765c5559", +412 => x"0b730b79", +413 => x"2e80ca38", +414 => x"8f3d5c73", +415 => x"a52e0981", +416 => x"0680cf38", +417 => x"79708105", +418 => x"5b33540b", +419 => x"0b7380e4", +420 => x"2e81c838", +421 => x"7380e424", +422 => x"80d13873", +423 => x"80e32ea8", +424 => x"3880520b", +425 => x"0ba5517a", +426 => x"2d80520b", +427 => x"0b73517a", +428 => x"2d821959", +429 => x"79708105", +430 => x"5b33540b", +431 => x"0b73ffbb", +432 => x"3878800c", +433 => x"b53d0d04", +434 => x"7c841e83", +435 => x"72053356", +436 => x"5e578052", +437 => x"0b0b7351", +438 => x"7a2d8119", +439 => x"7a708105", +440 => x"5c335559", +441 => x"0b73ff93", +442 => x"38d73973", +443 => x"80f32e09", +444 => x"8106ffad", +445 => x"387c841e", +446 => x"7108595e", +447 => x"56807733", +448 => x"56560b74", +449 => x"0b762e8d", +450 => x"38811670", +451 => x"1870335a", +452 => x"555677f5", +453 => x"38ff1655", +454 => x"807625ff", +455 => x"97387670", +456 => x"81055833", +457 => x"5880520b", +458 => x"0b77517a", +459 => x"2d811975", +460 => x"ff175757", +461 => x"59807625", +462 => x"fefa3876", +463 => x"70810558", +464 => x"33588052", +465 => x"0b0b7751", +466 => x"7a2d8119", +467 => x"75ff1757", +468 => x"57590b75", +469 => x"8024c738", +470 => x"feda397c", +471 => x"841e7108", +472 => x"70719f2c", +473 => x"59530b0b", +474 => x"595e5680", +475 => x"7524818d", +476 => x"38757e7d", +477 => x"58595580", +478 => x"57740b77", +479 => x"2e098106", +480 => x"bc38b07c", +481 => x"3402b905", +482 => x"567b0b76", +483 => x"2e9938ff", +484 => x"16560b0b", +485 => x"75337870", +486 => x"81055a34", +487 => x"8117577b", +488 => x"762e0981", +489 => x"06e93880", +490 => x"7834767e", +491 => x"ff720557", +492 => x"58560b0b", +493 => x"758024fe", +494 => x"e538fdf8", +495 => x"398a7536", +496 => x"0b0b80d7", +497 => x"b005540b", +498 => x"0b733376", +499 => x"70810558", +500 => x"348a7535", +501 => x"550b0b74", +502 => x"802effad", +503 => x"388a7536", +504 => x"0b0b80d7", +505 => x"b005540b", +506 => x"0b733376", +507 => x"70810558", +508 => x"348a7535", +509 => x"550b0b74", +510 => x"c438ff8d", +511 => x"3974520b", +512 => x"0b76530b", +513 => x"0bb53dff", +514 => x"b8055192", +515 => x"dc3fa43d", +516 => x"0856fedd", +517 => x"397080c1", +518 => x"0b81c48c", +519 => x"34800b81", +520 => x"c5e40c70", +521 => x"800c5004", +522 => x"7070800b", +523 => x"81c48c33", +524 => x"520b0b52", +525 => x"0b0b0b70", +526 => x"80c12e98", +527 => x"387181c5", +528 => x"e4080781", +529 => x"c5e40c80", +530 => x"c20b81c4", +531 => x"90347080", +532 => x"0c505004", +533 => x"810b81c5", +534 => x"e4080781", +535 => x"c5e40c80", +536 => x"c20b81c4", +537 => x"90347080", +538 => x"0c505004", +539 => x"70707070", +540 => x"7570088a", +541 => x"05530b0b", +542 => x"530b0b81", +543 => x"c48c3351", +544 => x"0b0b7080", +545 => x"c12e8c38", +546 => x"73f13870", +547 => x"800c5050", +548 => x"505004ff", +549 => x"72057081", +550 => x"c4880831", +551 => x"740c800c", +552 => x"50505050", +553 => x"04fc3d0d", +554 => x"81c49408", +555 => x"550b0b74", +556 => x"802e8e38", +557 => x"76750871", +558 => x"0c81c494", +559 => x"0856540b", +560 => x"0b8c1553", +561 => x"0b0b81c4", +562 => x"8808520b", +563 => x"0b8a518e", +564 => x"e93f7380", +565 => x"0c863d0d", +566 => x"04fb3d0d", +567 => x"77700856", +568 => x"56b0530b", +569 => x"0b81c494", +570 => x"08520b0b", +571 => x"7451a1ff", +572 => x"3f850b8c", +573 => x"170c850b", +574 => x"8c160c75", +575 => x"08750c81", +576 => x"c4940854", +577 => x"0b0b7380", +578 => x"2e8c3873", +579 => x"08750c81", +580 => x"c4940854", +581 => x"0b0b8c14", +582 => x"530b0b81", +583 => x"c4880852", +584 => x"0b0b8a51", +585 => x"8e943f84", +586 => x"1508b738", +587 => x"860b8c16", +588 => x"0c881552", +589 => x"0b0b8816", +590 => x"08518d96", +591 => x"3f81c494", +592 => x"08700876", +593 => x"0c540b0b", +594 => x"8c157054", +595 => x"0b0b540b", +596 => x"0b8a520b", +597 => x"0b730851", +598 => x"8de03f73", +599 => x"800c873d", +600 => x"0d047508", +601 => x"540b0bb0", +602 => x"530b0b73", +603 => x"520b0b75", +604 => x"51a0fc3f", +605 => x"73800c87", +606 => x"3d0d04e1", +607 => x"3d0db051", +608 => x"93833f80", +609 => x"0881c484", +610 => x"0cb05192", +611 => x"f83f8008", +612 => x"81c4940c", +613 => x"81c48408", +614 => x"80080c80", +615 => x"0b800884", +616 => x"050c820b", +617 => x"80088805", +618 => x"0ca80b80", +619 => x"088c050c", +620 => x"9f530b0b", +621 => x"0b0b80d7", +622 => x"bc520b0b", +623 => x"80089005", +624 => x"51a0ac3f", +625 => x"993d5c9f", +626 => x"530b0b0b", +627 => x"0b80d7dc", +628 => x"520b0b7b", +629 => x"51a0983f", +630 => x"8a0b8182", +631 => x"cc0c0b0b", +632 => x"80e28051", +633 => x"f8ea3f0b", +634 => x"0b80d7fc", +635 => x"51f8e13f", +636 => x"0b0b80e2", +637 => x"8051f8d8", +638 => x"3f80e5e0", +639 => x"08802e8a", +640 => x"a1380b0b", +641 => x"80d8ac51", +642 => x"f8c63f0b", +643 => x"0b80e280", +644 => x"51f8bd3f", +645 => x"80e5dc08", +646 => x"520b0b0b", +647 => x"0b80d8d8", +648 => x"51f8ad3f", +649 => x"8051b488", +650 => x"3f800880", +651 => x"f5ec0c81", +652 => x"0b923d5c", +653 => x"58800b80", +654 => x"e5dc0825", +655 => x"8383388e", +656 => x"3d5d80c1", +657 => x"0b81c48c", +658 => x"34810b81", +659 => x"c5e40c80", +660 => x"c20b81c4", +661 => x"9034825e", +662 => x"835a9f53", +663 => x"0b0b0b0b", +664 => x"80d98852", +665 => x"0b0b7a51", +666 => x"9f853f81", +667 => x"5f807b53", +668 => x"0b0b7c52", +669 => x"0b0b558c", +670 => x"f43f8008", +671 => x"752e0981", +672 => x"06833881", +673 => x"550b0b74", +674 => x"81c5e40c", +675 => x"7d705755", +676 => x"0b0b7483", +677 => x"25a63874", +678 => x"101015fd", +679 => x"0540a13d", +680 => x"ffbc0553", +681 => x"0b0b8352", +682 => x"0b0b7551", +683 => x"8b8c3f81", +684 => x"1e705f70", +685 => x"5755830b", +686 => x"7524dc38", +687 => x"7f540b0b", +688 => x"74530b0b", +689 => x"80f5f052", +690 => x"0b0b81c4", +691 => x"9c518af6", +692 => x"3f81c494", +693 => x"08700857", +694 => x"57b0530b", +695 => x"0b76520b", +696 => x"0b75519e", +697 => x"8a3f850b", +698 => x"8c180c85", +699 => x"0b8c170c", +700 => x"7608760c", +701 => x"81c49408", +702 => x"550b0b74", +703 => x"802e8a38", +704 => x"7408760c", +705 => x"81c49408", +706 => x"558c1553", +707 => x"0b0b81c4", +708 => x"8808520b", +709 => x"0b8a518a", +710 => x"a13f8416", +711 => x"08888c38", +712 => x"860b8c17", +713 => x"0c881652", +714 => x"0b0b8817", +715 => x"085189a2", +716 => x"3f81c494", +717 => x"08700877", +718 => x"0c578c16", +719 => x"70540b0b", +720 => x"558a520b", +721 => x"0b740851", +722 => x"89f03f80", +723 => x"c10b81c4", +724 => x"90335656", +725 => x"0b0b7575", +726 => x"26a83880", +727 => x"c3520b0b", +728 => x"75518adb", +729 => x"3f80087f", +730 => x"2e87ff38", +731 => x"81167081", +732 => x"ff0681c4", +733 => x"9033520b", +734 => x"0b57550b", +735 => x"0b747627", +736 => x"da38797e", +737 => x"29607072", +738 => x"35704172", +739 => x"72317087", +740 => x"2972315e", +741 => x"530b0b8a", +742 => x"0581c48c", +743 => x"3381c488", +744 => x"085a520b", +745 => x"0b520b0b", +746 => x"58550b76", +747 => x"80c12e87", +748 => x"f03878f6", +749 => x"38811858", +750 => x"80e5dc08", +751 => x"7825fd82", +752 => x"388051b0", +753 => x"eb3f8008", +754 => x"81c4800c", +755 => x"0b0b80d9", +756 => x"a851f4fc", +757 => x"3f0b0b80", +758 => x"e28051f4", +759 => x"f33f0b0b", +760 => x"80d9b851", +761 => x"f4ea3f0b", +762 => x"0b80e280", +763 => x"51f4e13f", +764 => x"81c48808", +765 => x"520b0b0b", +766 => x"0b80d9f0", +767 => x"51f4d13f", +768 => x"85520b0b", +769 => x"0b0b80da", +770 => x"8c51f4c4", +771 => x"3f81c5e4", +772 => x"08520b0b", +773 => x"0b0b80da", +774 => x"a851f4b4", +775 => x"3f81520b", +776 => x"0b0b0b80", +777 => x"da8c51f4", +778 => x"a73f81c4", +779 => x"8c33520b", +780 => x"0b0b0b80", +781 => x"dac451f4", +782 => x"973f80c1", +783 => x"520b0b0b", +784 => x"0b80dae0", +785 => x"51f4893f", +786 => x"81c49033", +787 => x"520b0b0b", +788 => x"0b80dafc", +789 => x"51f3f93f", +790 => x"80c2520b", +791 => x"0b0b0b80", +792 => x"dae051f3", +793 => x"eb3f81c4", +794 => x"bc08520b", +795 => x"0b0b0b80", +796 => x"db9851f3", +797 => x"db3f8752", +798 => x"0b0b0b0b", +799 => x"80da8c51", +800 => x"f3ce3f81", +801 => x"82cc0852", +802 => x"0b0b0b0b", +803 => x"80dbb451", +804 => x"f3be3f0b", +805 => x"0b80dbd0", +806 => x"51f3b53f", +807 => x"0b0b80db", +808 => x"fc51f3ac", +809 => x"3f81c494", +810 => x"08700853", +811 => x"0b0b560b", +812 => x"0b80dc88", +813 => x"51f3993f", +814 => x"0b0b80dc", +815 => x"a451f390", +816 => x"3f81c494", +817 => x"08847105", +818 => x"08530b0b", +819 => x"5d0b0b80", +820 => x"dcd851f2", +821 => x"fb3f8052", +822 => x"0b0b0b0b", +823 => x"80da8c51", +824 => x"f2ee3f81", +825 => x"c4940888", +826 => x"71050853", +827 => x"0b0b580b", +828 => x"0b80dcf4", +829 => x"51f2d93f", +830 => x"82520b0b", +831 => x"0b0b80da", +832 => x"8c51f2cc", +833 => x"3f81c494", +834 => x"088c7105", +835 => x"08530b0b", +836 => x"590b0b80", +837 => x"dd9051f2", +838 => x"b73f9152", +839 => x"0b0b0b0b", +840 => x"80da8c51", +841 => x"f2aa3f81", +842 => x"c4940890", +843 => x"05520b0b", +844 => x"0b0b80dd", +845 => x"ac51f298", +846 => x"3f0b0b80", +847 => x"ddc851f2", +848 => x"8f3f0b0b", +849 => x"80de8051", +850 => x"f2863f81", +851 => x"c4840870", +852 => x"08530b0b", +853 => x"570b0b80", +854 => x"dc8851f1", +855 => x"f33f0b0b", +856 => x"80de9451", +857 => x"f1ea3f81", +858 => x"c4840884", +859 => x"71050853", +860 => x"0b0b550b", +861 => x"0b80dcd8", +862 => x"51f1d53f", +863 => x"80520b0b", +864 => x"0b0b80da", +865 => x"8c51f1c8", +866 => x"3f81c484", +867 => x"08887105", +868 => x"08530b0b", +869 => x"560b0b80", +870 => x"dcf451f1", +871 => x"b33f8152", +872 => x"0b0b0b0b", +873 => x"80da8c51", +874 => x"f1a63f81", +875 => x"c484088c", +876 => x"71050853", +877 => x"0b0b5d0b", +878 => x"0b80dd90", +879 => x"51f1913f", +880 => x"92520b0b", +881 => x"0b0b80da", +882 => x"8c51f184", +883 => x"3f81c484", +884 => x"08900552", +885 => x"0b0b0b0b", +886 => x"80ddac51", +887 => x"f0f23f0b", +888 => x"0b80ddc8", +889 => x"51f0e93f", +890 => x"7d520b0b", +891 => x"0b0b80de", +892 => x"d451f0dc", +893 => x"3f85520b", +894 => x"0b0b0b80", +895 => x"da8c51f0", +896 => x"cf3f7952", +897 => x"0b0b0b0b", +898 => x"80def051", +899 => x"f0c23f8d", +900 => x"520b0b0b", +901 => x"0b80da8c", +902 => x"51f0b53f", +903 => x"7f520b0b", +904 => x"0b0b80df", +905 => x"8c51f0a8", +906 => x"3f87520b", +907 => x"0b0b0b80", +908 => x"da8c51f0", +909 => x"9b3f7e52", +910 => x"0b0b0b0b", +911 => x"80dfa851", +912 => x"f08e3f81", +913 => x"520b0b0b", +914 => x"0b80da8c", +915 => x"51f0813f", +916 => x"7b520b0b", +917 => x"0b0b80df", +918 => x"c451eff4", +919 => x"3f0b0b80", +920 => x"dfe051ef", +921 => x"eb3f7a52", +922 => x"0b0b0b0b", +923 => x"80e09851", +924 => x"efde3f0b", +925 => x"0b80e0b4", +926 => x"51efd53f", +927 => x"0b0b80e2", +928 => x"8051efcc", +929 => x"3f81c480", +930 => x"0880f5ec", +931 => x"08317080", +932 => x"f5e80c52", +933 => x"0b0b0b0b", +934 => x"80e0ec51", +935 => x"efb23f80", +936 => x"f5e80856", +937 => x"810b7625", +938 => x"819d3880", +939 => x"e5dc0870", +940 => x"77bd84c0", +941 => x"293580f5", +942 => x"e00c7671", +943 => x"3580f5e4", +944 => x"0c768ddd", +945 => x"297187e8", +946 => x"293581c4", +947 => x"980c5b0b", +948 => x"0b80e0fc", +949 => x"51eef93f", +950 => x"80f5e008", +951 => x"520b0b0b", +952 => x"0b80e1ac", +953 => x"51eee93f", +954 => x"0b0b80e1", +955 => x"b451eee0", +956 => x"3f80f5e4", +957 => x"08520b0b", +958 => x"0b0b80e1", +959 => x"ac51eed0", +960 => x"3f81c498", +961 => x"08520b0b", +962 => x"0b0b80e1", +963 => x"e451eec0", +964 => x"3f0b0b80", +965 => x"e28051ee", +966 => x"b73f800b", +967 => x"800ca13d", +968 => x"0d040b0b", +969 => x"80e28451", +970 => x"f5de3976", +971 => x"0856b053", +972 => x"0b0b7552", +973 => x"0b0b7651", +974 => x"95b53f80", +975 => x"c10b81c4", +976 => x"90335656", +977 => x"f88e390b", +978 => x"0b80e2b4", +979 => x"51ee813f", +980 => x"0b0b80e2", +981 => x"ec51edf8", +982 => x"3f0b0b80", +983 => x"e28051ed", +984 => x"ef3f800b", +985 => x"800ca13d", +986 => x"0d04a13d", +987 => x"ffb80552", +988 => x"0b0b8051", +989 => x"80dc3f9f", +990 => x"530b0b0b", +991 => x"0b80e38c", +992 => x"520b0b7a", +993 => x"5194e83f", +994 => x"777881c4", +995 => x"880c8117", +996 => x"7081ff06", +997 => x"81c49033", +998 => x"520b0b58", +999 => x"565af7db", +1000 => x"39ff1570", +1001 => x"77317e0c", +1002 => x"59800b81", +1003 => x"19595980", +1004 => x"e5dc0878", +1005 => x"25f58b38", +1006 => x"f8873970", +1007 => x"70738232", +1008 => x"70307072", +1009 => x"07802580", +1010 => x"0c520b0b", +1011 => x"520b0b50", +1012 => x"50047070", +1013 => x"70747671", +1014 => x"530b0b54", +1015 => x"0b0b520b", +1016 => x"0b0b0b71", +1017 => x"822e8338", +1018 => x"83517181", +1019 => x"2e9a3881", +1020 => x"72269f38", +1021 => x"71822eb8", +1022 => x"3871842e", +1023 => x"a9387073", +1024 => x"0c70800c", +1025 => x"50505004", +1026 => x"80e40b81", +1027 => x"c4880825", +1028 => x"8b388073", +1029 => x"0c70800c", +1030 => x"50505004", +1031 => x"83730c70", +1032 => x"800c5050", +1033 => x"50048273", +1034 => x"0c70800c", +1035 => x"50505004", +1036 => x"81730c70", +1037 => x"800c5050", +1038 => x"50047074", +1039 => x"74148205", +1040 => x"710c800c", +1041 => x"5004f73d", +1042 => x"0d7b7d7f", +1043 => x"61857205", +1044 => x"70822b75", +1045 => x"71057074", +1046 => x"71708405", +1047 => x"530b0b0c", +1048 => x"5a5a5d5b", +1049 => x"760c7980", +1050 => x"f8180c79", +1051 => x"86720552", +1052 => x"0b0b5758", +1053 => x"5a5a7676", +1054 => x"249e3876", +1055 => x"b329822b", +1056 => x"79710551", +1057 => x"530b0b76", +1058 => x"73708405", +1059 => x"550c8114", +1060 => x"540b0b75", +1061 => x"7425f038", +1062 => x"7681cc29", +1063 => x"19fc7105", +1064 => x"088105fc", +1065 => x"72050c7a", +1066 => x"1970089f", +1067 => x"a073050c", +1068 => x"5856850b", +1069 => x"81c4880c", +1070 => x"75800c8b", +1071 => x"3d0d0470", +1072 => x"70700293", +1073 => x"05335180", +1074 => x"02840597", +1075 => x"0533540b", +1076 => x"0b520b0b", +1077 => x"70732e88", +1078 => x"3871800c", +1079 => x"50505004", +1080 => x"7081c48c", +1081 => x"34810b80", +1082 => x"0c505050", +1083 => x"04f83d0d", +1084 => x"7a7c5956", +1085 => x"820b8319", +1086 => x"55550b0b", +1087 => x"74167033", +1088 => x"75335b51", +1089 => x"530b0b72", +1090 => x"792e80cf", +1091 => x"3880c10b", +1092 => x"81168116", +1093 => x"56565782", +1094 => x"7525df38", +1095 => x"ffa91770", +1096 => x"81ff0655", +1097 => x"590b7382", +1098 => x"26833887", +1099 => x"5581530b", +1100 => x"0b7680d2", +1101 => x"2e9e3877", +1102 => x"520b0b75", +1103 => x"5193b53f", +1104 => x"80530b0b", +1105 => x"72800825", +1106 => x"8b388715", +1107 => x"81c4880c", +1108 => x"81530b0b", +1109 => x"72800c8a", +1110 => x"3d0d0472", +1111 => x"81c48c34", +1112 => x"827525ff", +1113 => x"9538ffb4", +1114 => x"39f93d0d", +1115 => x"797b7d54", +1116 => x"0b0b5872", +1117 => x"59773079", +1118 => x"70307072", +1119 => x"079f2a73", +1120 => x"71315a52", +1121 => x"0b0b5977", +1122 => x"0b795673", +1123 => x"0c530b0b", +1124 => x"73847305", +1125 => x"0c540b0b", +1126 => x"800c893d", +1127 => x"0d04f93d", +1128 => x"0d797b7d", +1129 => x"7f56540b", +1130 => x"0b520b0b", +1131 => x"540b0b72", +1132 => x"802ea638", +1133 => x"70577158", +1134 => x"a0733152", +1135 => x"0b0b800b", +1136 => x"7225a638", +1137 => x"7770742b", +1138 => x"5770732a", +1139 => x"78752b07", +1140 => x"56510b74", +1141 => x"76530b0b", +1142 => x"510b0b70", +1143 => x"740c7184", +1144 => x"150c7380", +1145 => x"0c893d0d", +1146 => x"04805677", +1147 => x"72302b55", +1148 => x"0b0b7476", +1149 => x"530b0b51", +1150 => x"e039fb3d", +1151 => x"0d777955", +1152 => x"5580560b", +1153 => x"0b757524", +1154 => x"b5388074", +1155 => x"24a53880", +1156 => x"530b0b73", +1157 => x"520b0b74", +1158 => x"5180f33f", +1159 => x"8008540b", +1160 => x"0b75802e", +1161 => x"87388008", +1162 => x"30540b0b", +1163 => x"73800c87", +1164 => x"3d0d0473", +1165 => x"30768132", +1166 => x"57540b0b", +1167 => x"d2397430", +1168 => x"55815673", +1169 => x"8025c838", +1170 => x"ea39fa3d", +1171 => x"0d787a57", +1172 => x"5580570b", +1173 => x"0b767524", +1174 => x"ae38759f", +1175 => x"2c540b0b", +1176 => x"81530b0b", +1177 => x"75743274", +1178 => x"31520b0b", +1179 => x"74519f3f", +1180 => x"8008540b", +1181 => x"0b76802e", +1182 => x"87388008", +1183 => x"30540b0b", +1184 => x"73800c88", +1185 => x"3d0d0474", +1186 => x"30558157", +1187 => x"cd39fc3d", +1188 => x"0d767853", +1189 => x"0b0b540b", +1190 => x"0b81530b", +1191 => x"0b807473", +1192 => x"26520b0b", +1193 => x"5572802e", +1194 => x"9e387080", +1195 => x"2eb73880", +1196 => x"7224b238", +1197 => x"71107310", +1198 => x"75722653", +1199 => x"0b0b540b", +1200 => x"0b520b0b", +1201 => x"72e43873", +1202 => x"51788338", +1203 => x"74510b0b", +1204 => x"70800c86", +1205 => x"3d0d0472", +1206 => x"0a100a72", +1207 => x"0a100a53", +1208 => x"0b0b530b", +1209 => x"0b72802e", +1210 => x"de387174", +1211 => x"26e93873", +1212 => x"72317574", +1213 => x"07740a10", +1214 => x"0a740a10", +1215 => x"0a555556", +1216 => x"540b0be1", +1217 => x"39707073", +1218 => x"520b0b80", +1219 => x"eea80851", +1220 => x"953f5050", +1221 => x"04707073", +1222 => x"520b0b80", +1223 => x"eea80851", +1224 => x"92dc3f50", +1225 => x"5004f43d", +1226 => x"0d7e608b", +1227 => x"710570f8", +1228 => x"065b5555", +1229 => x"5d729626", +1230 => x"83389058", +1231 => x"800b7824", +1232 => x"74792607", +1233 => x"5580540b", +1234 => x"0b74742e", +1235 => x"09810680", +1236 => x"d5387c51", +1237 => x"8edf3f77", +1238 => x"83f72680", +1239 => x"d0387783", +1240 => x"2a701010", +1241 => x"1080e6a0", +1242 => x"058c7105", +1243 => x"08585854", +1244 => x"0b0b7577", +1245 => x"2e828a38", +1246 => x"841608fc", +1247 => x"068c1708", +1248 => x"88180871", +1249 => x"8c72050c", +1250 => x"8872050c", +1251 => x"5b760584", +1252 => x"71050881", +1253 => x"07847205", +1254 => x"0c530b0b", +1255 => x"7c518e96", +1256 => x"3f881654", +1257 => x"0b0b7380", +1258 => x"0c8e3d0d", +1259 => x"0477892a", +1260 => x"78832a58", +1261 => x"540b0b73", +1262 => x"802ebf38", +1263 => x"77862ab8", +1264 => x"05578474", +1265 => x"27b43880", +1266 => x"db145794", +1267 => x"7427ab38", +1268 => x"778c2a80", +1269 => x"ee055780", +1270 => x"d474279e", +1271 => x"38778f2a", +1272 => x"80f70557", +1273 => x"82d47427", +1274 => x"91387792", +1275 => x"2a80fc05", +1276 => x"578ad474", +1277 => x"27843880", +1278 => x"fe570b0b", +1279 => x"76101010", +1280 => x"80e6a005", +1281 => x"8c710508", +1282 => x"56530b0b", +1283 => x"74732ea6", +1284 => x"38841508", +1285 => x"fc067079", +1286 => x"3155560b", +1287 => x"738f2489", +1288 => x"d2387380", +1289 => x"2589d438", +1290 => x"8c150855", +1291 => x"0b0b7473", +1292 => x"2e098106", +1293 => x"dc388117", +1294 => x"5980e6b0", +1295 => x"08560b0b", +1296 => x"7580e6a8", +1297 => x"2e82f938", +1298 => x"841608fc", +1299 => x"06707931", +1300 => x"55550b73", +1301 => x"8f2480c2", +1302 => x"3880e6a8", +1303 => x"0b80e6b4", +1304 => x"0c80e6a8", +1305 => x"0b80e6b0", +1306 => x"0c807424", +1307 => x"80e83874", +1308 => x"16847105", +1309 => x"08810784", +1310 => x"72050c53", +1311 => x"0b0bfe9c", +1312 => x"3988168c", +1313 => x"71050857", +1314 => x"590b750b", +1315 => x"792e0981", +1316 => x"06fde538", +1317 => x"821459ff", +1318 => x"a0397716", +1319 => x"78810784", +1320 => x"180c7080", +1321 => x"e6b40c70", +1322 => x"80e6b00c", +1323 => x"80e6a80b", +1324 => x"8c72050c", +1325 => x"8c710508", +1326 => x"8872050c", +1327 => x"74810784", +1328 => x"72050c74", +1329 => x"0574710c", +1330 => x"5b7c518b", +1331 => x"e93f8816", +1332 => x"540b0bfd", +1333 => x"d13983ff", +1334 => x"752783c1", +1335 => x"3874892a", +1336 => x"75832a54", +1337 => x"0b0b540b", +1338 => x"0b73802e", +1339 => x"80cb3874", +1340 => x"862ab805", +1341 => x"530b0b84", +1342 => x"7427be38", +1343 => x"80db1453", +1344 => x"0b0b9474", +1345 => x"27b33874", +1346 => x"8c2a80ee", +1347 => x"05530b0b", +1348 => x"80d47427", +1349 => x"a438748f", +1350 => x"2a80f705", +1351 => x"530b0b82", +1352 => x"d4742795", +1353 => x"3874922a", +1354 => x"80fc0553", +1355 => x"0b0b8ad4", +1356 => x"74278638", +1357 => x"80fe530b", +1358 => x"0b721010", +1359 => x"1080e6a0", +1360 => x"05887105", +1361 => x"0855570b", +1362 => x"730b772e", +1363 => x"86cd3884", +1364 => x"1408fc06", +1365 => x"5b740b7b", +1366 => x"278f3888", +1367 => x"1408540b", +1368 => x"0b73772e", +1369 => x"098106e7", +1370 => x"388c1408", +1371 => x"80e6a00b", +1372 => x"84050871", +1373 => x"8c190c75", +1374 => x"88190c77", +1375 => x"8873050c", +1376 => x"5c57758c", +1377 => x"150c7853", +1378 => x"0b0b8079", +1379 => x"2483be38", +1380 => x"72822c81", +1381 => x"712b5656", +1382 => x"0b747b26", +1383 => x"80d1387a", +1384 => x"7506570b", +1385 => x"0b7682bc", +1386 => x"3878fc06", +1387 => x"84055974", +1388 => x"10707c06", +1389 => x"55550b73", +1390 => x"82aa3884", +1391 => x"1959f039", +1392 => x"80e6a00b", +1393 => x"84050879", +1394 => x"540b0b5b", +1395 => x"788025c0", +1396 => x"3882fa39", +1397 => x"74097b06", +1398 => x"7080e6a0", +1399 => x"0b84050c", +1400 => x"5b741055", +1401 => x"0b0b747b", +1402 => x"26853874", +1403 => x"85f33880", +1404 => x"e6a00b88", +1405 => x"05087084", +1406 => x"720508fc", +1407 => x"06707b31", +1408 => x"7b72268f", +1409 => x"7225075d", +1410 => x"575c5c55", +1411 => x"78802e80", +1412 => x"e3387915", +1413 => x"80e69808", +1414 => x"19907105", +1415 => x"59540b0b", +1416 => x"5680e694", +1417 => x"08ff2e89", +1418 => x"38a08f73", +1419 => x"05e08006", +1420 => x"570b0b76", +1421 => x"520b0b7c", +1422 => x"5188fc3f", +1423 => x"8008540b", +1424 => x"0b8008ff", +1425 => x"2e903880", +1426 => x"08762782", +1427 => x"c2387480", +1428 => x"e6a02e82", +1429 => x"ba3880e6", +1430 => x"a00b8805", +1431 => x"08558415", +1432 => x"08fc0670", +1433 => x"79317972", +1434 => x"268f7225", +1435 => x"075d555a", +1436 => x"7a849b38", +1437 => x"77810784", +1438 => x"160c7715", +1439 => x"7080e6a0", +1440 => x"0b88050c", +1441 => x"74810784", +1442 => x"72050c56", +1443 => x"7c5188a6", +1444 => x"3f881554", +1445 => x"0b0b7380", +1446 => x"0c8e3d0d", +1447 => x"0474832a", +1448 => x"70540b0b", +1449 => x"540b0b80", +1450 => x"742481a9", +1451 => x"3872822c", +1452 => x"81712b80", +1453 => x"e6a40807", +1454 => x"7080e6a0", +1455 => x"0b84050c", +1456 => x"75101010", +1457 => x"80e6a005", +1458 => x"88710508", +1459 => x"718c1b0c", +1460 => x"70881b0c", +1461 => x"79887305", +1462 => x"0c57555c", +1463 => x"55758c15", +1464 => x"0cfda339", +1465 => x"78791010", +1466 => x"1080e6a0", +1467 => x"0570565b", +1468 => x"5c8c1408", +1469 => x"560b0b75", +1470 => x"742ea738", +1471 => x"841608fc", +1472 => x"06707931", +1473 => x"58530b0b", +1474 => x"768f2484", +1475 => x"98387680", +1476 => x"2584de38", +1477 => x"8c160856", +1478 => x"0b0b7574", +1479 => x"2e098106", +1480 => x"db388814", +1481 => x"811a7083", +1482 => x"06555a54", +1483 => x"0b0b72c1", +1484 => x"387b8306", +1485 => x"560b0b75", +1486 => x"802efd98", +1487 => x"38ff1cf8", +1488 => x"1b5b5c88", +1489 => x"1a087a2e", +1490 => x"e838fd95", +1491 => x"39831953", +1492 => x"0b0bfcbc", +1493 => x"39831470", +1494 => x"822c8171", +1495 => x"2b80e6a4", +1496 => x"08077080", +1497 => x"e6a00b84", +1498 => x"050c7610", +1499 => x"101080e6", +1500 => x"a0058871", +1501 => x"0508718c", +1502 => x"1c0c7088", +1503 => x"1c0c7a88", +1504 => x"73050c58", +1505 => x"530b0b5d", +1506 => x"56530b0b", +1507 => x"fecf3980", +1508 => x"e5e40817", +1509 => x"59800876", +1510 => x"2e819438", +1511 => x"80e69408", +1512 => x"ff2e84b7", +1513 => x"38737631", +1514 => x"1980e5e4", +1515 => x"0c738706", +1516 => x"7056530b", +1517 => x"0b72802e", +1518 => x"88388873", +1519 => x"31701555", +1520 => x"5576149f", +1521 => x"ff06a080", +1522 => x"71311670", +1523 => x"540b0b7e", +1524 => x"530b0b51", +1525 => x"530b0b85", +1526 => x"de3f8008", +1527 => x"568008ff", +1528 => x"2e81a238", +1529 => x"80e5e408", +1530 => x"73057080", +1531 => x"e5e40c74", +1532 => x"7580e6a0", +1533 => x"0b88050c", +1534 => x"77763115", +1535 => x"81075556", +1536 => x"597a80e6", +1537 => x"a02e83e0", +1538 => x"38798f26", +1539 => x"838d3881", +1540 => x"0b84150c", +1541 => x"841508fc", +1542 => x"06707931", +1543 => x"7972268f", +1544 => x"7225075d", +1545 => x"555a7a80", +1546 => x"2efcc938", +1547 => x"80e03980", +1548 => x"089fff06", +1549 => x"550b0b74", +1550 => x"fee23878", +1551 => x"80e5e40c", +1552 => x"80e6a00b", +1553 => x"8805087a", +1554 => x"18810784", +1555 => x"72050c55", +1556 => x"80e69008", +1557 => x"79278638", +1558 => x"7880e690", +1559 => x"0c80e68c", +1560 => x"087927fb", +1561 => x"f9387880", +1562 => x"e68c0c84", +1563 => x"1508fc06", +1564 => x"70793179", +1565 => x"72268f72", +1566 => x"25075d55", +1567 => x"5a7a802e", +1568 => x"fbf2388a", +1569 => x"39807457", +1570 => x"530b0bfe", +1571 => x"d7397c51", +1572 => x"84a43f80", +1573 => x"0b800c8e", +1574 => x"3d0d0480", +1575 => x"7324a538", +1576 => x"72822c81", +1577 => x"712b80e6", +1578 => x"a4080770", +1579 => x"80e6a00b", +1580 => x"84050c5c", +1581 => x"5a768c17", +1582 => x"0c738817", +1583 => x"0c758818", +1584 => x"0cf9bf39", +1585 => x"83730570", +1586 => x"822c8171", +1587 => x"2b80e6a4", +1588 => x"08077080", +1589 => x"e6a00b84", +1590 => x"050c5d5b", +1591 => x"530b0bd5", +1592 => x"397a7506", +1593 => x"5c0b0b7b", +1594 => x"fbfa3884", +1595 => x"19751056", +1596 => x"59ef39ff", +1597 => x"17810559", +1598 => x"f6bf398c", +1599 => x"15088816", +1600 => x"08718c72", +1601 => x"050c8872", +1602 => x"050c5975", +1603 => x"15847105", +1604 => x"08810784", +1605 => x"72050c58", +1606 => x"7c51839a", +1607 => x"3f881554", +1608 => x"0b0bfaf2", +1609 => x"39771678", +1610 => x"81078418", +1611 => x"0c8c1708", +1612 => x"88180871", +1613 => x"8c72050c", +1614 => x"8872050c", +1615 => x"5c7080e6", +1616 => x"b40c7080", +1617 => x"e6b00c80", +1618 => x"e6a80b8c", +1619 => x"72050c8c", +1620 => x"71050888", +1621 => x"72050c77", +1622 => x"81078472", +1623 => x"050c7705", +1624 => x"77710c55", +1625 => x"7c5182ce", +1626 => x"3f881654", +1627 => x"0b0bf4b6", +1628 => x"39721684", +1629 => x"71050881", +1630 => x"07847205", +1631 => x"0c588c16", +1632 => x"08881708", +1633 => x"718c7205", +1634 => x"0c887205", +1635 => x"0c577c51", +1636 => x"82a43f88", +1637 => x"16540b0b", +1638 => x"f48c3972", +1639 => x"84150cf4", +1640 => x"1af80670", +1641 => x"841d0881", +1642 => x"0607841d", +1643 => x"0c701c55", +1644 => x"56850b84", +1645 => x"150c850b", +1646 => x"88150c8f", +1647 => x"7627fd90", +1648 => x"38881b52", +1649 => x"0b0b7c51", +1650 => x"85b43f80", +1651 => x"e6a00b88", +1652 => x"050880e5", +1653 => x"e4085a55", +1654 => x"fcf63978", +1655 => x"80e5e40c", +1656 => x"7380e694", +1657 => x"0cfbc639", +1658 => x"7284150c", +1659 => x"fce239fb", +1660 => x"3d0d7770", +1661 => x"7a7c5855", +1662 => x"530b0b56", +1663 => x"8f752781", +1664 => x"85387276", +1665 => x"07830651", +1666 => x"0b0b7080", +1667 => x"f9387573", +1668 => x"520b0b54", +1669 => x"0b0b7070", +1670 => x"8405520b", +1671 => x"0b087470", +1672 => x"8405560c", +1673 => x"73717084", +1674 => x"05530b0b", +1675 => x"08717084", +1676 => x"05530b0b", +1677 => x"0c717084", +1678 => x"05530b0b", +1679 => x"08717084", +1680 => x"05530b0b", +1681 => x"0c717084", +1682 => x"05530b0b", +1683 => x"08717084", +1684 => x"05530b0b", +1685 => x"0cf01656", +1686 => x"540b0b74", +1687 => x"8f26ffb6", +1688 => x"38837527", +1689 => x"99387070", +1690 => x"8405520b", +1691 => x"0b087470", +1692 => x"8405560c", +1693 => x"fc15550b", +1694 => x"0b748326", +1695 => x"e9387371", +1696 => x"540b0b52", +1697 => x"0b0bff15", +1698 => x"510b0b70", +1699 => x"ff2e9f38", +1700 => x"72708105", +1701 => x"540b0b33", +1702 => x"72708105", +1703 => x"540b0b34", +1704 => x"ff710551", +1705 => x"0b0b70ff", +1706 => x"2e098106", +1707 => x"e3387580", +1708 => x"0c873d0d", +1709 => x"04040470", +1710 => x"70707080", +1711 => x"0b81c5e8", +1712 => x"0c765188", +1713 => x"d93f8008", +1714 => x"530b0b80", +1715 => x"08ff2e89", +1716 => x"3872800c", +1717 => x"50505050", +1718 => x"0481c5e8", +1719 => x"08540b0b", +1720 => x"73802eed", +1721 => x"38757471", +1722 => x"0c520b0b", +1723 => x"72800c50", +1724 => x"50505004", +1725 => x"fb3d0d77", +1726 => x"79707207", +1727 => x"8306530b", +1728 => x"0b540b0b", +1729 => x"520b0b70", +1730 => x"9b387173", +1731 => x"7308540b", +1732 => x"0b56540b", +1733 => x"0b717308", +1734 => x"2e80d838", +1735 => x"7375540b", +1736 => x"0b520b0b", +1737 => x"0b0b7133", +1738 => x"7081ff06", +1739 => x"520b0b54", +1740 => x"0b0b7080", +1741 => x"2ea53872", +1742 => x"3355700b", +1743 => x"752e0981", +1744 => x"069c3881", +1745 => x"72058114", +1746 => x"71337081", +1747 => x"ff06540b", +1748 => x"0b56540b", +1749 => x"0b520b0b", +1750 => x"70dd3872", +1751 => x"33557381", +1752 => x"ff067581", +1753 => x"ff067171", +1754 => x"31800c55", +1755 => x"520b0b87", +1756 => x"3d0d0471", +1757 => x"09f7fbfd", +1758 => x"ff730506", +1759 => x"f8848281", +1760 => x"8006520b", +1761 => x"0b0b0b71", +1762 => x"9f388414", +1763 => x"84167108", +1764 => x"540b0b56", +1765 => x"540b0b71", +1766 => x"75082ed7", +1767 => x"38737554", +1768 => x"0b0b520b", +1769 => x"0bfefd39", +1770 => x"800b800c", +1771 => x"873d0d04", +1772 => x"fb3d0d77", +1773 => x"70520b0b", +1774 => x"56fdfa3f", +1775 => x"80e6a00b", +1776 => x"88050884", +1777 => x"710508fc", +1778 => x"06707b31", +1779 => x"9fef05e0", +1780 => x"8006e080", +1781 => x"05520b0b", +1782 => x"5555a080", +1783 => x"75249838", +1784 => x"80520b0b", +1785 => x"7551fdcf", +1786 => x"3f80e6a8", +1787 => x"0814530b", +1788 => x"0b728008", +1789 => x"2e913875", +1790 => x"51fdbb3f", +1791 => x"80530b0b", +1792 => x"72800c87", +1793 => x"3d0d0474", +1794 => x"30520b0b", +1795 => x"7551fda7", +1796 => x"3f8008ff", +1797 => x"2eab3880", +1798 => x"e6a00b88", +1799 => x"05087476", +1800 => x"31810784", +1801 => x"72050c53", +1802 => x"0b0b80e5", +1803 => x"e4087531", +1804 => x"80e5e40c", +1805 => x"7551fcfe", +1806 => x"3f810b80", +1807 => x"0c873d0d", +1808 => x"0480520b", +1809 => x"0b7551fc", +1810 => x"ee3f80e6", +1811 => x"a00b8805", +1812 => x"08800871", +1813 => x"31540b0b", +1814 => x"540b0b8f", +1815 => x"7325ff97", +1816 => x"38800880", +1817 => x"e6940831", +1818 => x"80e5e40c", +1819 => x"72810784", +1820 => x"150c7551", +1821 => x"fcc03f80", +1822 => x"530b0bff", +1823 => x"8339f73d", +1824 => x"0d7b7d54", +1825 => x"0b0b5a72", +1826 => x"802e82ab", +1827 => x"387951fc", +1828 => x"a43ff873", +1829 => x"05847105", +1830 => x"0870fe06", +1831 => x"70730584", +1832 => x"710508fc", +1833 => x"065c5758", +1834 => x"540b0b57", +1835 => x"80e6a808", +1836 => x"742e838b", +1837 => x"38778415", +1838 => x"0c807381", +1839 => x"0656590b", +1840 => x"740b792e", +1841 => x"81f53877", +1842 => x"14847105", +1843 => x"08810656", +1844 => x"530b0b74", +1845 => x"a3387716", +1846 => x"56788287", +1847 => x"38881408", +1848 => x"550b0b74", +1849 => x"80e6a82e", +1850 => x"83a7388c", +1851 => x"1408708c", +1852 => x"170c7588", +1853 => x"72050c58", +1854 => x"75810784", +1855 => x"180c7517", +1856 => x"76710c54", +1857 => x"0b0b7881", +1858 => x"a93883ff", +1859 => x"762781e5", +1860 => x"3875892a", +1861 => x"76832a54", +1862 => x"0b0b540b", +1863 => x"0b73802e", +1864 => x"80cb3875", +1865 => x"862ab805", +1866 => x"530b0b84", +1867 => x"7427be38", +1868 => x"80db1453", +1869 => x"0b0b9474", +1870 => x"27b33875", +1871 => x"8c2a80ee", +1872 => x"05530b0b", +1873 => x"80d47427", +1874 => x"a438758f", +1875 => x"2a80f705", +1876 => x"530b0b82", +1877 => x"d4742795", +1878 => x"3875922a", +1879 => x"80fc0553", +1880 => x"0b0b8ad4", +1881 => x"74278638", +1882 => x"80fe530b", +1883 => x"0b721010", +1884 => x"1080e6a0", +1885 => x"05887105", +1886 => x"0855550b", +1887 => x"730b752e", +1888 => x"82da3884", +1889 => x"1408fc06", +1890 => x"59750b79", +1891 => x"278f3888", +1892 => x"1408540b", +1893 => x"0b73752e", +1894 => x"098106e7", +1895 => x"388c1408", +1896 => x"708c190c", +1897 => x"7488190c", +1898 => x"77887205", +1899 => x"0c55768c", +1900 => x"150c7951", +1901 => x"fa803f8b", +1902 => x"3d0d0476", +1903 => x"08777131", +1904 => x"58760588", +1905 => x"18085656", +1906 => x"0b7480e6", +1907 => x"a82e80ea", +1908 => x"388c1708", +1909 => x"708c170c", +1910 => x"75887205", +1911 => x"0c530b0b", +1912 => x"fde53988", +1913 => x"14088c15", +1914 => x"08708c73", +1915 => x"050c5988", +1916 => x"190cfe84", +1917 => x"3975832a", +1918 => x"70540b0b", +1919 => x"540b0b80", +1920 => x"742481a2", +1921 => x"3872822c", +1922 => x"81712b80", +1923 => x"e6a40807", +1924 => x"80e6a00b", +1925 => x"84050c74", +1926 => x"10101080", +1927 => x"e6a00588", +1928 => x"71050871", +1929 => x"8c1b0c70", +1930 => x"881b0c79", +1931 => x"8873050c", +1932 => x"565a5576", +1933 => x"8c150cfe", +1934 => x"f9398159", +1935 => x"fd893977", +1936 => x"16738106", +1937 => x"540b0b55", +1938 => x"729a3876", +1939 => x"08777131", +1940 => x"5875058c", +1941 => x"18088819", +1942 => x"08718c72", +1943 => x"050c8872", +1944 => x"050c5555", +1945 => x"0b0b7481", +1946 => x"0784180c", +1947 => x"7680e6a0", +1948 => x"0b88050c", +1949 => x"80e69c08", +1950 => x"7526feb6", +1951 => x"3880e698", +1952 => x"08520b0b", +1953 => x"7951faa8", +1954 => x"3f7951f8", +1955 => x"a93ffea7", +1956 => x"3981778c", +1957 => x"170c7788", +1958 => x"170c758c", +1959 => x"190c7588", +1960 => x"190c59fc", +1961 => x"d3398314", +1962 => x"70822c81", +1963 => x"712b80e6", +1964 => x"a4080780", +1965 => x"e6a00b84", +1966 => x"050c7510", +1967 => x"101080e6", +1968 => x"a0058871", +1969 => x"0508718c", +1970 => x"1c0c7088", +1971 => x"1c0c7a88", +1972 => x"73050c57", +1973 => x"5b56530b", +1974 => x"0bfed839", +1975 => x"807324a3", +1976 => x"3872822c", +1977 => x"81712b80", +1978 => x"e6a40807", +1979 => x"80e6a00b", +1980 => x"84050c58", +1981 => x"748c180c", +1982 => x"7388180c", +1983 => x"7688160c", +1984 => x"fdac3983", +1985 => x"73057082", +1986 => x"2c81712b", +1987 => x"80e6a408", +1988 => x"0780e6a0", +1989 => x"0b84050c", +1990 => x"59530b0b", +1991 => x"d7397070", +1992 => x"7081c5ec", +1993 => x"08510b0b", +1994 => x"708a3881", +1995 => x"c5f47081", +1996 => x"c5ec0c51", +1997 => x"740b7105", +1998 => x"520b0bff", +1999 => x"530b0b71", +2000 => x"87fb8080", +2001 => x"268a3871", +2002 => x"81c5ec0c", +2003 => x"70530b0b", +2004 => x"72800c50", +2005 => x"50500470", +2006 => x"70707080", +2007 => x"0b80e5d0", +2008 => x"08540b0b", +2009 => x"540b0b72", +2010 => x"812e9d38", +2011 => x"7381c5f0", +2012 => x"0ccabe3f", +2013 => x"c98a3f80", +2014 => x"f5a8520b", +2015 => x"0b8151d3", +2016 => x"fa3f8008", +2017 => x"518a8f3f", +2018 => x"7281c5f0", +2019 => x"0ccaa23f", +2020 => x"c8ee3f80", +2021 => x"f5a8520b", +2022 => x"0b8151d3", +2023 => x"de3f8008", +2024 => x"5189f33f", +2025 => x"00ff3900", +2026 => x"ff39f53d", +2027 => x"0d7e6081", +2028 => x"c5f00870", +2029 => x"5b585b5b", +2030 => x"7580c538", +2031 => x"777a25a2", +2032 => x"38771b70", +2033 => x"337081ff", +2034 => x"06585859", +2035 => x"758a2e99", +2036 => x"387681ff", +2037 => x"0651c9b4", +2038 => x"3f811858", +2039 => x"790b7824", +2040 => x"e0387980", +2041 => x"0c8d3d0d", +2042 => x"048d51c9", +2043 => x"9f3f7833", +2044 => x"7081ff06", +2045 => x"520b0b57", +2046 => x"c9923f81", +2047 => x"1858dd39", +2048 => x"79557a54", +2049 => x"0b0b7d53", +2050 => x"0b0b8552", +2051 => x"0b0b8d3d", +2052 => x"fc0551c8", +2053 => x"af3f8008", +2054 => x"5688f43f", +2055 => x"7b80080c", +2056 => x"75800c8d", +2057 => x"3d0d04f6", +2058 => x"3d0d7d7f", +2059 => x"81c5f008", +2060 => x"705a585a", +2061 => x"5a7580ca", +2062 => x"38767925", +2063 => x"b638761a", +2064 => x"58c8a53f", +2065 => x"80087834", +2066 => x"800b8008", +2067 => x"81ff0657", +2068 => x"580b758a", +2069 => x"2ea83875", +2070 => x"8d327030", +2071 => x"7080257a", +2072 => x"07515156", +2073 => x"0b0b7580", +2074 => x"c0388117", +2075 => x"57780b77", +2076 => x"24cc3876", +2077 => x"560b0b75", +2078 => x"800c8c3d", +2079 => x"0d048158", +2080 => x"d6397855", +2081 => x"79540b0b", +2082 => x"7c530b0b", +2083 => x"84520b0b", +2084 => x"8c3dfc05", +2085 => x"51c7ad3f", +2086 => x"80085687", +2087 => x"f23f7a80", +2088 => x"080c7580", +2089 => x"0c8c3d0d", +2090 => x"04811756", +2091 => x"c839f93d", +2092 => x"0d795781", +2093 => x"c5f00880", +2094 => x"2eb23876", +2095 => x"518ac03f", +2096 => x"7b567a55", +2097 => x"80088105", +2098 => x"540b0b76", +2099 => x"530b0b82", +2100 => x"520b0b89", +2101 => x"3dfc0551", +2102 => x"c6ea3f80", +2103 => x"085787af", +2104 => x"3f778008", +2105 => x"0c76800c", +2106 => x"893d0d04", +2107 => x"87a13f85", +2108 => x"0b80080c", +2109 => x"ff0b800c", +2110 => x"893d0d04", +2111 => x"fb3d0d81", +2112 => x"c5f00870", +2113 => x"56540b0b", +2114 => x"73883874", +2115 => x"800c873d", +2116 => x"0d047753", +2117 => x"0b0b8352", +2118 => x"0b0b873d", +2119 => x"fc0551c6", +2120 => x"a33f8008", +2121 => x"540b0b86", +2122 => x"e63f7580", +2123 => x"080c7380", +2124 => x"0c873d0d", +2125 => x"04ff0b80", +2126 => x"0c04fb3d", +2127 => x"0d775581", +2128 => x"c5f00880", +2129 => x"2eae3874", +2130 => x"5189b43f", +2131 => x"80088105", +2132 => x"540b0b74", +2133 => x"530b0b87", +2134 => x"520b0b87", +2135 => x"3dfc0551", +2136 => x"c5e23f80", +2137 => x"085586a7", +2138 => x"3f758008", +2139 => x"0c74800c", +2140 => x"873d0d04", +2141 => x"86993f85", +2142 => x"0b80080c", +2143 => x"ff0b800c", +2144 => x"873d0d04", +2145 => x"fa3d0d81", +2146 => x"c5f00880", +2147 => x"2ea8387a", +2148 => x"5579540b", +2149 => x"0b78530b", +2150 => x"0b86520b", +2151 => x"0b883dfc", +2152 => x"0551c5a0", +2153 => x"3f800856", +2154 => x"85e53f76", +2155 => x"80080c75", +2156 => x"800c883d", +2157 => x"0d0485d7", +2158 => x"3f9d0b80", +2159 => x"080cff0b", +2160 => x"800c883d", +2161 => x"0d04f73d", +2162 => x"0d7b7d5b", +2163 => x"59bc530b", +2164 => x"0b80520b", +2165 => x"0b795186", +2166 => x"fd3f8070", +2167 => x"56579856", +2168 => x"74197033", +2169 => x"70782b79", +2170 => x"078118f8", +2171 => x"1a5a5859", +2172 => x"55588475", +2173 => x"24ea3876", +2174 => x"7a238419", +2175 => x"58807056", +2176 => x"57985674", +2177 => x"18703370", +2178 => x"782b7907", +2179 => x"8118f81a", +2180 => x"5a585951", +2181 => x"540b0b84", +2182 => x"7524e838", +2183 => x"76821b23", +2184 => x"88195880", +2185 => x"70565798", +2186 => x"56741870", +2187 => x"3370782b", +2188 => x"79078118", +2189 => x"f81a5a58", +2190 => x"5951540b", +2191 => x"0b847524", +2192 => x"e8387684", +2193 => x"1b0c8c19", +2194 => x"58807056", +2195 => x"57985674", +2196 => x"18703370", +2197 => x"782b7907", +2198 => x"8118f81a", +2199 => x"5a585951", +2200 => x"540b0b84", +2201 => x"7524e838", +2202 => x"76881b23", +2203 => x"90195880", +2204 => x"70565798", +2205 => x"56741870", +2206 => x"3370782b", +2207 => x"79078118", +2208 => x"f81a5a58", +2209 => x"5951540b", +2210 => x"0b847524", +2211 => x"e838768a", +2212 => x"1b239419", +2213 => x"58807056", +2214 => x"57985674", +2215 => x"18703370", +2216 => x"782b7907", +2217 => x"8118f81a", +2218 => x"5a585951", +2219 => x"540b0b84", +2220 => x"7524e838", +2221 => x"768c1b23", +2222 => x"98195880", +2223 => x"70565798", +2224 => x"56741870", +2225 => x"3370782b", +2226 => x"79078118", +2227 => x"f81a5a58", +2228 => x"5951540b", +2229 => x"0b847524", +2230 => x"e838768e", +2231 => x"1b239c19", +2232 => x"58807056", +2233 => x"57b85674", +2234 => x"18703370", +2235 => x"782b7907", +2236 => x"8118f81a", +2237 => x"5a58595a", +2238 => x"540b0b88", +2239 => x"7524e838", +2240 => x"76901b0c", +2241 => x"8b3d0d04", +2242 => x"e93d0d6a", +2243 => x"81c5f008", +2244 => x"57570b75", +2245 => x"933880c0", +2246 => x"800b8418", +2247 => x"0c75ac18", +2248 => x"0c75800c", +2249 => x"993d0d04", +2250 => x"893d7055", +2251 => x"6a540b0b", +2252 => x"558a520b", +2253 => x"0b993dff", +2254 => x"bc0551c2", +2255 => x"873f8008", +2256 => x"77530b0b", +2257 => x"75520b0b", +2258 => x"56fcfb3f", +2259 => x"82c13f77", +2260 => x"80080c75", +2261 => x"800c993d", +2262 => x"0d04e93d", +2263 => x"0d695781", +2264 => x"c5f00880", +2265 => x"2ebd3876", +2266 => x"5185943f", +2267 => x"893d7056", +2268 => x"80088105", +2269 => x"5577540b", +2270 => x"0b568f52", +2271 => x"0b0b993d", +2272 => x"ffbc0551", +2273 => x"c1be3f80", +2274 => x"086b530b", +2275 => x"0b76520b", +2276 => x"0b57fcb2", +2277 => x"3f81f83f", +2278 => x"7780080c", +2279 => x"76800c99", +2280 => x"3d0d0481", +2281 => x"ea3f850b", +2282 => x"80080cff", +2283 => x"0b800c99", +2284 => x"3d0d04fc", +2285 => x"3d0d8154", +2286 => x"0b0b81c5", +2287 => x"f0088838", +2288 => x"73800c86", +2289 => x"3d0d0476", +2290 => x"530b0b97", +2291 => x"b9520b0b", +2292 => x"863dfc05", +2293 => x"51c0ed3f", +2294 => x"8008540b", +2295 => x"0b81b03f", +2296 => x"7480080c", +2297 => x"73800c86", +2298 => x"3d0d04f4", +2299 => x"3d0d7e80", +2300 => x"f5d40870", +2301 => x"0881ff06", +2302 => x"913df805", +2303 => x"540b0b51", +2304 => x"5959c29d", +2305 => x"3f775780", +2306 => x"540b0b76", +2307 => x"557b7d58", +2308 => x"520b0b0b", +2309 => x"76530b0b", +2310 => x"8e3df005", +2311 => x"5184dc3f", +2312 => x"797b5879", +2313 => x"0c76841a", +2314 => x"0c78800c", +2315 => x"8e3d0d04", +2316 => x"f43d0d7e", +2317 => x"80f5d408", +2318 => x"70087081", +2319 => x"ff06923d", +2320 => x"f8055551", +2321 => x"5a5759c1", +2322 => x"d83f7757", +2323 => x"800b8b3d", +2324 => x"59540b0b", +2325 => x"76557b7d", +2326 => x"58520b0b", +2327 => x"0b76530b", +2328 => x"0b775184", +2329 => x"963f8056", +2330 => x"bd84c076", +2331 => x"5555797b", +2332 => x"58520b0b", +2333 => x"0b76530b", +2334 => x"0b775183", +2335 => x"fe3f7a57", +2336 => x"78802e84", +2337 => x"3876790c", +2338 => x"76800c8e", +2339 => x"3d0d0480", +2340 => x"eea80880", +2341 => x"0c04f73d", +2342 => x"0d7b80ee", +2343 => x"a80882c8", +2344 => x"7105085a", +2345 => x"540b0b5a", +2346 => x"77802e80", +2347 => x"eb388188", +2348 => x"18841908", +2349 => x"ff058171", +2350 => x"2b595559", +2351 => x"80742481", +2352 => x"80388074", +2353 => x"2480c138", +2354 => x"73822b78", +2355 => x"71058805", +2356 => x"56568180", +2357 => x"19087706", +2358 => x"530b0b72", +2359 => x"802e80c3", +2360 => x"38781670", +2361 => x"08530b0b", +2362 => x"530b0b79", +2363 => x"51740853", +2364 => x"0b0b722d", +2365 => x"ff14fc17", +2366 => x"fc177981", +2367 => x"2c5a5757", +2368 => x"540b0b73", +2369 => x"8025cb38", +2370 => x"7708580b", +2371 => x"0b77ff9e", +2372 => x"3880eea8", +2373 => x"08530b0b", +2374 => x"bc730508", +2375 => x"a9387951", +2376 => x"f5823f74", +2377 => x"08530b0b", +2378 => x"722dff14", +2379 => x"fc17fc17", +2380 => x"79812c5a", +2381 => x"5757540b", +2382 => x"0b738025", +2383 => x"ff9438c8", +2384 => x"398057fe", +2385 => x"fd397251", +2386 => x"bc730508", +2387 => x"540b0b73", +2388 => x"2d7951f4", +2389 => x"cf3ffb3d", +2390 => x"0d777a71", +2391 => x"028c05a3", +2392 => x"05335854", +2393 => x"0b0b540b", +2394 => x"0b568373", +2395 => x"2780e738", +2396 => x"75830651", +2397 => x"0b0b7080", +2398 => x"dd387488", +2399 => x"2b750770", +2400 => x"71902b07", +2401 => x"55518f73", +2402 => x"27b33873", +2403 => x"72708405", +2404 => x"540b0b0c", +2405 => x"71747170", +2406 => x"8405530b", +2407 => x"0b0c7471", +2408 => x"70840553", +2409 => x"0b0b0c74", +2410 => x"71708405", +2411 => x"530b0b0c", +2412 => x"f014540b", +2413 => x"0b520b0b", +2414 => x"728f26cf", +2415 => x"38837327", +2416 => x"95387372", +2417 => x"70840554", +2418 => x"0b0b0cfc", +2419 => x"7305530b", +2420 => x"0b728326", +2421 => x"ed38ff73", +2422 => x"05510b0b", +2423 => x"70ff2e98", +2424 => x"38747270", +2425 => x"8105540b", +2426 => x"0b34ff71", +2427 => x"05510b0b", +2428 => x"70ff2e09", +2429 => x"8106ea38", +2430 => x"75800c87", +2431 => x"3d0d0470", +2432 => x"70707075", +2433 => x"70718306", +2434 => x"530b0b55", +2435 => x"520b0b70", +2436 => x"80c53871", +2437 => x"70087009", +2438 => x"f7fbfdff", +2439 => x"720506f8", +2440 => x"84828180", +2441 => x"06540b0b", +2442 => x"520b0b53", +2443 => x"0b0b71a3", +2444 => x"38847305", +2445 => x"70087009", +2446 => x"f7fbfdff", +2447 => x"720506f8", +2448 => x"84828180", +2449 => x"06540b0b", +2450 => x"520b0b53", +2451 => x"0b0b7180", +2452 => x"2edf3872", +2453 => x"520b0b0b", +2454 => x"0b713353", +2455 => x"0b0b7280", +2456 => x"2e8f3881", +2457 => x"72057033", +2458 => x"540b0b52", +2459 => x"0b0b72f3", +2460 => x"38717431", +2461 => x"800c5050", +2462 => x"505004e4", +2463 => x"3d0d6ea1", +2464 => x"3d08a33d", +2465 => x"0859575f", +2466 => x"80764d77", +2467 => x"4ea33d08", +2468 => x"a53d0857", +2469 => x"4b0b754c", +2470 => x"5e0b0b7d", +2471 => x"6c2487b2", +2472 => x"38806a24", +2473 => x"87cd3869", +2474 => x"6b58566b", +2475 => x"6d5d460b", +2476 => x"7b477544", +2477 => x"76450b0b", +2478 => x"64646868", +2479 => x"5c5c5656", +2480 => x"0b7481f5", +2481 => x"38787627", +2482 => x"82dd3875", +2483 => x"81ff2683", +2484 => x"2b5583ff", +2485 => x"ff76278c", +2486 => x"389055fe", +2487 => x"800a7627", +2488 => x"83389855", +2489 => x"750b752a", +2490 => x"80e3bc05", +2491 => x"7033a077", +2492 => x"31713157", +2493 => x"55577480", +2494 => x"2e953875", +2495 => x"752ba076", +2496 => x"317a772b", +2497 => x"7c722a07", +2498 => x"7c782b5d", +2499 => x"5b59560b", +2500 => x"0b75902a", +2501 => x"7683ffff", +2502 => x"0671540b", +2503 => x"0b7a530b", +2504 => x"0b595788", +2505 => x"bf3f8008", +2506 => x"5b88a53f", +2507 => x"80088008", +2508 => x"79297c90", +2509 => x"2b7c902a", +2510 => x"07565659", +2511 => x"73752794", +2512 => x"388008ff", +2513 => x"05761555", +2514 => x"59757426", +2515 => x"87387474", +2516 => x"2687f438", +2517 => x"76520b0b", +2518 => x"73753151", +2519 => x"88863f80", +2520 => x"085587ec", +2521 => x"3f800880", +2522 => x"0879297b", +2523 => x"83ffff06", +2524 => x"77902b07", +2525 => x"56595773", +2526 => x"78279638", +2527 => x"8008ff05", +2528 => x"76155557", +2529 => x"75742689", +2530 => x"38777426", +2531 => x"77713158", +2532 => x"5678902b", +2533 => x"77075880", +2534 => x"5b0b0b7a", +2535 => x"4077417f", +2536 => x"0b615654", +2537 => x"0b0b7d80", +2538 => x"dd38737f", +2539 => x"0c747f84", +2540 => x"050c7e80", +2541 => x"0c9e3d0d", +2542 => x"0480705c", +2543 => x"58747926", +2544 => x"d8387481", +2545 => x"ff26832b", +2546 => x"577483ff", +2547 => x"ff2682bd", +2548 => x"3874772a", +2549 => x"80e3bc05", +2550 => x"7033a079", +2551 => x"31713159", +2552 => x"5c5d7682", +2553 => x"cf387654", +2554 => x"0b0b7479", +2555 => x"27853881", +2556 => x"540b0b79", +2557 => x"76277407", +2558 => x"59815878", +2559 => x"ff993876", +2560 => x"58805bff", +2561 => x"94397352", +2562 => x"0b0b7453", +2563 => x"0b0b9e3d", +2564 => x"e80551d2", +2565 => x"d43f6769", +2566 => x"567f0c74", +2567 => x"7f84050c", +2568 => x"7e800c9e", +2569 => x"3d0d0475", +2570 => x"802e81d2", +2571 => x"387581ff", +2572 => x"26832b55", +2573 => x"83ffff76", +2574 => x"278c3890", +2575 => x"55fe800a", +2576 => x"76278338", +2577 => x"9855750b", +2578 => x"752a80e3", +2579 => x"bc057033", +2580 => x"a0773171", +2581 => x"31575e54", +2582 => x"0b0b7484", +2583 => x"b8387876", +2584 => x"31540b0b", +2585 => x"8176902a", +2586 => x"7783ffff", +2587 => x"065f5d5b", +2588 => x"0b7b520b", +2589 => x"0b735185", +2590 => x"eb3f8008", +2591 => x"5785d13f", +2592 => x"80088008", +2593 => x"7e297890", +2594 => x"2b7c902a", +2595 => x"07565659", +2596 => x"73752794", +2597 => x"388008ff", +2598 => x"05761555", +2599 => x"59757426", +2600 => x"87387474", +2601 => x"26859738", +2602 => x"7b520b0b", +2603 => x"73753151", +2604 => x"85b23f80", +2605 => x"08558598", +2606 => x"3f800880", +2607 => x"087e297b", +2608 => x"83ffff06", +2609 => x"77902b07", +2610 => x"56595773", +2611 => x"78279638", +2612 => x"8008ff05", +2613 => x"76155557", +2614 => x"75742689", +2615 => x"38777426", +2616 => x"77713158", +2617 => x"5a78902b", +2618 => x"77077b41", +2619 => x"410b7f0b", +2620 => x"6156540b", +2621 => x"0b7d802e", +2622 => x"fdb038fe", +2623 => x"89397552", +2624 => x"0b0b8151", +2625 => x"84ca3f80", +2626 => x"0856fea1", +2627 => x"399057fe", +2628 => x"800a7527", +2629 => x"fdbb3898", +2630 => x"75712a80", +2631 => x"e3bc0570", +2632 => x"33a07331", +2633 => x"7131530b", +2634 => x"0b5d5e57", +2635 => x"0b0b7680", +2636 => x"2efdb338", +2637 => x"a0773175", +2638 => x"782b7772", +2639 => x"2a077779", +2640 => x"2b7b7a2b", +2641 => x"7d742a07", +2642 => x"7d7b2b73", +2643 => x"902a7483", +2644 => x"ffff0671", +2645 => x"597f772a", +2646 => x"585e5c41", +2647 => x"5f585c54", +2648 => x"0b0b8480", +2649 => x"3f800854", +2650 => x"0b0b83e4", +2651 => x"3f800880", +2652 => x"08792975", +2653 => x"902b7e90", +2654 => x"2a075656", +2655 => x"59737527", +2656 => x"99388008", +2657 => x"ff057b15", +2658 => x"55597a74", +2659 => x"268c3873", +2660 => x"75278738", +2661 => x"ff197b15", +2662 => x"55597652", +2663 => x"0b0b7375", +2664 => x"315183c0", +2665 => x"3f800855", +2666 => x"83a63f80", +2667 => x"08800879", +2668 => x"297d83ff", +2669 => x"ff067790", +2670 => x"2b075659", +2671 => x"57737827", +2672 => x"99388008", +2673 => x"ff057b15", +2674 => x"55577a74", +2675 => x"268c3873", +2676 => x"78278738", +2677 => x"ff177b15", +2678 => x"55570b73", +2679 => x"78317990", +2680 => x"2b780770", +2681 => x"83ffff06", +2682 => x"71902a79", +2683 => x"83ffff06", +2684 => x"7a902a73", +2685 => x"72297373", +2686 => x"29747329", +2687 => x"76742973", +2688 => x"902a0572", +2689 => x"05575543", +2690 => x"5f5b585a", +2691 => x"57595a74", +2692 => x"7c278638", +2693 => x"84808017", +2694 => x"5774902a", +2695 => x"177983ff", +2696 => x"ff067684", +2697 => x"80802905", +2698 => x"57570b0b", +2699 => x"767a269a", +2700 => x"38767a32", +2701 => x"70307072", +2702 => x"07802556", +2703 => x"5a5b7c76", +2704 => x"27fad438", +2705 => x"73802efa", +2706 => x"ce38ff18", +2707 => x"58805bfa", +2708 => x"c839ff76", +2709 => x"530b0b77", +2710 => x"540b0b9f", +2711 => x"3de80552", +2712 => x"0b0b5ece", +2713 => x"843f6769", +2714 => x"574c0b75", +2715 => x"4d698025", +2716 => x"f8b5387d", +2717 => x"096a6c5c", +2718 => x"530b0b7a", +2719 => x"540b0b9f", +2720 => x"3de80552", +2721 => x"0b0b5ecd", +2722 => x"e03f6769", +2723 => x"714c704d", +2724 => x"5856f897", +2725 => x"39a07531", +2726 => x"76762b7a", +2727 => x"772b7c73", +2728 => x"2a077c78", +2729 => x"2b72902a", +2730 => x"7383ffff", +2731 => x"0671587e", +2732 => x"762a5742", +2733 => x"405d5d57", +2734 => x"5881a93f", +2735 => x"80085781", +2736 => x"8f3f8008", +2737 => x"80087e29", +2738 => x"78902b7d", +2739 => x"902a0756", +2740 => x"56597375", +2741 => x"27993880", +2742 => x"08ff0576", +2743 => x"15555975", +2744 => x"74268c38", +2745 => x"73752787", +2746 => x"38ff1976", +2747 => x"1555597b", +2748 => x"520b0b73", +2749 => x"75315180", +2750 => x"eb3f8008", +2751 => x"5580d13f", +2752 => x"80088008", +2753 => x"7e297c83", +2754 => x"ffff0670", +2755 => x"78902b07", +2756 => x"51565858", +2757 => x"73772799", +2758 => x"388008ff", +2759 => x"05761555", +2760 => x"58757426", +2761 => x"8c387377", +2762 => x"278738ff", +2763 => x"18761555", +2764 => x"5878902b", +2765 => x"78077478", +2766 => x"31555bfa", +2767 => x"b339ff19", +2768 => x"76155559", +2769 => x"fae239ff", +2770 => x"19761555", +2771 => x"59f88539", +2772 => x"70707080", +2773 => x"530b0b75", +2774 => x"520b0b74", +2775 => x"51ceaf3f", +2776 => x"50505004", +2777 => x"70707081", +2778 => x"530b0b75", +2779 => x"520b0b74", +2780 => x"51ce9b3f", +2781 => x"50505004", +2782 => x"707080f5", +2783 => x"b00bfc05", +2784 => x"7008520b", +2785 => x"0b520b0b", +2786 => x"0b70ff2e", +2787 => x"9738702d", +2788 => x"fc720570", +2789 => x"08520b0b", +2790 => x"520b0b0b", +2791 => x"70ff2e09", +2792 => x"8106eb38", +2793 => x"50500404", +2794 => x"ffb4963f", +2795 => x"04000000", +2796 => x"30313233", +2797 => x"34353637", +2798 => x"38390000", +2799 => x"44485259", +2800 => x"53544f4e", +2801 => x"45205052", +2802 => x"4f475241", +2803 => x"4d2c2053", +2804 => x"4f4d4520", +2805 => x"53545249", +2806 => x"4e470000", +2807 => x"44485259", +2808 => x"53544f4e", +2809 => x"45205052", +2810 => x"4f475241", +2811 => x"4d2c2031", +2812 => x"27535420", +2813 => x"53545249", +2814 => x"4e470000", +2815 => x"44687279", +2816 => x"73746f6e", +2817 => x"65204265", +2818 => x"6e63686d", +2819 => x"61726b2c", +2820 => x"20566572", +2821 => x"73696f6e", +2822 => x"20322e31", +2823 => x"20284c61", +2824 => x"6e677561", +2825 => x"67653a20", +2826 => x"43290a00", +2827 => x"50726f67", +2828 => x"72616d20", +2829 => x"636f6d70", +2830 => x"696c6564", +2831 => x"20776974", +2832 => x"68202772", +2833 => x"65676973", +2834 => x"74657227", +2835 => x"20617474", +2836 => x"72696275", +2837 => x"74650a00", +2838 => x"45786563", +2839 => x"7574696f", +2840 => x"6e207374", +2841 => x"61727473", +2842 => x"2c202564", +2843 => x"2072756e", +2844 => x"73207468", +2845 => x"726f7567", +2846 => x"68204468", +2847 => x"72797374", +2848 => x"6f6e650a", +2849 => x"00000000", +2850 => x"44485259", +2851 => x"53544f4e", +2852 => x"45205052", +2853 => x"4f475241", +2854 => x"4d2c2032", +2855 => x"274e4420", +2856 => x"53545249", +2857 => x"4e470000", +2858 => x"45786563", +2859 => x"7574696f", +2860 => x"6e20656e", +2861 => x"64730a00", +2862 => x"46696e61", +2863 => x"6c207661", +2864 => x"6c756573", +2865 => x"206f6620", +2866 => x"74686520", +2867 => x"76617269", +2868 => x"61626c65", +2869 => x"73207573", +2870 => x"65642069", +2871 => x"6e207468", +2872 => x"65206265", +2873 => x"6e63686d", +2874 => x"61726b3a", +2875 => x"0a000000", +2876 => x"496e745f", +2877 => x"476c6f62", +2878 => x"3a202020", +2879 => x"20202020", +2880 => x"20202020", +2881 => x"2025640a", +2882 => x"00000000", +2883 => x"20202020", +2884 => x"20202020", +2885 => x"73686f75", +2886 => x"6c642062", +2887 => x"653a2020", +2888 => x"2025640a", +2889 => x"00000000", +2890 => x"426f6f6c", +2891 => x"5f476c6f", +2892 => x"623a2020", +2893 => x"20202020", +2894 => x"20202020", +2895 => x"2025640a", +2896 => x"00000000", +2897 => x"43685f31", +2898 => x"5f476c6f", +2899 => x"623a2020", +2900 => x"20202020", +2901 => x"20202020", +2902 => x"2025630a", +2903 => x"00000000", +2904 => x"20202020", +2905 => x"20202020", +2906 => x"73686f75", +2907 => x"6c642062", +2908 => x"653a2020", +2909 => x"2025630a", +2910 => x"00000000", +2911 => x"43685f32", +2912 => x"5f476c6f", +2913 => x"623a2020", +2914 => x"20202020", +2915 => x"20202020", +2916 => x"2025630a", +2917 => x"00000000", +2918 => x"4172725f", +2919 => x"315f476c", +2920 => x"6f625b38", +2921 => x"5d3a2020", +2922 => x"20202020", +2923 => x"2025640a", +2924 => x"00000000", +2925 => x"4172725f", +2926 => x"325f476c", +2927 => x"6f625b38", +2928 => x"5d5b375d", +2929 => x"3a202020", +2930 => x"2025640a", +2931 => x"00000000", +2932 => x"20202020", +2933 => x"20202020", +2934 => x"73686f75", +2935 => x"6c642062", +2936 => x"653a2020", +2937 => x"204e756d", +2938 => x"6265725f", +2939 => x"4f665f52", +2940 => x"756e7320", +2941 => x"2b203130", +2942 => x"0a000000", +2943 => x"5074725f", +2944 => x"476c6f62", +2945 => x"2d3e0a00", +2946 => x"20205074", +2947 => x"725f436f", +2948 => x"6d703a20", +2949 => x"20202020", +2950 => x"20202020", +2951 => x"2025640a", +2952 => x"00000000", +2953 => x"20202020", +2954 => x"20202020", +2955 => x"73686f75", +2956 => x"6c642062", +2957 => x"653a2020", +2958 => x"2028696d", +2959 => x"706c656d", +2960 => x"656e7461", +2961 => x"74696f6e", +2962 => x"2d646570", +2963 => x"656e6465", +2964 => x"6e74290a", +2965 => x"00000000", +2966 => x"20204469", +2967 => x"7363723a", +2968 => x"20202020", +2969 => x"20202020", +2970 => x"20202020", +2971 => x"2025640a", +2972 => x"00000000", +2973 => x"2020456e", +2974 => x"756d5f43", +2975 => x"6f6d703a", +2976 => x"20202020", +2977 => x"20202020", +2978 => x"2025640a", +2979 => x"00000000", +2980 => x"2020496e", +2981 => x"745f436f", +2982 => x"6d703a20", +2983 => x"20202020", +2984 => x"20202020", +2985 => x"2025640a", +2986 => x"00000000", +2987 => x"20205374", +2988 => x"725f436f", +2989 => x"6d703a20", +2990 => x"20202020", +2991 => x"20202020", +2992 => x"2025730a", +2993 => x"00000000", +2994 => x"20202020", +2995 => x"20202020", +2996 => x"73686f75", +2997 => x"6c642062", +2998 => x"653a2020", +2999 => x"20444852", +3000 => x"5953544f", +3001 => x"4e452050", +3002 => x"524f4752", +3003 => x"414d2c20", +3004 => x"534f4d45", +3005 => x"20535452", +3006 => x"494e470a", +3007 => x"00000000", +3008 => x"4e657874", +3009 => x"5f507472", +3010 => x"5f476c6f", +3011 => x"622d3e0a", +3012 => x"00000000", +3013 => x"20202020", +3014 => x"20202020", +3015 => x"73686f75", +3016 => x"6c642062", +3017 => x"653a2020", +3018 => x"2028696d", +3019 => x"706c656d", +3020 => x"656e7461", +3021 => x"74696f6e", +3022 => x"2d646570", +3023 => x"656e6465", +3024 => x"6e74292c", +3025 => x"2073616d", +3026 => x"65206173", +3027 => x"2061626f", +3028 => x"76650a00", +3029 => x"496e745f", +3030 => x"315f4c6f", +3031 => x"633a2020", +3032 => x"20202020", +3033 => x"20202020", +3034 => x"2025640a", +3035 => x"00000000", +3036 => x"496e745f", +3037 => x"325f4c6f", +3038 => x"633a2020", +3039 => x"20202020", +3040 => x"20202020", +3041 => x"2025640a", +3042 => x"00000000", +3043 => x"496e745f", +3044 => x"335f4c6f", +3045 => x"633a2020", +3046 => x"20202020", +3047 => x"20202020", +3048 => x"2025640a", +3049 => x"00000000", +3050 => x"456e756d", +3051 => x"5f4c6f63", +3052 => x"3a202020", +3053 => x"20202020", +3054 => x"20202020", +3055 => x"2025640a", +3056 => x"00000000", +3057 => x"5374725f", +3058 => x"315f4c6f", +3059 => x"633a2020", +3060 => x"20202020", +3061 => x"20202020", +3062 => x"2025730a", +3063 => x"00000000", +3064 => x"20202020", +3065 => x"20202020", +3066 => x"73686f75", +3067 => x"6c642062", +3068 => x"653a2020", +3069 => x"20444852", +3070 => x"5953544f", +3071 => x"4e452050", +3072 => x"524f4752", +3073 => x"414d2c20", +3074 => x"31275354", +3075 => x"20535452", +3076 => x"494e470a", +3077 => x"00000000", +3078 => x"5374725f", +3079 => x"325f4c6f", +3080 => x"633a2020", +3081 => x"20202020", +3082 => x"20202020", +3083 => x"2025730a", +3084 => x"00000000", +3085 => x"20202020", +3086 => x"20202020", +3087 => x"73686f75", +3088 => x"6c642062", +3089 => x"653a2020", +3090 => x"20444852", +3091 => x"5953544f", +3092 => x"4e452050", +3093 => x"524f4752", +3094 => x"414d2c20", +3095 => x"32274e44", +3096 => x"20535452", +3097 => x"494e470a", +3098 => x"00000000", +3099 => x"55736572", +3100 => x"2074696d", +3101 => x"653a2025", +3102 => x"640a0000", +3103 => x"4d696372", +3104 => x"6f736563", +3105 => x"6f6e6473", +3106 => x"20666f72", +3107 => x"206f6e65", +3108 => x"2072756e", +3109 => x"20746872", +3110 => x"6f756768", +3111 => x"20446872", +3112 => x"7973746f", +3113 => x"6e653a20", +3114 => x"00000000", +3115 => x"2564200a", +3116 => x"00000000", +3117 => x"44687279", +3118 => x"73746f6e", +3119 => x"65732070", +3120 => x"65722053", +3121 => x"65636f6e", +3122 => x"643a2020", +3123 => x"20202020", +3124 => x"20202020", +3125 => x"20202020", +3126 => x"20202020", +3127 => x"20202020", +3128 => x"00000000", +3129 => x"56415820", +3130 => x"4d495053", +3131 => x"20726174", +3132 => x"696e6720", +3133 => x"2a203130", +3134 => x"3030203d", +3135 => x"20256420", +3136 => x"0a000000", +3137 => x"50726f67", +3138 => x"72616d20", +3139 => x"636f6d70", +3140 => x"696c6564", +3141 => x"20776974", +3142 => x"686f7574", +3143 => x"20277265", +3144 => x"67697374", +3145 => x"65722720", +3146 => x"61747472", +3147 => x"69627574", +3148 => x"650a0000", +3149 => x"4d656173", +3150 => x"75726564", +3151 => x"2074696d", +3152 => x"6520746f", +3153 => x"6f20736d", +3154 => x"616c6c20", +3155 => x"746f206f", +3156 => x"62746169", +3157 => x"6e206d65", +3158 => x"616e696e", +3159 => x"6766756c", +3160 => x"20726573", +3161 => x"756c7473", +3162 => x"0a000000", +3163 => x"506c6561", +3164 => x"73652069", +3165 => x"6e637265", +3166 => x"61736520", +3167 => x"6e756d62", +3168 => x"6572206f", +3169 => x"66207275", +3170 => x"6e730a00", +3171 => x"44485259", +3172 => x"53544f4e", +3173 => x"45205052", +3174 => x"4f475241", +3175 => x"4d2c2033", +3176 => x"27524420", +3177 => x"53545249", +3178 => x"4e470000", +3179 => x"43000000", +3180 => x"64756d6d", +3181 => x"792e6578", +3182 => x"65000000", +3183 => x"00010202", +3184 => x"03030303", +3185 => x"04040404", +3186 => x"04040404", +3187 => x"05050505", +3188 => x"05050505", +3189 => x"05050505", +3190 => x"05050505", +3191 => x"06060606", +3192 => x"06060606", +3193 => x"06060606", +3194 => x"06060606", +3195 => x"06060606", +3196 => x"06060606", +3197 => x"06060606", +3198 => x"06060606", +3199 => x"07070707", +3200 => x"07070707", +3201 => x"07070707", +3202 => x"07070707", +3203 => x"07070707", +3204 => x"07070707", +3205 => x"07070707", +3206 => x"07070707", +3207 => x"07070707", +3208 => x"07070707", +3209 => x"07070707", +3210 => x"07070707", +3211 => x"07070707", +3212 => x"07070707", +3213 => x"07070707", +3214 => x"07070707", +3215 => x"08080808", +3216 => x"08080808", +3217 => x"08080808", +3218 => x"08080808", +3219 => x"08080808", +3220 => x"08080808", +3221 => x"08080808", +3222 => x"08080808", +3223 => x"08080808", +3224 => x"08080808", +3225 => x"08080808", +3226 => x"08080808", +3227 => x"08080808", +3228 => x"08080808", +3229 => x"08080808", +3230 => x"08080808", +3231 => x"08080808", +3232 => x"08080808", +3233 => x"08080808", +3234 => x"08080808", +3235 => x"08080808", +3236 => x"08080808", +3237 => x"08080808", +3238 => x"08080808", +3239 => x"08080808", +3240 => x"08080808", +3241 => x"08080808", +3242 => x"08080808", +3243 => x"08080808", +3244 => x"08080808", +3245 => x"08080808", +3246 => x"08080808", +3247 => x"00ffffff", +3248 => x"ff00ffff", +3249 => x"ffff00ff", +3250 => x"ffffff00", +3251 => x"00000000", +3252 => x"00000000", +3253 => x"00000000", +3254 => x"00003ab8", +3255 => x"000186a0", -- iterations +3256 => x"00000000", +3257 => x"00000000", +3258 => x"00000000", +3259 => x"00000000", +3260 => x"00000000", +3261 => x"00000000", +3262 => x"00000000", +3263 => x"00000000", +3264 => x"00000000", +3265 => x"00000000", +3266 => x"00000000", +3267 => x"00000000", +3268 => x"00000000", +3269 => x"ffffffff", +3270 => x"00000000", +3271 => x"00020000", +3272 => x"00000000", +3273 => x"00000000", +3274 => x"00003320", +3275 => x"00003320", +3276 => x"00003328", +3277 => x"00003328", +3278 => x"00003330", +3279 => x"00003330", +3280 => x"00003338", +3281 => x"00003338", +3282 => x"00003340", +3283 => x"00003340", +3284 => x"00003348", +3285 => x"00003348", +3286 => x"00003350", +3287 => x"00003350", +3288 => x"00003358", +3289 => x"00003358", +3290 => x"00003360", +3291 => x"00003360", +3292 => x"00003368", +3293 => x"00003368", +3294 => x"00003370", +3295 => x"00003370", +3296 => x"00003378", +3297 => x"00003378", +3298 => x"00003380", +3299 => x"00003380", +3300 => x"00003388", +3301 => x"00003388", +3302 => x"00003390", +3303 => x"00003390", +3304 => x"00003398", +3305 => x"00003398", +3306 => x"000033a0", +3307 => x"000033a0", +3308 => x"000033a8", +3309 => x"000033a8", +3310 => x"000033b0", +3311 => x"000033b0", +3312 => x"000033b8", +3313 => x"000033b8", +3314 => x"000033c0", +3315 => x"000033c0", +3316 => x"000033c8", +3317 => x"000033c8", +3318 => x"000033d0", +3319 => x"000033d0", +3320 => x"000033d8", +3321 => x"000033d8", +3322 => x"000033e0", +3323 => x"000033e0", +3324 => x"000033e8", +3325 => x"000033e8", +3326 => x"000033f0", +3327 => x"000033f0", +3328 => x"000033f8", +3329 => x"000033f8", +3330 => x"00003400", +3331 => x"00003400", +3332 => x"00003408", +3333 => x"00003408", +3334 => x"00003410", +3335 => x"00003410", +3336 => x"00003418", +3337 => x"00003418", +3338 => x"00003420", +3339 => x"00003420", +3340 => x"00003428", +3341 => x"00003428", +3342 => x"00003430", +3343 => x"00003430", +3344 => x"00003438", +3345 => x"00003438", +3346 => x"00003440", +3347 => x"00003440", +3348 => x"00003448", +3349 => x"00003448", +3350 => x"00003450", +3351 => x"00003450", +3352 => x"00003458", +3353 => x"00003458", +3354 => x"00003460", +3355 => x"00003460", +3356 => x"00003468", +3357 => x"00003468", +3358 => x"00003470", +3359 => x"00003470", +3360 => x"00003478", +3361 => x"00003478", +3362 => x"00003480", +3363 => x"00003480", +3364 => x"00003488", +3365 => x"00003488", +3366 => x"00003490", +3367 => x"00003490", +3368 => x"00003498", +3369 => x"00003498", +3370 => x"000034a0", +3371 => x"000034a0", +3372 => x"000034a8", +3373 => x"000034a8", +3374 => x"000034b0", +3375 => x"000034b0", +3376 => x"000034b8", +3377 => x"000034b8", +3378 => x"000034c0", +3379 => x"000034c0", +3380 => x"000034c8", +3381 => x"000034c8", +3382 => x"000034d0", +3383 => x"000034d0", +3384 => x"000034d8", +3385 => x"000034d8", +3386 => x"000034e0", +3387 => x"000034e0", +3388 => x"000034e8", +3389 => x"000034e8", +3390 => x"000034f0", +3391 => x"000034f0", +3392 => x"000034f8", +3393 => x"000034f8", +3394 => x"00003500", +3395 => x"00003500", +3396 => x"00003508", +3397 => x"00003508", +3398 => x"00003510", +3399 => x"00003510", +3400 => x"00003518", +3401 => x"00003518", +3402 => x"00003520", +3403 => x"00003520", +3404 => x"00003528", +3405 => x"00003528", +3406 => x"00003530", +3407 => x"00003530", +3408 => x"00003538", +3409 => x"00003538", +3410 => x"00003540", +3411 => x"00003540", +3412 => x"00003548", +3413 => x"00003548", +3414 => x"00003550", +3415 => x"00003550", +3416 => x"00003558", +3417 => x"00003558", +3418 => x"00003560", +3419 => x"00003560", +3420 => x"00003568", +3421 => x"00003568", +3422 => x"00003570", +3423 => x"00003570", +3424 => x"00003578", +3425 => x"00003578", +3426 => x"00003580", +3427 => x"00003580", +3428 => x"00003588", +3429 => x"00003588", +3430 => x"00003590", +3431 => x"00003590", +3432 => x"00003598", +3433 => x"00003598", +3434 => x"000035a0", +3435 => x"000035a0", +3436 => x"000035a8", +3437 => x"000035a8", +3438 => x"000035b0", +3439 => x"000035b0", +3440 => x"000035b8", +3441 => x"000035b8", +3442 => x"000035c0", +3443 => x"000035c0", +3444 => x"000035c8", +3445 => x"000035c8", +3446 => x"000035d0", +3447 => x"000035d0", +3448 => x"000035d8", +3449 => x"000035d8", +3450 => x"000035e0", +3451 => x"000035e0", +3452 => x"000035e8", +3453 => x"000035e8", +3454 => x"000035f0", +3455 => x"000035f0", +3456 => x"000035f8", +3457 => x"000035f8", +3458 => x"00003600", +3459 => x"00003600", +3460 => x"00003608", +3461 => x"00003608", +3462 => x"00003610", +3463 => x"00003610", +3464 => x"00003618", +3465 => x"00003618", +3466 => x"00003620", +3467 => x"00003620", +3468 => x"00003628", +3469 => x"00003628", +3470 => x"00003630", +3471 => x"00003630", +3472 => x"00003638", +3473 => x"00003638", +3474 => x"00003640", +3475 => x"00003640", +3476 => x"00003648", +3477 => x"00003648", +3478 => x"00003650", +3479 => x"00003650", +3480 => x"00003658", +3481 => x"00003658", +3482 => x"00003660", +3483 => x"00003660", +3484 => x"00003668", +3485 => x"00003668", +3486 => x"00003670", +3487 => x"00003670", +3488 => x"00003678", +3489 => x"00003678", +3490 => x"00003680", +3491 => x"00003680", +3492 => x"00003688", +3493 => x"00003688", +3494 => x"00003690", +3495 => x"00003690", +3496 => x"00003698", +3497 => x"00003698", +3498 => x"000036a0", +3499 => x"000036a0", +3500 => x"000036a8", +3501 => x"000036a8", +3502 => x"000036b0", +3503 => x"000036b0", +3504 => x"000036b8", +3505 => x"000036b8", +3506 => x"000036c0", +3507 => x"000036c0", +3508 => x"000036c8", +3509 => x"000036c8", +3510 => x"000036d0", +3511 => x"000036d0", +3512 => x"000036d8", +3513 => x"000036d8", +3514 => x"000036e0", +3515 => x"000036e0", +3516 => x"000036e8", +3517 => x"000036e8", +3518 => x"000036f0", +3519 => x"000036f0", +3520 => x"000036f8", +3521 => x"000036f8", +3522 => x"00003700", +3523 => x"00003700", +3524 => x"00003708", +3525 => x"00003708", +3526 => x"00003710", +3527 => x"00003710", +3528 => x"00003718", +3529 => x"00003718", +3530 => x"0000372c", +3531 => x"00000000", +3532 => x"00003994", +3533 => x"000039f0", +3534 => x"00003a4c", +3535 => x"00000000", +3536 => x"00000000", +3537 => x"00000000", +3538 => x"00000000", +3539 => x"00000000", +3540 => x"00000000", +3541 => x"00000000", +3542 => x"00000000", +3543 => x"00000000", +3544 => x"000031ac", +3545 => x"00000000", +3546 => x"00000000", +3547 => x"00000000", +3548 => x"00000000", +3549 => x"00000000", +3550 => x"00000000", +3551 => x"00000000", +3552 => x"00000000", +3553 => x"00000000", +3554 => x"00000000", +3555 => x"00000000", +3556 => x"00000000", +3557 => x"00000000", +3558 => x"00000000", +3559 => x"00000000", +3560 => x"00000000", +3561 => x"00000000", +3562 => x"00000000", +3563 => x"00000000", +3564 => x"00000000", +3565 => x"00000000", +3566 => x"00000000", +3567 => x"00000000", +3568 => x"00000000", +3569 => x"00000000", +3570 => x"00000000", +3571 => x"00000000", +3572 => x"00000000", +3573 => x"00000001", +3574 => x"330eabcd", +3575 => x"1234e66d", +3576 => x"deec0005", +3577 => x"000b0000", +3578 => x"00000000", +3579 => x"00000000", +3580 => x"00000000", +3581 => x"00000000", +3582 => x"00000000", +3583 => x"00000000", +3584 => x"00000000", +3585 => x"00000000", +3586 => x"00000000", +3587 => x"00000000", +3588 => x"00000000", +3589 => x"00000000", +3590 => x"00000000", +3591 => x"00000000", +3592 => x"00000000", +3593 => x"00000000", +3594 => x"00000000", +3595 => x"00000000", +3596 => x"00000000", +3597 => x"00000000", +3598 => x"00000000", +3599 => x"00000000", +3600 => x"00000000", +3601 => x"00000000", +3602 => x"00000000", +3603 => x"00000000", +3604 => x"00000000", +3605 => x"00000000", +3606 => x"00000000", +3607 => x"00000000", +3608 => x"00000000", +3609 => x"00000000", +3610 => x"00000000", +3611 => x"00000000", +3612 => x"00000000", +3613 => x"00000000", +3614 => x"00000000", +3615 => x"00000000", +3616 => x"00000000", +3617 => x"00000000", +3618 => x"00000000", +3619 => x"00000000", +3620 => x"00000000", +3621 => x"00000000", +3622 => x"00000000", +3623 => x"00000000", +3624 => x"00000000", +3625 => x"00000000", +3626 => x"00000000", +3627 => x"00000000", +3628 => x"00000000", +3629 => x"00000000", +3630 => x"00000000", +3631 => x"00000000", +3632 => x"00000000", +3633 => x"00000000", +3634 => x"00000000", +3635 => x"00000000", +3636 => x"00000000", +3637 => x"00000000", +3638 => x"00000000", +3639 => x"00000000", +3640 => x"00000000", +3641 => x"00000000", +3642 => x"00000000", +3643 => x"00000000", +3644 => x"00000000", +3645 => x"00000000", +3646 => x"00000000", +3647 => x"00000000", +3648 => x"00000000", +3649 => x"00000000", +3650 => x"00000000", +3651 => x"00000000", +3652 => x"00000000", +3653 => x"00000000", +3654 => x"00000000", +3655 => x"00000000", +3656 => x"00000000", +3657 => x"00000000", +3658 => x"00000000", +3659 => x"00000000", +3660 => x"00000000", +3661 => x"00000000", +3662 => x"00000000", +3663 => x"00000000", +3664 => x"00000000", +3665 => x"00000000", +3666 => x"00000000", +3667 => x"00000000", +3668 => x"00000000", +3669 => x"00000000", +3670 => x"00000000", +3671 => x"00000000", +3672 => x"00000000", +3673 => x"00000000", +3674 => x"00000000", +3675 => x"00000000", +3676 => x"00000000", +3677 => x"00000000", +3678 => x"00000000", +3679 => x"00000000", +3680 => x"00000000", +3681 => x"00000000", +3682 => x"00000000", +3683 => x"00000000", +3684 => x"00000000", +3685 => x"00000000", +3686 => x"00000000", +3687 => x"00000000", +3688 => x"00000000", +3689 => x"00000000", +3690 => x"00000000", +3691 => x"00000000", +3692 => x"00000000", +3693 => x"00000000", +3694 => x"00000000", +3695 => x"00000000", +3696 => x"00000000", +3697 => x"00000000", +3698 => x"00000000", +3699 => x"00000000", +3700 => x"00000000", +3701 => x"00000000", +3702 => x"00000000", +3703 => x"00000000", +3704 => x"00000000", +3705 => x"00000000", +3706 => x"00000000", +3707 => x"00000000", +3708 => x"00000000", +3709 => x"00000000", +3710 => x"00000000", +3711 => x"00000000", +3712 => x"00000000", +3713 => x"00000000", +3714 => x"00000000", +3715 => x"00000000", +3716 => x"00000000", +3717 => x"00000000", +3718 => x"00000000", +3719 => x"00000000", +3720 => x"00000000", +3721 => x"00000000", +3722 => x"00000000", +3723 => x"00000000", +3724 => x"00000000", +3725 => x"00000000", +3726 => x"00000000", +3727 => x"00000000", +3728 => x"00000000", +3729 => x"00000000", +3730 => x"00000000", +3731 => x"00000000", +3732 => x"00000000", +3733 => x"00000000", +3734 => x"00000000", +3735 => x"00000000", +3736 => x"00000000", +3737 => x"00000000", +3738 => x"00000000", +3739 => x"00000000", +3740 => x"00000000", +3741 => x"00000000", +3742 => x"00000000", +3743 => x"00000000", +3744 => x"00000000", +3745 => x"00000000", +3746 => x"00000000", +3747 => x"00000000", +3748 => x"00000000", +3749 => x"00000000", +3750 => x"00000000", +3751 => x"00000000", +3752 => x"00000000", +3753 => x"00000000", +3754 => x"000031b0", +3755 => x"ffffffff", +3756 => x"00000000", +3757 => x"ffffffff", +3758 => x"00000000", + others => x"00000000" +); + +begin + +mem_busy <= '0'; + +process (clk) +begin + if (clk'event and clk = '1') then + if (mem_writeEnable = '1') then + ram(conv_integer(mem_addr)) := mem_write; + end if; + mem_read <= ram(conv_integer(mem_addr)); + end if; +end process; + + + + +end dram_arch; diff --git a/zpu/hdl/zpu4/src/bram_dmips.vhd b/zpu/hdl/zpu4/src/bram_dmips.vhd new file mode 100644 index 0000000..1c85e0d --- /dev/null +++ b/zpu/hdl/zpu4/src/bram_dmips.vhd @@ -0,0 +1,3717 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + + +library work; +use work.zpu_config.all; +use work.zpupkg.all; + +entity dualport_ram is +port (clk : in std_logic; + memAWriteEnable : in std_logic; + memAAddr : in std_logic_vector(maxAddrBit downto minAddrBit); + memAWrite : in std_logic_vector(wordSize-1 downto 0); + memARead : out std_logic_vector(wordSize-1 downto 0); + memBWriteEnable : in std_logic; + memBAddr : in std_logic_vector(maxAddrBit downto minAddrBit); + memBWrite : in std_logic_vector(wordSize-1 downto 0); + memBRead : out std_logic_vector(wordSize-1 downto 0)); +end dualport_ram; + +architecture dualport_ram_arch of dualport_ram is + + +type ram_type is array(0 to ((2**(maxAddrBit+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); + +shared variable ram : ram_type := +( +0 => x"0b0b0b0b", +1 => x"80700b0b", +2 => x"80e2a40c", +3 => x"3a0b0b80", +4 => x"c6fc0400", +5 => x"00000000", +6 => x"00000000", +7 => x"00000000", +8 => x"80088408", +9 => x"88080b0b", +10 => x"80c7c32d", +11 => x"880c840c", +12 => x"800c0400", +13 => x"00000000", +14 => x"00000000", +15 => x"00000000", +16 => x"71fd0608", +17 => x"72830609", +18 => x"81058205", +19 => x"832b2a83", +20 => x"ffff0652", +21 => x"04000000", +22 => x"00000000", +23 => x"00000000", +24 => x"71fd0608", +25 => x"83ffff73", +26 => x"83060981", +27 => x"05820583", +28 => x"2b2b0906", +29 => x"7383ffff", +30 => x"0b0b0b0b", +31 => x"83a70400", +32 => x"72098105", +33 => x"72057373", +34 => x"09060906", +35 => x"73097306", +36 => x"070a8106", +37 => x"53510400", +38 => x"00000000", +39 => x"00000000", +40 => x"72722473", +41 => x"732e0753", +42 => x"51040000", +43 => x"00000000", +44 => x"00000000", +45 => x"00000000", +46 => x"00000000", +47 => x"00000000", +48 => x"71737109", +49 => x"71068106", +50 => x"30720a10", +51 => x"0a720a10", +52 => x"0a31050a", +53 => x"81065151", +54 => x"53510400", +55 => x"00000000", +56 => x"72722673", +57 => x"732e0753", +58 => x"51040000", +59 => x"00000000", +60 => x"00000000", +61 => x"00000000", +62 => x"00000000", +63 => x"00000000", +64 => x"00000000", +65 => x"00000000", +66 => x"00000000", +67 => x"00000000", +68 => x"00000000", +69 => x"00000000", +70 => x"00000000", +71 => x"00000000", +72 => x"0b0b0b88", +73 => x"c4040000", +74 => x"00000000", +75 => x"00000000", +76 => x"00000000", +77 => x"00000000", +78 => x"00000000", +79 => x"00000000", +80 => x"720a722b", +81 => x"0a535104", +82 => x"00000000", +83 => x"00000000", +84 => x"00000000", +85 => x"00000000", +86 => x"00000000", +87 => x"00000000", +88 => x"72729f06", +89 => x"0981050b", +90 => x"0b0b88a7", +91 => x"05040000", +92 => x"00000000", +93 => x"00000000", +94 => x"00000000", +95 => x"00000000", +96 => x"72722aff", +97 => x"739f062a", +98 => x"0974090a", +99 => x"8106ff05", +100 => x"06075351", +101 => x"04000000", +102 => x"00000000", +103 => x"00000000", +104 => x"71715351", +105 => x"020d0406", +106 => x"73830609", +107 => x"81058205", +108 => x"832b0b2b", +109 => x"0772fc06", +110 => x"0c515104", +111 => x"00000000", +112 => x"72098105", +113 => x"72050970", +114 => x"81050906", +115 => x"0a810653", +116 => x"51040000", +117 => x"00000000", +118 => x"00000000", +119 => x"00000000", +120 => x"72098105", +121 => x"72050970", +122 => x"81050906", +123 => x"0a098106", +124 => x"53510400", +125 => x"00000000", +126 => x"00000000", +127 => x"00000000", +128 => x"71098105", +129 => x"52040000", +130 => x"00000000", +131 => x"00000000", +132 => x"00000000", +133 => x"00000000", +134 => x"00000000", +135 => x"00000000", +136 => x"72720981", +137 => x"05055351", +138 => x"04000000", +139 => x"00000000", +140 => x"00000000", +141 => x"00000000", +142 => x"00000000", +143 => x"00000000", +144 => x"72097206", +145 => x"73730906", +146 => x"07535104", +147 => x"00000000", +148 => x"00000000", +149 => x"00000000", +150 => x"00000000", +151 => x"00000000", +152 => x"71fc0608", +153 => x"72830609", +154 => x"81058305", +155 => x"1010102a", +156 => x"81ff0652", +157 => x"04000000", +158 => x"00000000", +159 => x"00000000", +160 => x"71fc0608", +161 => x"0b0b80e2", +162 => x"90738306", +163 => x"10100508", +164 => x"060b0b0b", +165 => x"88aa0400", +166 => x"00000000", +167 => x"00000000", +168 => x"80088408", +169 => x"88087575", +170 => x"0b0b0baf", +171 => x"ac2d5050", +172 => x"80085688", +173 => x"0c840c80", +174 => x"0c510400", +175 => x"00000000", +176 => x"80088408", +177 => x"88087575", +178 => x"0b0b0baf", +179 => x"f02d5050", +180 => x"80085688", +181 => x"0c840c80", +182 => x"0c510400", +183 => x"00000000", +184 => x"72097081", +185 => x"0509060a", +186 => x"8106ff05", +187 => x"70547106", +188 => x"73097274", +189 => x"05ff0506", +190 => x"07515151", +191 => x"04000000", +192 => x"72097081", +193 => x"0509060a", +194 => x"098106ff", +195 => x"05705471", +196 => x"06730972", +197 => x"7405ff05", +198 => x"06075151", +199 => x"51040000", +200 => x"05ff0504", +201 => x"00000000", +202 => x"00000000", +203 => x"00000000", +204 => x"00000000", +205 => x"00000000", +206 => x"00000000", +207 => x"00000000", +208 => x"810b0b0b", +209 => x"80e2a00c", +210 => x"51040000", +211 => x"00000000", +212 => x"00000000", +213 => x"00000000", +214 => x"00000000", +215 => x"00000000", +216 => x"71810552", +217 => x"04000000", +218 => x"00000000", +219 => x"00000000", +220 => x"00000000", +221 => x"00000000", +222 => x"00000000", +223 => x"00000000", +224 => x"00000000", +225 => x"00000000", +226 => x"00000000", +227 => x"00000000", +228 => x"00000000", +229 => x"00000000", +230 => x"00000000", +231 => x"00000000", +232 => x"02840572", +233 => x"10100552", +234 => x"04000000", +235 => x"00000000", +236 => x"00000000", +237 => x"00000000", +238 => x"00000000", +239 => x"00000000", +240 => x"00000000", +241 => x"00000000", +242 => x"00000000", +243 => x"00000000", +244 => x"00000000", +245 => x"00000000", +246 => x"00000000", +247 => x"00000000", +248 => x"717105ff", +249 => x"05715351", +250 => x"020d0400", +251 => x"00000000", +252 => x"00000000", +253 => x"00000000", +254 => x"00000000", +255 => x"00000000", +256 => x"83d93f80", +257 => x"cbcf3f04", +258 => x"10101010", +259 => x"10101010", +260 => x"10101010", +261 => x"10101010", +262 => x"10101010", +263 => x"10101010", +264 => x"10101010", +265 => x"10101053", +266 => x"51047381", +267 => x"ff067383", +268 => x"06098105", +269 => x"83051010", +270 => x"102b0772", +271 => x"fc060c51", +272 => x"51043c04", +273 => x"72728072", +274 => x"8106ff05", +275 => x"09720605", +276 => x"71105272", +277 => x"0a100a53", +278 => x"72ed3851", +279 => x"51535104", +280 => x"ff3d0d0b", +281 => x"0b80f294", +282 => x"08528412", +283 => x"08708106", +284 => x"515170f6", +285 => x"38710881", +286 => x"ff06800c", +287 => x"833d0d04", +288 => x"ff3d0d0b", +289 => x"0b80f294", +290 => x"08528412", +291 => x"08700a10", +292 => x"0a708106", +293 => x"51515170", +294 => x"f1387372", +295 => x"0c833d0d", +296 => x"0480e2a0", +297 => x"08802ea8", +298 => x"38838080", +299 => x"0b0b0b80", +300 => x"f2940c82", +301 => x"a0800b0b", +302 => x"0b80f298", +303 => x"0c829080", +304 => x"0b80f2a8", +305 => x"0c0b0b80", +306 => x"f29c0b80", +307 => x"f2ac0c04", +308 => x"f8808080", +309 => x"a40b0b0b", +310 => x"80f2940c", +311 => x"f8808082", +312 => x"800b0b0b", +313 => x"80f2980c", +314 => x"f8808084", +315 => x"800b80f2", +316 => x"a80cf880", +317 => x"8080940b", +318 => x"80f2ac0c", +319 => x"f8808080", +320 => x"9c0b80f2", +321 => x"a40cf880", +322 => x"8080a00b", +323 => x"80f2b00c", +324 => x"04f23d0d", +325 => x"600b0b80", +326 => x"f2980856", +327 => x"5d82750c", +328 => x"8059805a", +329 => x"800b8f3d", +330 => x"71101017", +331 => x"70085957", +332 => x"5d5b8076", +333 => x"81ff067c", +334 => x"832b5658", +335 => x"5276537b", +336 => x"519af33f", +337 => x"7d7f7a72", +338 => x"077c7207", +339 => x"71716081", +340 => x"05415f5d", +341 => x"5b595755", +342 => x"7a8724bb", +343 => x"380b0b80", +344 => x"f298087b", +345 => x"10101170", +346 => x"08585155", +347 => x"807681ff", +348 => x"067c832b", +349 => x"56585276", +350 => x"537b519a", +351 => x"b93f7d7f", +352 => x"7a72077c", +353 => x"72077171", +354 => x"60810541", +355 => x"5f5d5b59", +356 => x"5755877b", +357 => x"25c73876", +358 => x"7d0c7784", +359 => x"1e0c7c80", +360 => x"0c903d0d", +361 => x"04ff3d0d", +362 => x"80f2a033", +363 => x"5170a738", +364 => x"80e2ac08", +365 => x"70085252", +366 => x"70802e94", +367 => x"38841280", +368 => x"e2ac0c70", +369 => x"2d80e2ac", +370 => x"08700852", +371 => x"5270ee38", +372 => x"810b80f2", +373 => x"a034833d", +374 => x"0d040480", +375 => x"3d0d0b0b", +376 => x"80f29008", +377 => x"802e8e38", +378 => x"0b0b0b0b", +379 => x"800b802e", +380 => x"09810685", +381 => x"38823d0d", +382 => x"040b0b80", +383 => x"f290510b", +384 => x"0b0bf3fc", +385 => x"3f823d0d", +386 => x"0404ff3d", +387 => x"0d028f05", +388 => x"3352718a", +389 => x"2e8a3871", +390 => x"51fce53f", +391 => x"833d0d04", +392 => x"8d51fcdc", +393 => x"3f7151fc", +394 => x"d73f833d", +395 => x"0d04ce3d", +396 => x"0db53d70", +397 => x"70840552", +398 => x"088c8a5c", +399 => x"56a53d5e", +400 => x"5c807570", +401 => x"81055733", +402 => x"765b5558", +403 => x"73782e80", +404 => x"c1388e3d", +405 => x"5b73a52e", +406 => x"09810680", +407 => x"c5387870", +408 => x"81055a33", +409 => x"547380e4", +410 => x"2e81b638", +411 => x"7380e424", +412 => x"80c63873", +413 => x"80e32ea1", +414 => x"388052a5", +415 => x"51792d80", +416 => x"52735179", +417 => x"2d821858", +418 => x"78708105", +419 => x"5a335473", +420 => x"c4387780", +421 => x"0cb43d0d", +422 => x"047b841d", +423 => x"83123356", +424 => x"5d578052", +425 => x"7351792d", +426 => x"81187970", +427 => x"81055b33", +428 => x"555873ff", +429 => x"a038db39", +430 => x"7380f32e", +431 => x"098106ff", +432 => x"b8387b84", +433 => x"1d710859", +434 => x"5d568077", +435 => x"33555673", +436 => x"762e8d38", +437 => x"81167018", +438 => x"70335755", +439 => x"5674f538", +440 => x"ff165580", +441 => x"7625ffa0", +442 => x"38767081", +443 => x"05583354", +444 => x"80527351", +445 => x"792d8118", +446 => x"75ff1757", +447 => x"57588076", +448 => x"25ff8538", +449 => x"76708105", +450 => x"58335480", +451 => x"52735179", +452 => x"2d811875", +453 => x"ff175757", +454 => x"58758024", +455 => x"cc38fee8", +456 => x"397b841d", +457 => x"71087071", +458 => x"9f2c5953", +459 => x"595d5680", +460 => x"75248195", +461 => x"38757d7c", +462 => x"58565480", +463 => x"5773772e", +464 => x"098106b6", +465 => x"38b07b34", +466 => x"02b50556", +467 => x"7a762e97", +468 => x"38ff1656", +469 => x"75337570", +470 => x"81055734", +471 => x"8117577a", +472 => x"762e0981", +473 => x"06eb3880", +474 => x"7534767d", +475 => x"ff125758", +476 => x"56758024", +477 => x"fef338fe", +478 => x"8f398a52", +479 => x"7351a0f0", +480 => x"3f80080b", +481 => x"0b80d484", +482 => x"05337670", +483 => x"81055834", +484 => x"8a527351", +485 => x"a0963f80", +486 => x"08548008", +487 => x"802effac", +488 => x"388a5273", +489 => x"51a0c93f", +490 => x"80080b0b", +491 => x"80d48405", +492 => x"33767081", +493 => x"0558348a", +494 => x"5273519f", +495 => x"ef3f8008", +496 => x"548008ff", +497 => x"b538ff84", +498 => x"39745276", +499 => x"53b43dff", +500 => x"b8055195", +501 => x"b63fa33d", +502 => x"0856fed9", +503 => x"39803d0d", +504 => x"80c10b81", +505 => x"c0f43480", +506 => x"0b81c2d0", +507 => x"0c70800c", +508 => x"823d0d04", +509 => x"ff3d0d80", +510 => x"0b81c0f4", +511 => x"33525270", +512 => x"80c12e99", +513 => x"387181c2", +514 => x"d0080781", +515 => x"c2d00c80", +516 => x"c20b81c0", +517 => x"f8347080", +518 => x"0c833d0d", +519 => x"04810b81", +520 => x"c2d00807", +521 => x"81c2d00c", +522 => x"80c20b81", +523 => x"c0f83470", +524 => x"800c833d", +525 => x"0d04fd3d", +526 => x"0d757008", +527 => x"8a055353", +528 => x"81c0f433", +529 => x"517080c1", +530 => x"2e8b3873", +531 => x"f3387080", +532 => x"0c853d0d", +533 => x"04ff1270", +534 => x"81c0f008", +535 => x"31740c80", +536 => x"0c853d0d", +537 => x"04fc3d0d", +538 => x"81c0fc08", +539 => x"5574802e", +540 => x"8c387675", +541 => x"08710c81", +542 => x"c0fc0856", +543 => x"548c1553", +544 => x"81c0f008", +545 => x"528a5190", +546 => x"f03f7380", +547 => x"0c863d0d", +548 => x"04fb3d0d", +549 => x"77700856", +550 => x"56b05381", +551 => x"c0fc0852", +552 => x"7451acb4", +553 => x"3f850b8c", +554 => x"170c850b", +555 => x"8c160c75", +556 => x"08750c81", +557 => x"c0fc0854", +558 => x"73802e8a", +559 => x"38730875", +560 => x"0c81c0fc", +561 => x"08548c14", +562 => x"5381c0f0", +563 => x"08528a51", +564 => x"90a73f84", +565 => x"1508ad38", +566 => x"860b8c16", +567 => x"0c881552", +568 => x"88160851", +569 => x"8fb33f81", +570 => x"c0fc0870", +571 => x"08760c54", +572 => x"8c157054", +573 => x"548a5273", +574 => x"08518ffd", +575 => x"3f73800c", +576 => x"873d0d04", +577 => x"750854b0", +578 => x"53735275", +579 => x"51abc93f", +580 => x"73800c87", +581 => x"3d0d04d9", +582 => x"3d0db051", +583 => x"9eeb3f80", +584 => x"0881c0ec", +585 => x"0cb0519e", +586 => x"e03f8008", +587 => x"81c0fc0c", +588 => x"81c0ec08", +589 => x"80080c80", +590 => x"0b800884", +591 => x"050c820b", +592 => x"80088805", +593 => x"0ca80b80", +594 => x"088c050c", +595 => x"9f530b0b", +596 => x"80d49052", +597 => x"80089005", +598 => x"51aafd3f", +599 => x"a13d5e9f", +600 => x"530b0b80", +601 => x"d4b0527d", +602 => x"51aaed3f", +603 => x"8a0b80ff", +604 => x"b00c0b0b", +605 => x"80ded451", +606 => x"f9b43f0b", +607 => x"0b80d4d0", +608 => x"51f9ab3f", +609 => x"0b0b80de", +610 => x"d451f9a2", +611 => x"3f80e2b4", +612 => x"08802e8a", +613 => x"cf380b0b", +614 => x"80d58051", +615 => x"f9903f0b", +616 => x"0b80ded4", +617 => x"51f9873f", +618 => x"80e2b008", +619 => x"520b0b80", +620 => x"d5ac51f8", +621 => x"f93f80f2", +622 => x"cc51bbf8", +623 => x"3f810b9a", +624 => x"3d5e5b80", +625 => x"0b80e2b0", +626 => x"082582d6", +627 => x"38903d5f", +628 => x"80c10b81", +629 => x"c0f43481", +630 => x"0b81c2d0", +631 => x"0c80c20b", +632 => x"81c0f834", +633 => x"8240835a", +634 => x"9f530b0b", +635 => x"80d5dc52", +636 => x"7c51a9e4", +637 => x"3f814180", +638 => x"7d537e52", +639 => x"568f9e3f", +640 => x"8008762e", +641 => x"09810683", +642 => x"38815675", +643 => x"81c2d00c", +644 => x"7f705856", +645 => x"758325a2", +646 => x"38751010", +647 => x"16fd0542", +648 => x"a93dffa4", +649 => x"05538352", +650 => x"76518dcd", +651 => x"3f7f8105", +652 => x"70417058", +653 => x"56837624", +654 => x"e0386154", +655 => x"755380f2", +656 => x"d45281c1", +657 => x"88518dc1", +658 => x"3f81c0fc", +659 => x"08700858", +660 => x"58b05377", +661 => x"527651a8", +662 => x"ff3f850b", +663 => x"8c190c85", +664 => x"0b8c180c", +665 => x"7708770c", +666 => x"81c0fc08", +667 => x"5675802e", +668 => x"8a387508", +669 => x"770c81c0", +670 => x"fc08568c", +671 => x"165381c0", +672 => x"f008528a", +673 => x"518cf23f", +674 => x"84170888", +675 => x"e038860b", +676 => x"8c180c88", +677 => x"17528818", +678 => x"08518bfd", +679 => x"3f81c0fc", +680 => x"08700878", +681 => x"0c568c17", +682 => x"7054598a", +683 => x"52780851", +684 => x"8cc73f80", +685 => x"c10b81c0", +686 => x"f8335757", +687 => x"767626a2", +688 => x"3880c352", +689 => x"76518dab", +690 => x"3f800861", +691 => x"2e8aec38", +692 => x"81177081", +693 => x"ff0681c0", +694 => x"f8335858", +695 => x"58757727", +696 => x"e0387960", +697 => x"29627054", +698 => x"71535b59", +699 => x"99be3f80", +700 => x"0840787a", +701 => x"31708729", +702 => x"80083180", +703 => x"088a0581", +704 => x"c0f43381", +705 => x"c0f0085e", +706 => x"5b525a56", +707 => x"7780c12e", +708 => x"8ad8387b", +709 => x"f738811b", +710 => x"5b80e2b0", +711 => x"087b25fd", +712 => x"af3881c0", +713 => x"e451b98c", +714 => x"3f0b0b80", +715 => x"d5fc51f5", +716 => x"fd3f0b0b", +717 => x"80ded451", +718 => x"f5f43f0b", +719 => x"0b80d68c", +720 => x"51f5eb3f", +721 => x"0b0b80de", +722 => x"d451f5e2", +723 => x"3f81c0f0", +724 => x"08520b0b", +725 => x"80d6c451", +726 => x"f5d43f85", +727 => x"520b0b80", +728 => x"d6e051f5", +729 => x"c93f81c2", +730 => x"d008520b", +731 => x"0b80d6fc", +732 => x"51f5bb3f", +733 => x"81520b0b", +734 => x"80d6e051", +735 => x"f5b03f81", +736 => x"c0f43352", +737 => x"0b0b80d7", +738 => x"9851f5a2", +739 => x"3f80c152", +740 => x"0b0b80d7", +741 => x"b451f596", +742 => x"3f81c0f8", +743 => x"33520b0b", +744 => x"80d7d051", +745 => x"f5883f80", +746 => x"c2520b0b", +747 => x"80d7b451", +748 => x"f4fc3f81", +749 => x"c1a80852", +750 => x"0b0b80d7", +751 => x"ec51f4ee", +752 => x"3f87520b", +753 => x"0b80d6e0", +754 => x"51f4e33f", +755 => x"80ffb008", +756 => x"520b0b80", +757 => x"d88851f4", +758 => x"d53f0b0b", +759 => x"80d8a451", +760 => x"f4cc3f0b", +761 => x"0b80d8d0", +762 => x"51f4c33f", +763 => x"81c0fc08", +764 => x"7008535a", +765 => x"0b0b80d8", +766 => x"dc51f4b2", +767 => x"3f0b0b80", +768 => x"d8f851f4", +769 => x"a93f81c0", +770 => x"fc088411", +771 => x"0853560b", +772 => x"0b80d9ac", +773 => x"51f4973f", +774 => x"80520b0b", +775 => x"80d6e051", +776 => x"f48c3f81", +777 => x"c0fc0888", +778 => x"11085358", +779 => x"0b0b80d9", +780 => x"c851f3fa", +781 => x"3f82520b", +782 => x"0b80d6e0", +783 => x"51f3ef3f", +784 => x"81c0fc08", +785 => x"8c110853", +786 => x"570b0b80", +787 => x"d9e451f3", +788 => x"dd3f9152", +789 => x"0b0b80d6", +790 => x"e051f3d2", +791 => x"3f81c0fc", +792 => x"08900552", +793 => x"0b0b80da", +794 => x"8051f3c2", +795 => x"3f0b0b80", +796 => x"da9c51f3", +797 => x"b93f0b0b", +798 => x"80dad451", +799 => x"f3b03f81", +800 => x"c0ec0870", +801 => x"08535f0b", +802 => x"0b80d8dc", +803 => x"51f39f3f", +804 => x"0b0b80da", +805 => x"e851f396", +806 => x"3f81c0ec", +807 => x"08841108", +808 => x"535b0b0b", +809 => x"80d9ac51", +810 => x"f3843f80", +811 => x"520b0b80", +812 => x"d6e051f2", +813 => x"f93f81c0", +814 => x"ec088811", +815 => x"08535c0b", +816 => x"0b80d9c8", +817 => x"51f2e73f", +818 => x"81520b0b", +819 => x"80d6e051", +820 => x"f2dc3f81", +821 => x"c0ec088c", +822 => x"1108535a", +823 => x"0b0b80d9", +824 => x"e451f2ca", +825 => x"3f92520b", +826 => x"0b80d6e0", +827 => x"51f2bf3f", +828 => x"81c0ec08", +829 => x"9005520b", +830 => x"0b80da80", +831 => x"51f2af3f", +832 => x"0b0b80da", +833 => x"9c51f2a6", +834 => x"3f7f520b", +835 => x"0b80dba8", +836 => x"51f29b3f", +837 => x"85520b0b", +838 => x"80d6e051", +839 => x"f2903f78", +840 => x"520b0b80", +841 => x"dbc451f2", +842 => x"853f8d52", +843 => x"0b0b80d6", +844 => x"e051f1fa", +845 => x"3f61520b", +846 => x"0b80dbe0", +847 => x"51f1ef3f", +848 => x"87520b0b", +849 => x"80d6e051", +850 => x"f1e43f60", +851 => x"520b0b80", +852 => x"dbfc51f1", +853 => x"d93f8152", +854 => x"0b0b80d6", +855 => x"e051f1ce", +856 => x"3f7d520b", +857 => x"0b80dc98", +858 => x"51f1c33f", +859 => x"0b0b80dc", +860 => x"b451f1ba", +861 => x"3f7c520b", +862 => x"0b80dcec", +863 => x"51f1af3f", +864 => x"0b0b80dd", +865 => x"8851f1a6", +866 => x"3f0b0b80", +867 => x"ded451f1", +868 => x"9d3f81c0", +869 => x"e40881c0", +870 => x"e80880f2", +871 => x"cc0880f2", +872 => x"d0087271", +873 => x"31707426", +874 => x"75743170", +875 => x"723180f2", +876 => x"c40c4444", +877 => x"80f2c80c", +878 => x"80f2c808", +879 => x"560b0b80", +880 => x"ddc0555c", +881 => x"595758f0", +882 => x"e53f80f2", +883 => x"c4085680", +884 => x"762582b1", +885 => x"3880e2b0", +886 => x"0870719f", +887 => x"2c9a3d53", +888 => x"565680f2", +889 => x"c40880f2", +890 => x"c8084153", +891 => x"7f547052", +892 => x"5a8a8d3f", +893 => x"66685f80", +894 => x"f2b40c7d", +895 => x"80f2b80c", +896 => x"80e2b008", +897 => x"709f2c58", +898 => x"568058bd", +899 => x"84c07855", +900 => x"55765275", +901 => x"53795187", +902 => x"f33f953d", +903 => x"80f2c408", +904 => x"80f2c808", +905 => x"41557f56", +906 => x"67694053", +907 => x"7e547052", +908 => x"5c89cd3f", +909 => x"64665e80", +910 => x"f2bc0c7c", +911 => x"80f2c00c", +912 => x"80e2b008", +913 => x"709f2c40", +914 => x"58805783", +915 => x"dceb9480", +916 => x"7755557e", +917 => x"5277537b", +918 => x"5187b13f", +919 => x"64665d5b", +920 => x"805e8ddd", +921 => x"7e555580", +922 => x"f2c40880", +923 => x"f2c80859", +924 => x"52775379", +925 => x"5187953f", +926 => x"66684054", +927 => x"7e557a52", +928 => x"7b53a93d", +929 => x"ffa80551", +930 => x"88f63f62", +931 => x"645e81c1", +932 => x"800c7c81", +933 => x"c1840c0b", +934 => x"0b80ddd0", +935 => x"51ef8f3f", +936 => x"80f2b808", +937 => x"520b0b80", +938 => x"de8051ef", +939 => x"813f0b0b", +940 => x"80de8851", +941 => x"eef83f80", +942 => x"f2c00852", +943 => x"0b0b80de", +944 => x"8051eeea", +945 => x"3f81c184", +946 => x"08520b0b", +947 => x"80deb851", +948 => x"eedc3f0b", +949 => x"0b80ded4", +950 => x"51eed33f", +951 => x"800b800c", +952 => x"a93d0d04", +953 => x"0b0b80de", +954 => x"d851f5b0", +955 => x"39770857", +956 => x"b0537652", +957 => x"77519fe0", +958 => x"3f80c10b", +959 => x"81c0f833", +960 => x"5757f7b8", +961 => x"39758a38", +962 => x"80f2c808", +963 => x"8126fdc5", +964 => x"380b0b80", +965 => x"df8851ee", +966 => x"953f0b0b", +967 => x"80dfc051", +968 => x"ee8c3f0b", +969 => x"0b80ded4", +970 => x"51ee833f", +971 => x"80e2b008", +972 => x"70719f2c", +973 => x"9a3d5356", +974 => x"5680f2c4", +975 => x"0880f2c8", +976 => x"0841537f", +977 => x"5470525a", +978 => x"87b63f66", +979 => x"685f80f2", +980 => x"b40c7d80", +981 => x"f2b80c80", +982 => x"e2b00870", +983 => x"9f2c5856", +984 => x"8058bd84", +985 => x"c0785555", +986 => x"76527553", +987 => x"7951859c", +988 => x"3f953d80", +989 => x"f2c40880", +990 => x"f2c80841", +991 => x"557f5667", +992 => x"6940537e", +993 => x"5470525c", +994 => x"86f63f64", +995 => x"665e80f2", +996 => x"bc0c7c80", +997 => x"f2c00c80", +998 => x"e2b00870", +999 => x"9f2c4058", +1000 => x"805783dc", +1001 => x"eb948077", +1002 => x"55557e52", +1003 => x"77537b51", +1004 => x"84da3f64", +1005 => x"665d5b80", +1006 => x"5e8ddd7e", +1007 => x"555580f2", +1008 => x"c40880f2", +1009 => x"c8085952", +1010 => x"77537951", +1011 => x"84be3f66", +1012 => x"6840547e", +1013 => x"557a527b", +1014 => x"53a93dff", +1015 => x"a8055186", +1016 => x"9f3f6264", +1017 => x"5e81c180", +1018 => x"0c7c81c1", +1019 => x"840c0b0b", +1020 => x"80ddd051", +1021 => x"ecb83f80", +1022 => x"f2b80852", +1023 => x"0b0b80de", +1024 => x"8051ecaa", +1025 => x"3f0b0b80", +1026 => x"de8851ec", +1027 => x"a13f80f2", +1028 => x"c008520b", +1029 => x"0b80de80", +1030 => x"51ec933f", +1031 => x"81c18408", +1032 => x"520b0b80", +1033 => x"deb851ec", +1034 => x"853f0b0b", +1035 => x"80ded451", +1036 => x"ebfc3f80", +1037 => x"0b800ca9", +1038 => x"3d0d04a9", +1039 => x"3dffa005", +1040 => x"52805180", +1041 => x"d43f9f53", +1042 => x"0b0b80df", +1043 => x"e0527c51", +1044 => x"9d863f7a", +1045 => x"7b81c0f0", +1046 => x"0c811870", +1047 => x"81ff0681", +1048 => x"c0f83359", +1049 => x"59595af4", +1050 => x"f439ff16", +1051 => x"707b3160", +1052 => x"0c5c800b", +1053 => x"811c5c5c", +1054 => x"80e2b008", +1055 => x"7b25f2d0", +1056 => x"38f59f39", +1057 => x"ff3d0d73", +1058 => x"82327030", +1059 => x"70720780", +1060 => x"25800c52", +1061 => x"52833d0d", +1062 => x"04fe3d0d", +1063 => x"74767153", +1064 => x"54527182", +1065 => x"2e833883", +1066 => x"5171812e", +1067 => x"9a388172", +1068 => x"269f3871", +1069 => x"822eb838", +1070 => x"71842ea9", +1071 => x"3870730c", +1072 => x"70800c84", +1073 => x"3d0d0480", +1074 => x"e40b81c0", +1075 => x"f008258b", +1076 => x"3880730c", +1077 => x"70800c84", +1078 => x"3d0d0483", +1079 => x"730c7080", +1080 => x"0c843d0d", +1081 => x"0482730c", +1082 => x"70800c84", +1083 => x"3d0d0481", +1084 => x"730c7080", +1085 => x"0c843d0d", +1086 => x"04803d0d", +1087 => x"74741482", +1088 => x"05710c80", +1089 => x"0c823d0d", +1090 => x"04f73d0d", +1091 => x"7b7d7f61", +1092 => x"85127082", +1093 => x"2b751170", +1094 => x"74717084", +1095 => x"05530c5a", +1096 => x"5a5d5b76", +1097 => x"0c7980f8", +1098 => x"180c7986", +1099 => x"12525758", +1100 => x"5a5a7676", +1101 => x"24993876", +1102 => x"b329822b", +1103 => x"79115153", +1104 => x"76737084", +1105 => x"05550c81", +1106 => x"14547574", +1107 => x"25f23876", +1108 => x"81cc2919", +1109 => x"fc110881", +1110 => x"05fc120c", +1111 => x"7a197008", +1112 => x"9fa0130c", +1113 => x"5856850b", +1114 => x"81c0f00c", +1115 => x"75800c8b", +1116 => x"3d0d04fe", +1117 => x"3d0d0293", +1118 => x"05335180", +1119 => x"02840597", +1120 => x"05335452", +1121 => x"70732e88", +1122 => x"3871800c", +1123 => x"843d0d04", +1124 => x"7081c0f4", +1125 => x"34810b80", +1126 => x"0c843d0d", +1127 => x"04f83d0d", +1128 => x"7a7c5956", +1129 => x"820b8319", +1130 => x"55557416", +1131 => x"70337533", +1132 => x"5b515372", +1133 => x"792e80c6", +1134 => x"3880c10b", +1135 => x"81168116", +1136 => x"56565782", +1137 => x"7525e338", +1138 => x"ffa91770", +1139 => x"81ff0655", +1140 => x"59738226", +1141 => x"83388755", +1142 => x"81537680", +1143 => x"d22e9838", +1144 => x"77527551", +1145 => x"9bc43f80", +1146 => x"53728008", +1147 => x"25893887", +1148 => x"1581c0f0", +1149 => x"0c815372", +1150 => x"800c8a3d", +1151 => x"0d047281", +1152 => x"c0f43482", +1153 => x"7525ffa2", +1154 => x"38ffbd39", +1155 => x"ef3d0d63", +1156 => x"65675b42", +1157 => x"79436769", +1158 => x"59407741", +1159 => x"5a805d80", +1160 => x"5e617083", +1161 => x"ffff0671", +1162 => x"902a6270", +1163 => x"83ffff06", +1164 => x"71902a74", +1165 => x"72297473", +1166 => x"29757329", +1167 => x"77742973", +1168 => x"902a0572", +1169 => x"11515856", +1170 => x"535f5a57", +1171 => x"5a585558", +1172 => x"73732786", +1173 => x"38848080", +1174 => x"16567390", +1175 => x"2a165b78", +1176 => x"83ffff06", +1177 => x"74848080", +1178 => x"29055c7a", +1179 => x"7c5a5d78", +1180 => x"5e777f29", +1181 => x"61782905", +1182 => x"7d055d7c", +1183 => x"7e567a0c", +1184 => x"74841b0c", +1185 => x"79800c93", +1186 => x"3d0d04f9", +1187 => x"3d0d797b", +1188 => x"7d545872", +1189 => x"59773079", +1190 => x"70307072", +1191 => x"079f2a73", +1192 => x"71315a52", +1193 => x"59777956", +1194 => x"730c5373", +1195 => x"84130c54", +1196 => x"800c893d", +1197 => x"0d04f93d", +1198 => x"0d797b7d", +1199 => x"7f565452", +1200 => x"5472802e", +1201 => x"a0387057", +1202 => x"7158a073", +1203 => x"31528072", +1204 => x"25a13877", +1205 => x"70742b57", +1206 => x"70732a78", +1207 => x"752b0756", +1208 => x"51747653", +1209 => x"5170740c", +1210 => x"7184150c", +1211 => x"73800c89", +1212 => x"3d0d0480", +1213 => x"56777230", +1214 => x"2b557476", +1215 => x"5351e639", +1216 => x"e43d0d6e", +1217 => x"a13d08a3", +1218 => x"3d085957", +1219 => x"5f80764d", +1220 => x"774ea33d", +1221 => x"08a53d08", +1222 => x"574b754c", +1223 => x"5e7d6c24", +1224 => x"86fb3880", +1225 => x"6a24878f", +1226 => x"38696b58", +1227 => x"566b6d5d", +1228 => x"467b4775", +1229 => x"44764564", +1230 => x"6468685c", +1231 => x"5c565674", +1232 => x"81e73878", +1233 => x"762782c7", +1234 => x"387581ff", +1235 => x"26832b55", +1236 => x"83ffff76", +1237 => x"278c3890", +1238 => x"55fe800a", +1239 => x"76278338", +1240 => x"98557575", +1241 => x"2a80e080", +1242 => x"057033a0", +1243 => x"77317131", +1244 => x"57555774", +1245 => x"802e9538", +1246 => x"75752ba0", +1247 => x"76317a77", +1248 => x"2b7c722a", +1249 => x"077c782b", +1250 => x"5d5b5956", +1251 => x"75902a76", +1252 => x"83ffff06", +1253 => x"71547a53", +1254 => x"59578880", +1255 => x"3f80085b", +1256 => x"87ea3f80", +1257 => x"08800879", +1258 => x"297c902b", +1259 => x"7c902a07", +1260 => x"56565973", +1261 => x"75279438", +1262 => x"8008ff05", +1263 => x"76155559", +1264 => x"75742687", +1265 => x"38747426", +1266 => x"87b93876", +1267 => x"52737531", +1268 => x"5187c93f", +1269 => x"80085587", +1270 => x"b33f8008", +1271 => x"80087929", +1272 => x"7b83ffff", +1273 => x"0677902b", +1274 => x"07565957", +1275 => x"73782796", +1276 => x"388008ff", +1277 => x"05761555", +1278 => x"57757426", +1279 => x"89387774", +1280 => x"26777131", +1281 => x"58567890", +1282 => x"2b770758", +1283 => x"805b7a40", +1284 => x"77417f61", +1285 => x"56547d80", +1286 => x"d938737f", +1287 => x"0c747f84", +1288 => x"050c7e80", +1289 => x"0c9e3d0d", +1290 => x"0480705c", +1291 => x"58747926", +1292 => x"dd387481", +1293 => x"ff26832b", +1294 => x"577483ff", +1295 => x"ff2682a5", +1296 => x"3874772a", +1297 => x"80e08005", +1298 => x"7033a079", +1299 => x"31713159", +1300 => x"5c5d7682", +1301 => x"b3387654", +1302 => x"74792783", +1303 => x"38815479", +1304 => x"76277407", +1305 => x"59815878", +1306 => x"ffa23876", +1307 => x"58805bff", +1308 => x"9d397352", +1309 => x"74539e3d", +1310 => x"e80551fc", +1311 => x"8e3f6769", +1312 => x"567f0c74", +1313 => x"7f84050c", +1314 => x"7e800c9e", +1315 => x"3d0d0475", +1316 => x"802e81c4", +1317 => x"387581ff", +1318 => x"26832b55", +1319 => x"83ffff76", +1320 => x"278c3890", +1321 => x"55fe800a", +1322 => x"76278338", +1323 => x"98557575", +1324 => x"2a80e080", +1325 => x"057033a0", +1326 => x"77317131", +1327 => x"575e5474", +1328 => x"84913878", +1329 => x"76315481", +1330 => x"76902a77", +1331 => x"83ffff06", +1332 => x"5f5d5b7b", +1333 => x"52735185", +1334 => x"c33f8008", +1335 => x"5785ad3f", +1336 => x"80088008", +1337 => x"7e297890", +1338 => x"2b7c902a", +1339 => x"07565659", +1340 => x"73752794", +1341 => x"388008ff", +1342 => x"05761555", +1343 => x"59757426", +1344 => x"87387474", +1345 => x"2684f338", +1346 => x"7b527375", +1347 => x"3151858c", +1348 => x"3f800855", +1349 => x"84f63f80", +1350 => x"0880087e", +1351 => x"297b83ff", +1352 => x"ff067790", +1353 => x"2b075659", +1354 => x"57737827", +1355 => x"96388008", +1356 => x"ff057615", +1357 => x"55577574", +1358 => x"26893877", +1359 => x"74267771", +1360 => x"31585a78", +1361 => x"902b7707", +1362 => x"7b41417f", +1363 => x"6156547d", +1364 => x"802efdc6", +1365 => x"38fe9b39", +1366 => x"75528151", +1367 => x"84ae3f80", +1368 => x"0856feb1", +1369 => x"399057fe", +1370 => x"800a7527", +1371 => x"fdd33898", +1372 => x"75712a80", +1373 => x"e0800570", +1374 => x"33a07331", +1375 => x"7131535d", +1376 => x"5e577680", +1377 => x"2efdcf38", +1378 => x"a0773175", +1379 => x"782b7772", +1380 => x"2a077779", +1381 => x"2b7b7a2b", +1382 => x"7d742a07", +1383 => x"7d7b2b73", +1384 => x"902a7483", +1385 => x"ffff0671", +1386 => x"597f772a", +1387 => x"585e5c41", +1388 => x"5f585c54", +1389 => x"83e63f80", +1390 => x"085483d0", +1391 => x"3f800880", +1392 => x"08792975", +1393 => x"902b7e90", +1394 => x"2a075656", +1395 => x"59737527", +1396 => x"99388008", +1397 => x"ff057b15", +1398 => x"55597a74", +1399 => x"268c3873", +1400 => x"75278738", +1401 => x"ff197b15", +1402 => x"55597652", +1403 => x"73753151", +1404 => x"83aa3f80", +1405 => x"08558394", +1406 => x"3f800880", +1407 => x"0879297d", +1408 => x"83ffff06", +1409 => x"77902b07", +1410 => x"56595773", +1411 => x"78279938", +1412 => x"8008ff05", +1413 => x"7b155557", +1414 => x"7a74268c", +1415 => x"38737827", +1416 => x"8738ff17", +1417 => x"7b155557", +1418 => x"73783179", +1419 => x"902b7807", +1420 => x"7083ffff", +1421 => x"0671902a", +1422 => x"7983ffff", +1423 => x"067a902a", +1424 => x"73722973", +1425 => x"73297473", +1426 => x"29767429", +1427 => x"73902a05", +1428 => x"72055755", +1429 => x"435f5b58", +1430 => x"5a57595a", +1431 => x"747c2786", +1432 => x"38848080", +1433 => x"17577490", +1434 => x"2a177983", +1435 => x"ffff0676", +1436 => x"84808029", +1437 => x"05575776", +1438 => x"7a269a38", +1439 => x"767a3270", +1440 => x"30707207", +1441 => x"8025565a", +1442 => x"5b7c7627", +1443 => x"fafe3873", +1444 => x"802efaf8", +1445 => x"38ff1858", +1446 => x"805bfaf2", +1447 => x"39ff7653", +1448 => x"77549f3d", +1449 => x"e805525e", +1450 => x"f7e13f67", +1451 => x"69574c75", +1452 => x"4d698025", +1453 => x"f8f3387d", +1454 => x"096a6c5c", +1455 => x"537a549f", +1456 => x"3de80552", +1457 => x"5ef7c43f", +1458 => x"6769714c", +1459 => x"704d5856", +1460 => x"f8db39a0", +1461 => x"75317676", +1462 => x"2b7a772b", +1463 => x"7c732a07", +1464 => x"7c782b72", +1465 => x"902a7383", +1466 => x"ffff0671", +1467 => x"587e762a", +1468 => x"5742405d", +1469 => x"5d575881", +1470 => x"a33f8008", +1471 => x"57818d3f", +1472 => x"80088008", +1473 => x"7e297890", +1474 => x"2b7d902a", +1475 => x"07565659", +1476 => x"73752799", +1477 => x"388008ff", +1478 => x"05761555", +1479 => x"59757426", +1480 => x"8c387375", +1481 => x"278738ff", +1482 => x"19761555", +1483 => x"597b5273", +1484 => x"75315180", +1485 => x"e73f8008", +1486 => x"5580d13f", +1487 => x"80088008", +1488 => x"7e297c83", +1489 => x"ffff0670", +1490 => x"78902b07", +1491 => x"51565858", +1492 => x"73772799", +1493 => x"388008ff", +1494 => x"05761555", +1495 => x"58757426", +1496 => x"8c387377", +1497 => x"278738ff", +1498 => x"18761555", +1499 => x"5878902b", +1500 => x"78077478", +1501 => x"31555bfa", +1502 => x"da39ff19", +1503 => x"76155559", +1504 => x"fb8639ff", +1505 => x"19761555", +1506 => x"59f8c039", +1507 => x"fe3d0d80", +1508 => x"53755274", +1509 => x"5181913f", +1510 => x"843d0d04", +1511 => x"fe3d0d81", +1512 => x"53755274", +1513 => x"5181813f", +1514 => x"843d0d04", +1515 => x"fb3d0d77", +1516 => x"79555580", +1517 => x"56757524", +1518 => x"ab388074", +1519 => x"249d3880", +1520 => x"53735274", +1521 => x"5180e13f", +1522 => x"80085475", +1523 => x"802e8538", +1524 => x"80083054", +1525 => x"73800c87", +1526 => x"3d0d0473", +1527 => x"30768132", +1528 => x"5754dc39", +1529 => x"74305581", +1530 => x"56738025", +1531 => x"d238ec39", +1532 => x"fa3d0d78", +1533 => x"7a575580", +1534 => x"57767524", +1535 => x"a438759f", +1536 => x"2c548153", +1537 => x"75743274", +1538 => x"31527451", +1539 => x"9b3f8008", +1540 => x"5476802e", +1541 => x"85388008", +1542 => x"30547380", +1543 => x"0c883d0d", +1544 => x"04743055", +1545 => x"8157d739", +1546 => x"fc3d0d76", +1547 => x"78535481", +1548 => x"53807473", +1549 => x"26525572", +1550 => x"802e9838", +1551 => x"70802eab", +1552 => x"38807224", +1553 => x"a6387110", +1554 => x"73107572", +1555 => x"26535452", +1556 => x"72ea3873", +1557 => x"51788338", +1558 => x"74517080", +1559 => x"0c863d0d", +1560 => x"04720a10", +1561 => x"0a720a10", +1562 => x"0a535372", +1563 => x"802ee438", +1564 => x"717426ed", +1565 => x"38737231", +1566 => x"75740774", +1567 => x"0a100a74", +1568 => x"0a100a55", +1569 => x"555654e3", +1570 => x"39ff3d0d", +1571 => x"735280ea", +1572 => x"fc085196", +1573 => x"3f833d0d", +1574 => x"04ff3d0d", +1575 => x"735280ea", +1576 => x"fc085190", +1577 => x"cc3f833d", +1578 => x"0d04f43d", +1579 => x"0d7e608b", +1580 => x"1170f806", +1581 => x"5b55555d", +1582 => x"72962683", +1583 => x"38905880", +1584 => x"78247479", +1585 => x"26075580", +1586 => x"5474742e", +1587 => x"09810680", +1588 => x"ca387c51", +1589 => x"8d9e3f77", +1590 => x"83f72680", +1591 => x"c5387783", +1592 => x"2a701010", +1593 => x"1080e2f4", +1594 => x"058c1108", +1595 => x"58585475", +1596 => x"772e81f0", +1597 => x"38841608", +1598 => x"fc068c17", +1599 => x"08881808", +1600 => x"718c120c", +1601 => x"88120c5b", +1602 => x"76058411", +1603 => x"08810784", +1604 => x"120c537c", +1605 => x"518cde3f", +1606 => x"88165473", +1607 => x"800c8e3d", +1608 => x"0d047789", +1609 => x"2a78832a", +1610 => x"58547380", +1611 => x"2ebf3877", +1612 => x"862ab805", +1613 => x"57847427", +1614 => x"b43880db", +1615 => x"14579474", +1616 => x"27ab3877", +1617 => x"8c2a80ee", +1618 => x"055780d4", +1619 => x"74279e38", +1620 => x"778f2a80", +1621 => x"f7055782", +1622 => x"d4742791", +1623 => x"3877922a", +1624 => x"80fc0557", +1625 => x"8ad47427", +1626 => x"843880fe", +1627 => x"57761010", +1628 => x"1080e2f4", +1629 => x"058c1108", +1630 => x"56537473", +1631 => x"2ea33884", +1632 => x"1508fc06", +1633 => x"70793155", +1634 => x"56738f24", +1635 => x"88e43873", +1636 => x"802588e6", +1637 => x"388c1508", +1638 => x"5574732e", +1639 => x"098106df", +1640 => x"38811759", +1641 => x"80e38408", +1642 => x"567580e2", +1643 => x"fc2e82cc", +1644 => x"38841608", +1645 => x"fc067079", +1646 => x"31555573", +1647 => x"8f24bb38", +1648 => x"80e2fc0b", +1649 => x"80e3880c", +1650 => x"80e2fc0b", +1651 => x"80e3840c", +1652 => x"80742480", +1653 => x"db387416", +1654 => x"84110881", +1655 => x"0784120c", +1656 => x"53feb039", +1657 => x"88168c11", +1658 => x"08575975", +1659 => x"792e0981", +1660 => x"06fe8238", +1661 => x"821459ff", +1662 => x"ab397716", +1663 => x"78810784", +1664 => x"180c7080", +1665 => x"e3880c70", +1666 => x"80e3840c", +1667 => x"80e2fc0b", +1668 => x"8c120c8c", +1669 => x"11088812", +1670 => x"0c748107", +1671 => x"84120c74", +1672 => x"0574710c", +1673 => x"5b7c518a", +1674 => x"cc3f8816", +1675 => x"54fdec39", +1676 => x"83ff7527", +1677 => x"83913874", +1678 => x"892a7583", +1679 => x"2a545473", +1680 => x"802ebf38", +1681 => x"74862ab8", +1682 => x"05538474", +1683 => x"27b43880", +1684 => x"db145394", +1685 => x"7427ab38", +1686 => x"748c2a80", +1687 => x"ee055380", +1688 => x"d474279e", +1689 => x"38748f2a", +1690 => x"80f70553", +1691 => x"82d47427", +1692 => x"91387492", +1693 => x"2a80fc05", +1694 => x"538ad474", +1695 => x"27843880", +1696 => x"fe537210", +1697 => x"101080e2", +1698 => x"f4058811", +1699 => x"08555773", +1700 => x"772e868b", +1701 => x"38841408", +1702 => x"fc065b74", +1703 => x"7b278d38", +1704 => x"88140854", +1705 => x"73772e09", +1706 => x"8106ea38", +1707 => x"8c140880", +1708 => x"e2f40b84", +1709 => x"0508718c", +1710 => x"190c7588", +1711 => x"190c7788", +1712 => x"130c5c57", +1713 => x"758c150c", +1714 => x"78538079", +1715 => x"24839838", +1716 => x"72822c81", +1717 => x"712b5656", +1718 => x"747b2680", +1719 => x"ca387a75", +1720 => x"06577682", +1721 => x"a33878fc", +1722 => x"06840559", +1723 => x"7410707c", +1724 => x"06555573", +1725 => x"82923884", +1726 => x"1959f139", +1727 => x"80e2f40b", +1728 => x"84050879", +1729 => x"545b7880", +1730 => x"25c63882", +1731 => x"da397409", +1732 => x"7b067080", +1733 => x"e2f40b84", +1734 => x"050c5b74", +1735 => x"1055747b", +1736 => x"26853874", +1737 => x"85bc3880", +1738 => x"e2f40b88", +1739 => x"05087084", +1740 => x"1208fc06", +1741 => x"707b317b", +1742 => x"72268f72", +1743 => x"25075d57", +1744 => x"5c5c5578", +1745 => x"802e80d9", +1746 => x"38791580", +1747 => x"e2ec0819", +1748 => x"90115954", +1749 => x"5680e2e8", +1750 => x"08ff2e88", +1751 => x"38a08f13", +1752 => x"e0800657", +1753 => x"76527c51", +1754 => x"888c3f80", +1755 => x"08548008", +1756 => x"ff2e9038", +1757 => x"80087627", +1758 => x"82a73874", +1759 => x"80e2f42e", +1760 => x"829f3880", +1761 => x"e2f40b88", +1762 => x"05085584", +1763 => x"1508fc06", +1764 => x"70793179", +1765 => x"72268f72", +1766 => x"25075d55", +1767 => x"5a7a83f2", +1768 => x"38778107", +1769 => x"84160c77", +1770 => x"157080e2", +1771 => x"f40b8805", +1772 => x"0c748107", +1773 => x"84120c56", +1774 => x"7c5187b9", +1775 => x"3f881554", +1776 => x"73800c8e", +1777 => x"3d0d0474", +1778 => x"832a7054", +1779 => x"54807424", +1780 => x"819b3872", +1781 => x"822c8171", +1782 => x"2b80e2f8", +1783 => x"08077080", +1784 => x"e2f40b84", +1785 => x"050c7510", +1786 => x"101080e2", +1787 => x"f4058811", +1788 => x"08718c1b", +1789 => x"0c70881b", +1790 => x"0c798813", +1791 => x"0c57555c", +1792 => x"55758c15", +1793 => x"0cfdc139", +1794 => x"78791010", +1795 => x"1080e2f4", +1796 => x"0570565b", +1797 => x"5c8c1408", +1798 => x"5675742e", +1799 => x"a3388416", +1800 => x"08fc0670", +1801 => x"79315853", +1802 => x"768f2483", +1803 => x"f1387680", +1804 => x"2584af38", +1805 => x"8c160856", +1806 => x"75742e09", +1807 => x"8106df38", +1808 => x"8814811a", +1809 => x"70830655", +1810 => x"5a5472c9", +1811 => x"387b8306", +1812 => x"5675802e", +1813 => x"fdb838ff", +1814 => x"1cf81b5b", +1815 => x"5c881a08", +1816 => x"7a2eea38", +1817 => x"fdb53983", +1818 => x"1953fce4", +1819 => x"39831470", +1820 => x"822c8171", +1821 => x"2b80e2f8", +1822 => x"08077080", +1823 => x"e2f40b84", +1824 => x"050c7610", +1825 => x"101080e2", +1826 => x"f4058811", +1827 => x"08718c1c", +1828 => x"0c70881c", +1829 => x"0c7a8813", +1830 => x"0c58535d", +1831 => x"5653fee1", +1832 => x"3980e2b8", +1833 => x"08175980", +1834 => x"08762e81", +1835 => x"8b3880e2", +1836 => x"e808ff2e", +1837 => x"848e3873", +1838 => x"76311980", +1839 => x"e2b80c73", +1840 => x"87067056", +1841 => x"5372802e", +1842 => x"88388873", +1843 => x"31701555", +1844 => x"5576149f", +1845 => x"ff06a080", +1846 => x"71311670", +1847 => x"547e5351", +1848 => x"5385933f", +1849 => x"80085680", +1850 => x"08ff2e81", +1851 => x"9e3880e2", +1852 => x"b8081370", +1853 => x"80e2b80c", +1854 => x"747580e2", +1855 => x"f40b8805", +1856 => x"0c777631", +1857 => x"15810755", +1858 => x"56597a80", +1859 => x"e2f42e83", +1860 => x"c038798f", +1861 => x"2682ef38", +1862 => x"810b8415", +1863 => x"0c841508", +1864 => x"fc067079", +1865 => x"31797226", +1866 => x"8f722507", +1867 => x"5d555a7a", +1868 => x"802efced", +1869 => x"3880db39", +1870 => x"80089fff", +1871 => x"065574fe", +1872 => x"ed387880", +1873 => x"e2b80c80", +1874 => x"e2f40b88", +1875 => x"05087a18", +1876 => x"81078412", +1877 => x"0c5580e2", +1878 => x"e4087927", +1879 => x"86387880", +1880 => x"e2e40c80", +1881 => x"e2e00879", +1882 => x"27fca038", +1883 => x"7880e2e0", +1884 => x"0c841508", +1885 => x"fc067079", +1886 => x"31797226", +1887 => x"8f722507", +1888 => x"5d555a7a", +1889 => x"802efc99", +1890 => x"38883980", +1891 => x"745753fe", +1892 => x"dd397c51", +1893 => x"83df3f80", +1894 => x"0b800c8e", +1895 => x"3d0d0480", +1896 => x"7324a538", +1897 => x"72822c81", +1898 => x"712b80e2", +1899 => x"f8080770", +1900 => x"80e2f40b", +1901 => x"84050c5c", +1902 => x"5a768c17", +1903 => x"0c738817", +1904 => x"0c758818", +1905 => x"0cf9fd39", +1906 => x"83137082", +1907 => x"2c81712b", +1908 => x"80e2f808", +1909 => x"077080e2", +1910 => x"f40b8405", +1911 => x"0c5d5b53", +1912 => x"d8397a75", +1913 => x"065c7bfc", +1914 => x"9f388419", +1915 => x"75105659", +1916 => x"f139ff17", +1917 => x"810559f7", +1918 => x"ab398c15", +1919 => x"08881608", +1920 => x"718c120c", +1921 => x"88120c59", +1922 => x"75158411", +1923 => x"08810784", +1924 => x"120c587c", +1925 => x"5182de3f", +1926 => x"881554fb", +1927 => x"a3397716", +1928 => x"78810784", +1929 => x"180c8c17", +1930 => x"08881808", +1931 => x"718c120c", +1932 => x"88120c5c", +1933 => x"7080e388", +1934 => x"0c7080e3", +1935 => x"840c80e2", +1936 => x"fc0b8c12", +1937 => x"0c8c1108", +1938 => x"88120c77", +1939 => x"81078412", +1940 => x"0c770577", +1941 => x"710c557c", +1942 => x"51829a3f", +1943 => x"881654f5", +1944 => x"ba397216", +1945 => x"84110881", +1946 => x"0784120c", +1947 => x"588c1608", +1948 => x"88170871", +1949 => x"8c120c88", +1950 => x"120c577c", +1951 => x"5181f63f", +1952 => x"881654f5", +1953 => x"96397284", +1954 => x"150cf41a", +1955 => x"f8067084", +1956 => x"1d088106", +1957 => x"07841d0c", +1958 => x"701c5556", +1959 => x"850b8415", +1960 => x"0c850b88", +1961 => x"150c8f76", +1962 => x"27fdab38", +1963 => x"881b527c", +1964 => x"5184be3f", +1965 => x"80e2f40b", +1966 => x"88050880", +1967 => x"e2b8085a", +1968 => x"55fd9339", +1969 => x"7880e2b8", +1970 => x"0c7380e2", +1971 => x"e80cfbef", +1972 => x"39728415", +1973 => x"0cfcff39", +1974 => x"fb3d0d77", +1975 => x"707a7c58", +1976 => x"5553568f", +1977 => x"752780e6", +1978 => x"38727607", +1979 => x"83065170", +1980 => x"80dc3875", +1981 => x"73525470", +1982 => x"70840552", +1983 => x"08747084", +1984 => x"05560c73", +1985 => x"71708405", +1986 => x"53087170", +1987 => x"8405530c", +1988 => x"71708405", +1989 => x"53087170", +1990 => x"8405530c", +1991 => x"71708405", +1992 => x"53087170", +1993 => x"8405530c", +1994 => x"f0165654", +1995 => x"748f26c7", +1996 => x"38837527", +1997 => x"95387070", +1998 => x"84055208", +1999 => x"74708405", +2000 => x"560cfc15", +2001 => x"55748326", +2002 => x"ed387371", +2003 => x"5452ff15", +2004 => x"5170ff2e", +2005 => x"98387270", +2006 => x"81055433", +2007 => x"72708105", +2008 => x"5434ff11", +2009 => x"5170ff2e", +2010 => x"098106ea", +2011 => x"3875800c", +2012 => x"873d0d04", +2013 => x"0404fd3d", +2014 => x"0d800b81", +2015 => x"c2d40c76", +2016 => x"5187ca3f", +2017 => x"80085380", +2018 => x"08ff2e88", +2019 => x"3872800c", +2020 => x"853d0d04", +2021 => x"81c2d408", +2022 => x"5473802e", +2023 => x"f0387574", +2024 => x"710c5272", +2025 => x"800c853d", +2026 => x"0d04fb3d", +2027 => x"0d777970", +2028 => x"72078306", +2029 => x"53545270", +2030 => x"93387173", +2031 => x"73085456", +2032 => x"54717308", +2033 => x"2e80c438", +2034 => x"73755452", +2035 => x"71337081", +2036 => x"ff065254", +2037 => x"70802e9d", +2038 => x"38723355", +2039 => x"70752e09", +2040 => x"81069538", +2041 => x"81128114", +2042 => x"71337081", +2043 => x"ff065456", +2044 => x"545270e5", +2045 => x"38723355", +2046 => x"7381ff06", +2047 => x"7581ff06", +2048 => x"71713180", +2049 => x"0c555287", +2050 => x"3d0d0471", +2051 => x"09f7fbfd", +2052 => x"ff1306f8", +2053 => x"84828180", +2054 => x"06527197", +2055 => x"38841484", +2056 => x"16710854", +2057 => x"56547175", +2058 => x"082ee038", +2059 => x"73755452", +2060 => x"ff9a3980", +2061 => x"0b800c87", +2062 => x"3d0d04fb", +2063 => x"3d0d7770", +2064 => x"5256feb0", +2065 => x"3f80e2f4", +2066 => x"0b880508", +2067 => x"841108fc", +2068 => x"06707b31", +2069 => x"9fef05e0", +2070 => x"8006e080", +2071 => x"05525555", +2072 => x"a0807524", +2073 => x"94388052", +2074 => x"7551fe8a", +2075 => x"3f80e2fc", +2076 => x"08145372", +2077 => x"80082e8f", +2078 => x"387551fd", +2079 => x"f83f8053", +2080 => x"72800c87", +2081 => x"3d0d0474", +2082 => x"30527551", +2083 => x"fde83f80", +2084 => x"08ff2ea8", +2085 => x"3880e2f4", +2086 => x"0b880508", +2087 => x"74763181", +2088 => x"0784120c", +2089 => x"5380e2b8", +2090 => x"08753180", +2091 => x"e2b80c75", +2092 => x"51fdc23f", +2093 => x"810b800c", +2094 => x"873d0d04", +2095 => x"80527551", +2096 => x"fdb43f80", +2097 => x"e2f40b88", +2098 => x"05088008", +2099 => x"71315454", +2100 => x"8f7325ff", +2101 => x"a4388008", +2102 => x"80e2e808", +2103 => x"3180e2b8", +2104 => x"0c728107", +2105 => x"84150c75", +2106 => x"51fd8a3f", +2107 => x"8053ff90", +2108 => x"39f73d0d", +2109 => x"7b7d545a", +2110 => x"72802e82", +2111 => x"83387951", +2112 => x"fcf23ff8", +2113 => x"13841108", +2114 => x"70fe0670", +2115 => x"13841108", +2116 => x"fc065c57", +2117 => x"58545780", +2118 => x"e2fc0874", +2119 => x"2e82de38", +2120 => x"7784150c", +2121 => x"80738106", +2122 => x"56597479", +2123 => x"2e81d538", +2124 => x"77148411", +2125 => x"08810656", +2126 => x"5374a038", +2127 => x"77165678", +2128 => x"81e63888", +2129 => x"14085574", +2130 => x"80e2fc2e", +2131 => x"82f9388c", +2132 => x"1408708c", +2133 => x"170c7588", +2134 => x"120c5875", +2135 => x"81078418", +2136 => x"0c751776", +2137 => x"710c5478", +2138 => x"81913883", +2139 => x"ff762781", +2140 => x"c8387589", +2141 => x"2a76832a", +2142 => x"54547380", +2143 => x"2ebf3875", +2144 => x"862ab805", +2145 => x"53847427", +2146 => x"b43880db", +2147 => x"14539474", +2148 => x"27ab3875", +2149 => x"8c2a80ee", +2150 => x"055380d4", +2151 => x"74279e38", +2152 => x"758f2a80", +2153 => x"f7055382", +2154 => x"d4742791", +2155 => x"3875922a", +2156 => x"80fc0553", +2157 => x"8ad47427", +2158 => x"843880fe", +2159 => x"53721010", +2160 => x"1080e2f4", +2161 => x"05881108", +2162 => x"55557375", +2163 => x"2e82bf38", +2164 => x"841408fc", +2165 => x"06597579", +2166 => x"278d3888", +2167 => x"14085473", +2168 => x"752e0981", +2169 => x"06ea388c", +2170 => x"1408708c", +2171 => x"190c7488", +2172 => x"190c7788", +2173 => x"120c5576", +2174 => x"8c150c79", +2175 => x"51faf63f", +2176 => x"8b3d0d04", +2177 => x"76087771", +2178 => x"31587605", +2179 => x"88180856", +2180 => x"567480e2", +2181 => x"fc2e80e0", +2182 => x"388c1708", +2183 => x"708c170c", +2184 => x"7588120c", +2185 => x"53fe8939", +2186 => x"8814088c", +2187 => x"1508708c", +2188 => x"130c5988", +2189 => x"190cfea3", +2190 => x"3975832a", +2191 => x"70545480", +2192 => x"74248198", +2193 => x"3872822c", +2194 => x"81712b80", +2195 => x"e2f80807", +2196 => x"80e2f40b", +2197 => x"84050c74", +2198 => x"10101080", +2199 => x"e2f40588", +2200 => x"1108718c", +2201 => x"1b0c7088", +2202 => x"1b0c7988", +2203 => x"130c565a", +2204 => x"55768c15", +2205 => x"0cff8439", +2206 => x"8159fdb4", +2207 => x"39771673", +2208 => x"81065455", +2209 => x"72983876", +2210 => x"08777131", +2211 => x"5875058c", +2212 => x"18088819", +2213 => x"08718c12", +2214 => x"0c88120c", +2215 => x"55557481", +2216 => x"0784180c", +2217 => x"7680e2f4", +2218 => x"0b88050c", +2219 => x"80e2f008", +2220 => x"7526fec7", +2221 => x"3880e2ec", +2222 => x"08527951", +2223 => x"fafd3f79", +2224 => x"51f9b23f", +2225 => x"feba3981", +2226 => x"778c170c", +2227 => x"7788170c", +2228 => x"758c190c", +2229 => x"7588190c", +2230 => x"59fd8039", +2231 => x"83147082", +2232 => x"2c81712b", +2233 => x"80e2f808", +2234 => x"0780e2f4", +2235 => x"0b84050c", +2236 => x"75101010", +2237 => x"80e2f405", +2238 => x"88110871", +2239 => x"8c1c0c70", +2240 => x"881c0c7a", +2241 => x"88130c57", +2242 => x"5b5653fe", +2243 => x"e4398073", +2244 => x"24a33872", +2245 => x"822c8171", +2246 => x"2b80e2f8", +2247 => x"080780e2", +2248 => x"f40b8405", +2249 => x"0c58748c", +2250 => x"180c7388", +2251 => x"180c7688", +2252 => x"160cfdc3", +2253 => x"39831370", +2254 => x"822c8171", +2255 => x"2b80e2f8", +2256 => x"080780e2", +2257 => x"f40b8405", +2258 => x"0c5953da", +2259 => x"39fe3d0d", +2260 => x"81c2d808", +2261 => x"51708a38", +2262 => x"81c2e070", +2263 => x"81c2d80c", +2264 => x"51741152", +2265 => x"ff537187", +2266 => x"fb808026", +2267 => x"88387181", +2268 => x"c2d80c70", +2269 => x"5372800c", +2270 => x"843d0d04", +2271 => x"fd3d0d80", +2272 => x"0b80e2a4", +2273 => x"08545472", +2274 => x"812e9b38", +2275 => x"7381c2dc", +2276 => x"0cc28e3f", +2277 => x"c0ea3f80", +2278 => x"f1fc5281", +2279 => x"51caf83f", +2280 => x"80085189", +2281 => x"a73f7281", +2282 => x"c2dc0cc1", +2283 => x"f43fc0d0", +2284 => x"3f80f1fc", +2285 => x"528151ca", +2286 => x"de3f8008", +2287 => x"51898d3f", +2288 => x"00ff3900", +2289 => x"ff39f53d", +2290 => x"0d7e6081", +2291 => x"c2dc0870", +2292 => x"5b585b5b", +2293 => x"7580c238", +2294 => x"777a25a1", +2295 => x"38771b70", +2296 => x"337081ff", +2297 => x"06585859", +2298 => x"758a2e98", +2299 => x"387681ff", +2300 => x"0651c18c", +2301 => x"3f811858", +2302 => x"797824e1", +2303 => x"3879800c", +2304 => x"8d3d0d04", +2305 => x"8d51c0f8", +2306 => x"3f783370", +2307 => x"81ff0652", +2308 => x"57c0ed3f", +2309 => x"811858e0", +2310 => x"3979557a", +2311 => x"547d5385", +2312 => x"528d3dfc", +2313 => x"0551c09a", +2314 => x"3f800856", +2315 => x"88973f7b", +2316 => x"80080c75", +2317 => x"800c8d3d", +2318 => x"0d04f63d", +2319 => x"0d7d7f81", +2320 => x"c2dc0870", +2321 => x"5a585a5a", +2322 => x"7580c338", +2323 => x"767925b1", +2324 => x"38761a58", +2325 => x"c08a3f80", +2326 => x"08783480", +2327 => x"0b800881", +2328 => x"ff065758", +2329 => x"758a2ea2", +2330 => x"38758d32", +2331 => x"70307080", +2332 => x"257a0751", +2333 => x"515675b8", +2334 => x"38811757", +2335 => x"787724d1", +2336 => x"38765675", +2337 => x"800c8c3d", +2338 => x"0d048158", +2339 => x"dc397855", +2340 => x"79547c53", +2341 => x"84528c3d", +2342 => x"fc0551ff", +2343 => x"bfa43f80", +2344 => x"085687a1", +2345 => x"3f7a8008", +2346 => x"0c75800c", +2347 => x"8c3d0d04", +2348 => x"811756cf", +2349 => x"39f93d0d", +2350 => x"795781c2", +2351 => x"dc08802e", +2352 => x"ad387651", +2353 => x"89b43f7b", +2354 => x"567a5580", +2355 => x"08810554", +2356 => x"76538252", +2357 => x"893dfc05", +2358 => x"51ffbee6", +2359 => x"3f800857", +2360 => x"86e33f77", +2361 => x"80080c76", +2362 => x"800c893d", +2363 => x"0d0486d5", +2364 => x"3f850b80", +2365 => x"080cff0b", +2366 => x"800c893d", +2367 => x"0d04fb3d", +2368 => x"0d81c2dc", +2369 => x"08705654", +2370 => x"73883874", +2371 => x"800c873d", +2372 => x"0d047753", +2373 => x"8352873d", +2374 => x"fc0551ff", +2375 => x"bea43f80", +2376 => x"085486a1", +2377 => x"3f758008", +2378 => x"0c73800c", +2379 => x"873d0d04", +2380 => x"ff0b800c", +2381 => x"04fb3d0d", +2382 => x"775581c2", +2383 => x"dc08802e", +2384 => x"a9387451", +2385 => x"88b43f80", +2386 => x"08810554", +2387 => x"74538752", +2388 => x"873dfc05", +2389 => x"51ffbdea", +2390 => x"3f800855", +2391 => x"85e73f75", +2392 => x"80080c74", +2393 => x"800c873d", +2394 => x"0d0485d9", +2395 => x"3f850b80", +2396 => x"080cff0b", +2397 => x"800c873d", +2398 => x"0d04fa3d", +2399 => x"0d81c2dc", +2400 => x"08802ea3", +2401 => x"387a5579", +2402 => x"54785386", +2403 => x"52883dfc", +2404 => x"0551ffbd", +2405 => x"ad3f8008", +2406 => x"5685aa3f", +2407 => x"7680080c", +2408 => x"75800c88", +2409 => x"3d0d0485", +2410 => x"9c3f9d0b", +2411 => x"80080cff", +2412 => x"0b800c88", +2413 => x"3d0d04f7", +2414 => x"3d0d7b7d", +2415 => x"5b59bc53", +2416 => x"80527951", +2417 => x"86aa3f80", +2418 => x"70565798", +2419 => x"56741970", +2420 => x"3370782b", +2421 => x"79078118", +2422 => x"f81a5a58", +2423 => x"59555884", +2424 => x"7524ea38", +2425 => x"767a2384", +2426 => x"19588070", +2427 => x"56579856", +2428 => x"74187033", +2429 => x"70782b79", +2430 => x"078118f8", +2431 => x"1a5a5859", +2432 => x"51548475", +2433 => x"24ea3876", +2434 => x"821b2388", +2435 => x"19588070", +2436 => x"56579856", +2437 => x"74187033", +2438 => x"70782b79", +2439 => x"078118f8", +2440 => x"1a5a5859", +2441 => x"51548475", +2442 => x"24ea3876", +2443 => x"841b0c8c", +2444 => x"19588070", +2445 => x"56579856", +2446 => x"74187033", +2447 => x"70782b79", +2448 => x"078118f8", +2449 => x"1a5a5859", +2450 => x"51548475", +2451 => x"24ea3876", +2452 => x"881b2390", +2453 => x"19588070", +2454 => x"56579856", +2455 => x"74187033", +2456 => x"70782b79", +2457 => x"078118f8", +2458 => x"1a5a5859", +2459 => x"51548475", +2460 => x"24ea3876", +2461 => x"8a1b2394", +2462 => x"19588070", +2463 => x"56579856", +2464 => x"74187033", +2465 => x"70782b79", +2466 => x"078118f8", +2467 => x"1a5a5859", +2468 => x"51548475", +2469 => x"24ea3876", +2470 => x"8c1b2398", +2471 => x"19588070", +2472 => x"56579856", +2473 => x"74187033", +2474 => x"70782b79", +2475 => x"078118f8", +2476 => x"1a5a5859", +2477 => x"51548475", +2478 => x"24ea3876", +2479 => x"8e1b239c", +2480 => x"19588070", +2481 => x"5657b856", +2482 => x"74187033", +2483 => x"70782b79", +2484 => x"078118f8", +2485 => x"1a5a5859", +2486 => x"5a548875", +2487 => x"24ea3876", +2488 => x"901b0c8b", +2489 => x"3d0d04e9", +2490 => x"3d0d6a81", +2491 => x"c2dc0857", +2492 => x"57759338", +2493 => x"80c0800b", +2494 => x"84180c75", +2495 => x"ac180c75", +2496 => x"800c993d", +2497 => x"0d04893d", +2498 => x"70556a54", +2499 => x"558a5299", +2500 => x"3dffbc05", +2501 => x"51ffbaaa", +2502 => x"3f800877", +2503 => x"53755256", +2504 => x"fd953f82", +2505 => x"a03f7780", +2506 => x"080c7580", +2507 => x"0c993d0d", +2508 => x"04e93d0d", +2509 => x"695781c2", +2510 => x"dc08802e", +2511 => x"b6387651", +2512 => x"84b83f89", +2513 => x"3d705680", +2514 => x"08810555", +2515 => x"7754568f", +2516 => x"52993dff", +2517 => x"bc0551ff", +2518 => x"b9e83f80", +2519 => x"086b5376", +2520 => x"5257fcd3", +2521 => x"3f81de3f", +2522 => x"7780080c", +2523 => x"76800c99", +2524 => x"3d0d0481", +2525 => x"d03f850b", +2526 => x"80080cff", +2527 => x"0b800c99", +2528 => x"3d0d04fc", +2529 => x"3d0d8154", +2530 => x"81c2dc08", +2531 => x"88387380", +2532 => x"0c863d0d", +2533 => x"04765397", +2534 => x"b952863d", +2535 => x"fc0551ff", +2536 => x"b9a03f80", +2537 => x"0854819d", +2538 => x"3f748008", +2539 => x"0c73800c", +2540 => x"863d0d04", +2541 => x"f43d0d7e", +2542 => x"80f2a808", +2543 => x"700881ff", +2544 => x"06913df8", +2545 => x"05545159", +2546 => x"59ffbac5", +2547 => x"3f775780", +2548 => x"5476557b", +2549 => x"7d585276", +2550 => x"538e3df0", +2551 => x"0551d6a0", +2552 => x"3f797b58", +2553 => x"790c7684", +2554 => x"1a0c7880", +2555 => x"0c8e3d0d", +2556 => x"04f43d0d", +2557 => x"7e80f2a8", +2558 => x"08700870", +2559 => x"81ff0692", +2560 => x"3df80555", +2561 => x"515a5759", +2562 => x"ffba863f", +2563 => x"7757800b", +2564 => x"8b3d5954", +2565 => x"76557b7d", +2566 => x"58527653", +2567 => x"7751d5e0", +2568 => x"3f8056bd", +2569 => x"84c07655", +2570 => x"55797b58", +2571 => x"52765377", +2572 => x"51d5cd3f", +2573 => x"7a577880", +2574 => x"2e843876", +2575 => x"790c7680", +2576 => x"0c8e3d0d", +2577 => x"0480eafc", +2578 => x"08800c04", +2579 => x"f73d0d7b", +2580 => x"80eafc08", +2581 => x"82c81108", +2582 => x"5a545a77", +2583 => x"802e80da", +2584 => x"38818818", +2585 => x"841908ff", +2586 => x"0581712b", +2587 => x"59555980", +2588 => x"742480ea", +2589 => x"38807424", +2590 => x"b5387382", +2591 => x"2b781188", +2592 => x"05565681", +2593 => x"80190877", +2594 => x"06537280", +2595 => x"2eb63878", +2596 => x"16700853", +2597 => x"53795174", +2598 => x"0853722d", +2599 => x"ff14fc17", +2600 => x"fc177981", +2601 => x"2c5a5757", +2602 => x"54738025", +2603 => x"d6387708", +2604 => x"5877ffad", +2605 => x"3880eafc", +2606 => x"0853bc13", +2607 => x"08a53879", +2608 => x"51f5fd3f", +2609 => x"74085372", +2610 => x"2dff14fc", +2611 => x"17fc1779", +2612 => x"812c5a57", +2613 => x"57547380", +2614 => x"25ffa838", +2615 => x"d1398057", +2616 => x"ff933972", +2617 => x"51bc1308", +2618 => x"54732d79", +2619 => x"51f5d13f", +2620 => x"fb3d0d77", +2621 => x"7a71028c", +2622 => x"05a30533", +2623 => x"58545456", +2624 => x"83732780", +2625 => x"d4387583", +2626 => x"06517080", +2627 => x"cc387488", +2628 => x"2b750770", +2629 => x"71902b07", +2630 => x"55518f73", +2631 => x"27a73873", +2632 => x"72708405", +2633 => x"540c7174", +2634 => x"71708405", +2635 => x"530c7471", +2636 => x"70840553", +2637 => x"0c747170", +2638 => x"8405530c", +2639 => x"f0145452", +2640 => x"728f26db", +2641 => x"38837327", +2642 => x"90387372", +2643 => x"70840554", +2644 => x"0cfc1353", +2645 => x"728326f2", +2646 => x"38ff1351", +2647 => x"70ff2e93", +2648 => x"38747270", +2649 => x"81055434", +2650 => x"ff115170", +2651 => x"ff2e0981", +2652 => x"06ef3875", +2653 => x"800c873d", +2654 => x"0d04fd3d", +2655 => x"0d757071", +2656 => x"83065355", +2657 => x"5270b438", +2658 => x"71700870", +2659 => x"09f7fbfd", +2660 => x"ff1206f8", +2661 => x"84828180", +2662 => x"06545253", +2663 => x"719b3884", +2664 => x"13700870", +2665 => x"09f7fbfd", +2666 => x"ff1206f8", +2667 => x"84828180", +2668 => x"06545253", +2669 => x"71802ee7", +2670 => x"38725271", +2671 => x"33537280", +2672 => x"2e8a3881", +2673 => x"12703354", +2674 => x"5272f838", +2675 => x"71743180", +2676 => x"0c853d0d", +2677 => x"04ff3d0d", +2678 => x"80f2840b", +2679 => x"fc057008", +2680 => x"525270ff", +2681 => x"2e913870", +2682 => x"2dfc1270", +2683 => x"08525270", +2684 => x"ff2e0981", +2685 => x"06f13883", +2686 => x"3d0d0404", +2687 => x"ffb7a63f", +2688 => x"04000000", +2689 => x"30313233", +2690 => x"34353637", +2691 => x"38390000", +2692 => x"44485259", +2693 => x"53544f4e", +2694 => x"45205052", +2695 => x"4f475241", +2696 => x"4d2c2053", +2697 => x"4f4d4520", +2698 => x"53545249", +2699 => x"4e470000", +2700 => x"44485259", +2701 => x"53544f4e", +2702 => x"45205052", +2703 => x"4f475241", +2704 => x"4d2c2031", +2705 => x"27535420", +2706 => x"53545249", +2707 => x"4e470000", +2708 => x"44687279", +2709 => x"73746f6e", +2710 => x"65204265", +2711 => x"6e63686d", +2712 => x"61726b2c", +2713 => x"20566572", +2714 => x"73696f6e", +2715 => x"20322e31", +2716 => x"20284c61", +2717 => x"6e677561", +2718 => x"67653a20", +2719 => x"43290a00", +2720 => x"50726f67", +2721 => x"72616d20", +2722 => x"636f6d70", +2723 => x"696c6564", +2724 => x"20776974", +2725 => x"68202772", +2726 => x"65676973", +2727 => x"74657227", +2728 => x"20617474", +2729 => x"72696275", +2730 => x"74650a00", +2731 => x"45786563", +2732 => x"7574696f", +2733 => x"6e207374", +2734 => x"61727473", +2735 => x"2c202564", +2736 => x"2072756e", +2737 => x"73207468", +2738 => x"726f7567", +2739 => x"68204468", +2740 => x"72797374", +2741 => x"6f6e650a", +2742 => x"00000000", +2743 => x"44485259", +2744 => x"53544f4e", +2745 => x"45205052", +2746 => x"4f475241", +2747 => x"4d2c2032", +2748 => x"274e4420", +2749 => x"53545249", +2750 => x"4e470000", +2751 => x"45786563", +2752 => x"7574696f", +2753 => x"6e20656e", +2754 => x"64730a00", +2755 => x"46696e61", +2756 => x"6c207661", +2757 => x"6c756573", +2758 => x"206f6620", +2759 => x"74686520", +2760 => x"76617269", +2761 => x"61626c65", +2762 => x"73207573", +2763 => x"65642069", +2764 => x"6e207468", +2765 => x"65206265", +2766 => x"6e63686d", +2767 => x"61726b3a", +2768 => x"0a000000", +2769 => x"496e745f", +2770 => x"476c6f62", +2771 => x"3a202020", +2772 => x"20202020", +2773 => x"20202020", +2774 => x"2025640a", +2775 => x"00000000", +2776 => x"20202020", +2777 => x"20202020", +2778 => x"73686f75", +2779 => x"6c642062", +2780 => x"653a2020", +2781 => x"2025640a", +2782 => x"00000000", +2783 => x"426f6f6c", +2784 => x"5f476c6f", +2785 => x"623a2020", +2786 => x"20202020", +2787 => x"20202020", +2788 => x"2025640a", +2789 => x"00000000", +2790 => x"43685f31", +2791 => x"5f476c6f", +2792 => x"623a2020", +2793 => x"20202020", +2794 => x"20202020", +2795 => x"2025630a", +2796 => x"00000000", +2797 => x"20202020", +2798 => x"20202020", +2799 => x"73686f75", +2800 => x"6c642062", +2801 => x"653a2020", +2802 => x"2025630a", +2803 => x"00000000", +2804 => x"43685f32", +2805 => x"5f476c6f", +2806 => x"623a2020", +2807 => x"20202020", +2808 => x"20202020", +2809 => x"2025630a", +2810 => x"00000000", +2811 => x"4172725f", +2812 => x"315f476c", +2813 => x"6f625b38", +2814 => x"5d3a2020", +2815 => x"20202020", +2816 => x"2025640a", +2817 => x"00000000", +2818 => x"4172725f", +2819 => x"325f476c", +2820 => x"6f625b38", +2821 => x"5d5b375d", +2822 => x"3a202020", +2823 => x"2025640a", +2824 => x"00000000", +2825 => x"20202020", +2826 => x"20202020", +2827 => x"73686f75", +2828 => x"6c642062", +2829 => x"653a2020", +2830 => x"204e756d", +2831 => x"6265725f", +2832 => x"4f665f52", +2833 => x"756e7320", +2834 => x"2b203130", +2835 => x"0a000000", +2836 => x"5074725f", +2837 => x"476c6f62", +2838 => x"2d3e0a00", +2839 => x"20205074", +2840 => x"725f436f", +2841 => x"6d703a20", +2842 => x"20202020", +2843 => x"20202020", +2844 => x"2025640a", +2845 => x"00000000", +2846 => x"20202020", +2847 => x"20202020", +2848 => x"73686f75", +2849 => x"6c642062", +2850 => x"653a2020", +2851 => x"2028696d", +2852 => x"706c656d", +2853 => x"656e7461", +2854 => x"74696f6e", +2855 => x"2d646570", +2856 => x"656e6465", +2857 => x"6e74290a", +2858 => x"00000000", +2859 => x"20204469", +2860 => x"7363723a", +2861 => x"20202020", +2862 => x"20202020", +2863 => x"20202020", +2864 => x"2025640a", +2865 => x"00000000", +2866 => x"2020456e", +2867 => x"756d5f43", +2868 => x"6f6d703a", +2869 => x"20202020", +2870 => x"20202020", +2871 => x"2025640a", +2872 => x"00000000", +2873 => x"2020496e", +2874 => x"745f436f", +2875 => x"6d703a20", +2876 => x"20202020", +2877 => x"20202020", +2878 => x"2025640a", +2879 => x"00000000", +2880 => x"20205374", +2881 => x"725f436f", +2882 => x"6d703a20", +2883 => x"20202020", +2884 => x"20202020", +2885 => x"2025730a", +2886 => x"00000000", +2887 => x"20202020", +2888 => x"20202020", +2889 => x"73686f75", +2890 => x"6c642062", +2891 => x"653a2020", +2892 => x"20444852", +2893 => x"5953544f", +2894 => x"4e452050", +2895 => x"524f4752", +2896 => x"414d2c20", +2897 => x"534f4d45", +2898 => x"20535452", +2899 => x"494e470a", +2900 => x"00000000", +2901 => x"4e657874", +2902 => x"5f507472", +2903 => x"5f476c6f", +2904 => x"622d3e0a", +2905 => x"00000000", +2906 => x"20202020", +2907 => x"20202020", +2908 => x"73686f75", +2909 => x"6c642062", +2910 => x"653a2020", +2911 => x"2028696d", +2912 => x"706c656d", +2913 => x"656e7461", +2914 => x"74696f6e", +2915 => x"2d646570", +2916 => x"656e6465", +2917 => x"6e74292c", +2918 => x"2073616d", +2919 => x"65206173", +2920 => x"2061626f", +2921 => x"76650a00", +2922 => x"496e745f", +2923 => x"315f4c6f", +2924 => x"633a2020", +2925 => x"20202020", +2926 => x"20202020", +2927 => x"2025640a", +2928 => x"00000000", +2929 => x"496e745f", +2930 => x"325f4c6f", +2931 => x"633a2020", +2932 => x"20202020", +2933 => x"20202020", +2934 => x"2025640a", +2935 => x"00000000", +2936 => x"496e745f", +2937 => x"335f4c6f", +2938 => x"633a2020", +2939 => x"20202020", +2940 => x"20202020", +2941 => x"2025640a", +2942 => x"00000000", +2943 => x"456e756d", +2944 => x"5f4c6f63", +2945 => x"3a202020", +2946 => x"20202020", +2947 => x"20202020", +2948 => x"2025640a", +2949 => x"00000000", +2950 => x"5374725f", +2951 => x"315f4c6f", +2952 => x"633a2020", +2953 => x"20202020", +2954 => x"20202020", +2955 => x"2025730a", +2956 => x"00000000", +2957 => x"20202020", +2958 => x"20202020", +2959 => x"73686f75", +2960 => x"6c642062", +2961 => x"653a2020", +2962 => x"20444852", +2963 => x"5953544f", +2964 => x"4e452050", +2965 => x"524f4752", +2966 => x"414d2c20", +2967 => x"31275354", +2968 => x"20535452", +2969 => x"494e470a", +2970 => x"00000000", +2971 => x"5374725f", +2972 => x"325f4c6f", +2973 => x"633a2020", +2974 => x"20202020", +2975 => x"20202020", +2976 => x"2025730a", +2977 => x"00000000", +2978 => x"20202020", +2979 => x"20202020", +2980 => x"73686f75", +2981 => x"6c642062", +2982 => x"653a2020", +2983 => x"20444852", +2984 => x"5953544f", +2985 => x"4e452050", +2986 => x"524f4752", +2987 => x"414d2c20", +2988 => x"32274e44", +2989 => x"20535452", +2990 => x"494e470a", +2991 => x"00000000", +2992 => x"55736572", +2993 => x"2074696d", +2994 => x"653a2025", +2995 => x"640a0000", +2996 => x"4d696372", +2997 => x"6f736563", +2998 => x"6f6e6473", +2999 => x"20666f72", +3000 => x"206f6e65", +3001 => x"2072756e", +3002 => x"20746872", +3003 => x"6f756768", +3004 => x"20446872", +3005 => x"7973746f", +3006 => x"6e653a20", +3007 => x"00000000", +3008 => x"2564200a", +3009 => x"00000000", +3010 => x"44687279", +3011 => x"73746f6e", +3012 => x"65732070", +3013 => x"65722053", +3014 => x"65636f6e", +3015 => x"643a2020", +3016 => x"20202020", +3017 => x"20202020", +3018 => x"20202020", +3019 => x"20202020", +3020 => x"20202020", +3021 => x"00000000", +3022 => x"56415820", +3023 => x"4d495053", +3024 => x"20726174", +3025 => x"696e6720", +3026 => x"2a203130", +3027 => x"3030203d", +3028 => x"20256420", +3029 => x"0a000000", +3030 => x"50726f67", +3031 => x"72616d20", +3032 => x"636f6d70", +3033 => x"696c6564", +3034 => x"20776974", +3035 => x"686f7574", +3036 => x"20277265", +3037 => x"67697374", +3038 => x"65722720", +3039 => x"61747472", +3040 => x"69627574", +3041 => x"650a0000", +3042 => x"4d656173", +3043 => x"75726564", +3044 => x"2074696d", +3045 => x"6520746f", +3046 => x"6f20736d", +3047 => x"616c6c20", +3048 => x"746f206f", +3049 => x"62746169", +3050 => x"6e206d65", +3051 => x"616e696e", +3052 => x"6766756c", +3053 => x"20726573", +3054 => x"756c7473", +3055 => x"0a000000", +3056 => x"506c6561", +3057 => x"73652069", +3058 => x"6e637265", +3059 => x"61736520", +3060 => x"6e756d62", +3061 => x"6572206f", +3062 => x"66207275", +3063 => x"6e730a00", +3064 => x"44485259", +3065 => x"53544f4e", +3066 => x"45205052", +3067 => x"4f475241", +3068 => x"4d2c2033", +3069 => x"27524420", +3070 => x"53545249", +3071 => x"4e470000", +3072 => x"00010202", +3073 => x"03030303", +3074 => x"04040404", +3075 => x"04040404", +3076 => x"05050505", +3077 => x"05050505", +3078 => x"05050505", +3079 => x"05050505", +3080 => x"06060606", +3081 => x"06060606", +3082 => x"06060606", +3083 => x"06060606", +3084 => x"06060606", +3085 => x"06060606", +3086 => x"06060606", +3087 => x"06060606", +3088 => x"07070707", +3089 => x"07070707", +3090 => x"07070707", +3091 => x"07070707", +3092 => x"07070707", +3093 => x"07070707", +3094 => x"07070707", +3095 => x"07070707", +3096 => x"07070707", +3097 => x"07070707", +3098 => x"07070707", +3099 => x"07070707", +3100 => x"07070707", +3101 => x"07070707", +3102 => x"07070707", +3103 => x"07070707", +3104 => x"08080808", +3105 => x"08080808", +3106 => x"08080808", +3107 => x"08080808", +3108 => x"08080808", +3109 => x"08080808", +3110 => x"08080808", +3111 => x"08080808", +3112 => x"08080808", +3113 => x"08080808", +3114 => x"08080808", +3115 => x"08080808", +3116 => x"08080808", +3117 => x"08080808", +3118 => x"08080808", +3119 => x"08080808", +3120 => x"08080808", +3121 => x"08080808", +3122 => x"08080808", +3123 => x"08080808", +3124 => x"08080808", +3125 => x"08080808", +3126 => x"08080808", +3127 => x"08080808", +3128 => x"08080808", +3129 => x"08080808", +3130 => x"08080808", +3131 => x"08080808", +3132 => x"08080808", +3133 => x"08080808", +3134 => x"08080808", +3135 => x"08080808", +3136 => x"43000000", +3137 => x"64756d6d", +3138 => x"792e6578", +3139 => x"65000000", +3140 => x"00ffffff", +3141 => x"ff00ffff", +3142 => x"ffff00ff", +3143 => x"ffffff00", +3144 => x"00000000", +3145 => x"00000000", +3146 => x"00000000", +3147 => x"0000390c", +3148 => x"000004d2", -- iterations 0x4d2=1234 +3149 => x"00000000", +3150 => x"00000000", +3151 => x"00000000", +3152 => x"00000000", +3153 => x"00000000", +3154 => x"00000000", +3155 => x"00000000", +3156 => x"00000000", +3157 => x"00000000", +3158 => x"00000000", +3159 => x"00000000", +3160 => x"00000000", +3161 => x"00000000", +3162 => x"ffffffff", +3163 => x"00000000", +3164 => x"00020000", +3165 => x"00000000", +3166 => x"00000000", +3167 => x"00003174", +3168 => x"00003174", +3169 => x"0000317c", +3170 => x"0000317c", +3171 => x"00003184", +3172 => x"00003184", +3173 => x"0000318c", +3174 => x"0000318c", +3175 => x"00003194", +3176 => x"00003194", +3177 => x"0000319c", +3178 => x"0000319c", +3179 => x"000031a4", +3180 => x"000031a4", +3181 => x"000031ac", +3182 => x"000031ac", +3183 => x"000031b4", +3184 => x"000031b4", +3185 => x"000031bc", +3186 => x"000031bc", +3187 => x"000031c4", +3188 => x"000031c4", +3189 => x"000031cc", +3190 => x"000031cc", +3191 => x"000031d4", +3192 => x"000031d4", +3193 => x"000031dc", +3194 => x"000031dc", +3195 => x"000031e4", +3196 => x"000031e4", +3197 => x"000031ec", +3198 => x"000031ec", +3199 => x"000031f4", +3200 => x"000031f4", +3201 => x"000031fc", +3202 => x"000031fc", +3203 => x"00003204", +3204 => x"00003204", +3205 => x"0000320c", +3206 => x"0000320c", +3207 => x"00003214", +3208 => x"00003214", +3209 => x"0000321c", +3210 => x"0000321c", +3211 => x"00003224", +3212 => x"00003224", +3213 => x"0000322c", +3214 => x"0000322c", +3215 => x"00003234", +3216 => x"00003234", +3217 => x"0000323c", +3218 => x"0000323c", +3219 => x"00003244", +3220 => x"00003244", +3221 => x"0000324c", +3222 => x"0000324c", +3223 => x"00003254", +3224 => x"00003254", +3225 => x"0000325c", +3226 => x"0000325c", +3227 => x"00003264", +3228 => x"00003264", +3229 => x"0000326c", +3230 => x"0000326c", +3231 => x"00003274", +3232 => x"00003274", +3233 => x"0000327c", +3234 => x"0000327c", +3235 => x"00003284", +3236 => x"00003284", +3237 => x"0000328c", +3238 => x"0000328c", +3239 => x"00003294", +3240 => x"00003294", +3241 => x"0000329c", +3242 => x"0000329c", +3243 => x"000032a4", +3244 => x"000032a4", +3245 => x"000032ac", +3246 => x"000032ac", +3247 => x"000032b4", +3248 => x"000032b4", +3249 => x"000032bc", +3250 => x"000032bc", +3251 => x"000032c4", +3252 => x"000032c4", +3253 => x"000032cc", +3254 => x"000032cc", +3255 => x"000032d4", +3256 => x"000032d4", +3257 => x"000032dc", +3258 => x"000032dc", +3259 => x"000032e4", +3260 => x"000032e4", +3261 => x"000032ec", +3262 => x"000032ec", +3263 => x"000032f4", +3264 => x"000032f4", +3265 => x"000032fc", +3266 => x"000032fc", +3267 => x"00003304", +3268 => x"00003304", +3269 => x"0000330c", +3270 => x"0000330c", +3271 => x"00003314", +3272 => x"00003314", +3273 => x"0000331c", +3274 => x"0000331c", +3275 => x"00003324", +3276 => x"00003324", +3277 => x"0000332c", +3278 => x"0000332c", +3279 => x"00003334", +3280 => x"00003334", +3281 => x"0000333c", +3282 => x"0000333c", +3283 => x"00003344", +3284 => x"00003344", +3285 => x"0000334c", +3286 => x"0000334c", +3287 => x"00003354", +3288 => x"00003354", +3289 => x"0000335c", +3290 => x"0000335c", +3291 => x"00003364", +3292 => x"00003364", +3293 => x"0000336c", +3294 => x"0000336c", +3295 => x"00003374", +3296 => x"00003374", +3297 => x"0000337c", +3298 => x"0000337c", +3299 => x"00003384", +3300 => x"00003384", +3301 => x"0000338c", +3302 => x"0000338c", +3303 => x"00003394", +3304 => x"00003394", +3305 => x"0000339c", +3306 => x"0000339c", +3307 => x"000033a4", +3308 => x"000033a4", +3309 => x"000033ac", +3310 => x"000033ac", +3311 => x"000033b4", +3312 => x"000033b4", +3313 => x"000033bc", +3314 => x"000033bc", +3315 => x"000033c4", +3316 => x"000033c4", +3317 => x"000033cc", +3318 => x"000033cc", +3319 => x"000033d4", +3320 => x"000033d4", +3321 => x"000033dc", +3322 => x"000033dc", +3323 => x"000033e4", +3324 => x"000033e4", +3325 => x"000033ec", +3326 => x"000033ec", +3327 => x"000033f4", +3328 => x"000033f4", +3329 => x"000033fc", +3330 => x"000033fc", +3331 => x"00003404", +3332 => x"00003404", +3333 => x"0000340c", +3334 => x"0000340c", +3335 => x"00003414", +3336 => x"00003414", +3337 => x"0000341c", +3338 => x"0000341c", +3339 => x"00003424", +3340 => x"00003424", +3341 => x"0000342c", +3342 => x"0000342c", +3343 => x"00003434", +3344 => x"00003434", +3345 => x"0000343c", +3346 => x"0000343c", +3347 => x"00003444", +3348 => x"00003444", +3349 => x"0000344c", +3350 => x"0000344c", +3351 => x"00003454", +3352 => x"00003454", +3353 => x"0000345c", +3354 => x"0000345c", +3355 => x"00003464", +3356 => x"00003464", +3357 => x"0000346c", +3358 => x"0000346c", +3359 => x"00003474", +3360 => x"00003474", +3361 => x"0000347c", +3362 => x"0000347c", +3363 => x"00003484", +3364 => x"00003484", +3365 => x"0000348c", +3366 => x"0000348c", +3367 => x"00003494", +3368 => x"00003494", +3369 => x"0000349c", +3370 => x"0000349c", +3371 => x"000034a4", +3372 => x"000034a4", +3373 => x"000034ac", +3374 => x"000034ac", +3375 => x"000034b4", +3376 => x"000034b4", +3377 => x"000034bc", +3378 => x"000034bc", +3379 => x"000034c4", +3380 => x"000034c4", +3381 => x"000034cc", +3382 => x"000034cc", +3383 => x"000034d4", +3384 => x"000034d4", +3385 => x"000034dc", +3386 => x"000034dc", +3387 => x"000034e4", +3388 => x"000034e4", +3389 => x"000034ec", +3390 => x"000034ec", +3391 => x"000034f4", +3392 => x"000034f4", +3393 => x"000034fc", +3394 => x"000034fc", +3395 => x"00003504", +3396 => x"00003504", +3397 => x"0000350c", +3398 => x"0000350c", +3399 => x"00003514", +3400 => x"00003514", +3401 => x"0000351c", +3402 => x"0000351c", +3403 => x"00003524", +3404 => x"00003524", +3405 => x"0000352c", +3406 => x"0000352c", +3407 => x"00003534", +3408 => x"00003534", +3409 => x"0000353c", +3410 => x"0000353c", +3411 => x"00003544", +3412 => x"00003544", +3413 => x"0000354c", +3414 => x"0000354c", +3415 => x"00003554", +3416 => x"00003554", +3417 => x"0000355c", +3418 => x"0000355c", +3419 => x"00003564", +3420 => x"00003564", +3421 => x"0000356c", +3422 => x"0000356c", +3423 => x"00003580", +3424 => x"00000000", +3425 => x"000037e8", +3426 => x"00003844", +3427 => x"000038a0", +3428 => x"00000000", +3429 => x"00000000", +3430 => x"00000000", +3431 => x"00000000", +3432 => x"00000000", +3433 => x"00000000", +3434 => x"00000000", +3435 => x"00000000", +3436 => x"00000000", +3437 => x"00003100", +3438 => x"00000000", +3439 => x"00000000", +3440 => x"00000000", +3441 => x"00000000", +3442 => x"00000000", +3443 => x"00000000", +3444 => x"00000000", +3445 => x"00000000", +3446 => x"00000000", +3447 => x"00000000", +3448 => x"00000000", +3449 => x"00000000", +3450 => x"00000000", +3451 => x"00000000", +3452 => x"00000000", +3453 => x"00000000", +3454 => x"00000000", +3455 => x"00000000", +3456 => x"00000000", +3457 => x"00000000", +3458 => x"00000000", +3459 => x"00000000", +3460 => x"00000000", +3461 => x"00000000", +3462 => x"00000000", +3463 => x"00000000", +3464 => x"00000000", +3465 => x"00000000", +3466 => x"00000001", +3467 => x"330eabcd", +3468 => x"1234e66d", +3469 => x"deec0005", +3470 => x"000b0000", +3471 => x"00000000", +3472 => x"00000000", +3473 => x"00000000", +3474 => x"00000000", +3475 => x"00000000", +3476 => x"00000000", +3477 => x"00000000", +3478 => x"00000000", +3479 => x"00000000", +3480 => x"00000000", +3481 => x"00000000", +3482 => x"00000000", +3483 => x"00000000", +3484 => x"00000000", +3485 => x"00000000", +3486 => x"00000000", +3487 => x"00000000", +3488 => x"00000000", +3489 => x"00000000", +3490 => x"00000000", +3491 => x"00000000", +3492 => x"00000000", +3493 => x"00000000", +3494 => x"00000000", +3495 => x"00000000", +3496 => x"00000000", +3497 => x"00000000", +3498 => x"00000000", +3499 => x"00000000", +3500 => x"00000000", +3501 => x"00000000", +3502 => x"00000000", +3503 => x"00000000", +3504 => x"00000000", +3505 => x"00000000", +3506 => x"00000000", +3507 => x"00000000", +3508 => x"00000000", +3509 => x"00000000", +3510 => x"00000000", +3511 => x"00000000", +3512 => x"00000000", +3513 => x"00000000", +3514 => x"00000000", +3515 => x"00000000", +3516 => x"00000000", +3517 => x"00000000", +3518 => x"00000000", +3519 => x"00000000", +3520 => x"00000000", +3521 => x"00000000", +3522 => x"00000000", +3523 => x"00000000", +3524 => x"00000000", +3525 => x"00000000", +3526 => x"00000000", +3527 => x"00000000", +3528 => x"00000000", +3529 => x"00000000", +3530 => x"00000000", +3531 => x"00000000", +3532 => x"00000000", +3533 => x"00000000", +3534 => x"00000000", +3535 => x"00000000", +3536 => x"00000000", +3537 => x"00000000", +3538 => x"00000000", +3539 => x"00000000", +3540 => x"00000000", +3541 => x"00000000", +3542 => x"00000000", +3543 => x"00000000", +3544 => x"00000000", +3545 => x"00000000", +3546 => x"00000000", +3547 => x"00000000", +3548 => x"00000000", +3549 => x"00000000", +3550 => x"00000000", +3551 => x"00000000", +3552 => x"00000000", +3553 => x"00000000", +3554 => x"00000000", +3555 => x"00000000", +3556 => x"00000000", +3557 => x"00000000", +3558 => x"00000000", +3559 => x"00000000", +3560 => x"00000000", +3561 => x"00000000", +3562 => x"00000000", +3563 => x"00000000", +3564 => x"00000000", +3565 => x"00000000", +3566 => x"00000000", +3567 => x"00000000", +3568 => x"00000000", +3569 => x"00000000", +3570 => x"00000000", +3571 => x"00000000", +3572 => x"00000000", +3573 => x"00000000", +3574 => x"00000000", +3575 => x"00000000", +3576 => x"00000000", +3577 => x"00000000", +3578 => x"00000000", +3579 => x"00000000", +3580 => x"00000000", +3581 => x"00000000", +3582 => x"00000000", +3583 => x"00000000", +3584 => x"00000000", +3585 => x"00000000", +3586 => x"00000000", +3587 => x"00000000", +3588 => x"00000000", +3589 => x"00000000", +3590 => x"00000000", +3591 => x"00000000", +3592 => x"00000000", +3593 => x"00000000", +3594 => x"00000000", +3595 => x"00000000", +3596 => x"00000000", +3597 => x"00000000", +3598 => x"00000000", +3599 => x"00000000", +3600 => x"00000000", +3601 => x"00000000", +3602 => x"00000000", +3603 => x"00000000", +3604 => x"00000000", +3605 => x"00000000", +3606 => x"00000000", +3607 => x"00000000", +3608 => x"00000000", +3609 => x"00000000", +3610 => x"00000000", +3611 => x"00000000", +3612 => x"00000000", +3613 => x"00000000", +3614 => x"00000000", +3615 => x"00000000", +3616 => x"00000000", +3617 => x"00000000", +3618 => x"00000000", +3619 => x"00000000", +3620 => x"00000000", +3621 => x"00000000", +3622 => x"00000000", +3623 => x"00000000", +3624 => x"00000000", +3625 => x"00000000", +3626 => x"00000000", +3627 => x"00000000", +3628 => x"00000000", +3629 => x"00000000", +3630 => x"00000000", +3631 => x"00000000", +3632 => x"00000000", +3633 => x"00000000", +3634 => x"00000000", +3635 => x"00000000", +3636 => x"00000000", +3637 => x"00000000", +3638 => x"00000000", +3639 => x"00000000", +3640 => x"00000000", +3641 => x"00000000", +3642 => x"00000000", +3643 => x"00000000", +3644 => x"00000000", +3645 => x"00000000", +3646 => x"00000000", +3647 => x"00003104", +3648 => x"ffffffff", +3649 => x"00000000", +3650 => x"ffffffff", +3651 => x"00000000", + others => x"00000000" +); + +begin + +process (clk) +begin + if (clk'event and clk = '1') then + if (memAWriteEnable = '1') and (memBWriteEnable = '1') and (memAAddr=memBAddr) and (memAWrite/=memBWrite) then + report "write collision" severity failure; + end if; + + if (memAWriteEnable = '1') then + ram(conv_integer(memAAddr)) := memAWrite; + memARead <= memAWrite; + else + memARead <= ram(conv_integer(memAAddr)); + end if; + end if; +end process; + +process (clk) +begin + if (clk'event and clk = '1') then + if (memBWriteEnable = '1') then + ram(conv_integer(memBAddr)) := memBWrite; + memBRead <= memBWrite; + else + memBRead <= ram(conv_integer(memBAddr)); + end if; + end if; +end process; + + + + +end dualport_ram_arch; diff --git a/zpu/hdl/zpu4/src/build.xml b/zpu/hdl/zpu4/src/build.xml new file mode 100644 index 0000000..e1b268a --- /dev/null +++ b/zpu/hdl/zpu4/src/build.xml @@ -0,0 +1,114 @@ + + + + + + + eCosBoard firmware build file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/zpu/hdl/zpu4/src/clocks.vhd b/zpu/hdl/zpu4/src/clocks.vhd new file mode 100644 index 0000000..a352b3c --- /dev/null +++ b/zpu/hdl/zpu4/src/clocks.vhd @@ -0,0 +1,246 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +library UNISIM; +use UNISIM.vcomponents.all; + +entity clocks is + port ( areset : in std_logic; + cpu_clk_p : in std_logic; + sdr_clk_fb_p : in std_logic; + cpu_clk : out std_logic; + cpu_clk_2x : out std_logic; + cpu_clk_4x : out std_logic; + ddr_in_clk : out std_logic; + ddr_in_clk_2x : out std_logic; + locked : out std_logic_vector(2 downto 0)); +end clocks; + +architecture behave of clocks is + +signal low : std_logic; + +signal cpu_clk_in : std_logic; +signal sdr_clk_fb_in : std_logic; + +signal dcm_cpu1 : std_logic; +signal dcm_cpu2 : std_logic; +signal dcm_cpu2_dum : std_logic; +signal dcm_cpu4 : std_logic; +signal dcm_ddr2 : std_logic; +signal dcm_ddr2_2x : std_logic; + +signal cpu_clk_int : std_logic; +signal cpu_clk_2x_int : std_logic; +signal cpu_clk_2x_dum_int : std_logic; +signal cpu_clk_4x_int : std_logic; +signal ddr_in_clk_int : std_logic; +signal ddr_in_clk_2x_int : std_logic; + +signal dcm1_locked_del : std_logic; +signal dcm2_locked_del : std_logic; +signal dcm2_reset : std_logic; +signal dcm3_reset : std_logic; + +signal locked_int : std_logic_vector(2 downto 0); +signal del_addr : std_logic_vector(3 downto 0); + +begin + + low <= '0'; + del_addr <= "1111"; + + cpu_clk <= cpu_clk_int; + cpu_clk_2x <= cpu_clk_2x_int; + cpu_clk_4x <= cpu_clk_4x_int; + ddr_in_clk <= ddr_in_clk_int; + ddr_in_clk_2x <= ddr_in_clk_2x_int; + locked <= locked_int; + + + CPU_IBUFG: + IBUFG port map ( + O => cpu_clk_in, + I => cpu_clk_p); + + SDR_FB_IBUFG: + IBUFG port map ( + O => sdr_clk_fb_in, + I => sdr_clk_fb_p); + + dcm2_rst: + SRL16 generic map ( + INIT => X"0000") + port map ( + Q => dcm1_locked_del, + A0 => del_addr(0), + A1 => del_addr(1), + A2 => del_addr(2), + A3 => del_addr(3), + CLK => cpu_clk_int, + D => locked_int(0)); + + dcm2_reset <= not(dcm1_locked_del); + + dcm3_rst: + SRL16 generic map ( + INIT => X"0000") + port map ( + Q => dcm2_locked_del, + A0 => del_addr(0), + A1 => del_addr(1), + A2 => del_addr(2), + A3 => del_addr(3), + CLK => cpu_clk_int, + D => locked_int(1)); + + dcm3_reset <= not(dcm2_locked_del); + + cpu1_dcm: + DCM generic map ( + CLKDV_DIVIDE => 2.0, -- Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5 + -- 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0 + CLKFX_DIVIDE => 1, -- Can be any interger from 1 to 32 + CLKFX_MULTIPLY => 4, -- Can be any integer from 1 to 32 + CLKIN_DIVIDE_BY_2 => FALSE, -- TRUE/FALSE to enable CLKIN divide by two feature + CLKIN_PERIOD => 15.625, -- Specify period of input clock + CLKOUT_PHASE_SHIFT => "NONE", -- Specify phase shift of NONE, FIXED or VARIABLE + CLK_FEEDBACK => "1X", -- Specify clock feedback of NONE, 1X or 2X + DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", -- SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or + -- an integer from 0 to 15 + DFS_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for frequency synthesis + DLL_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for DLL + DUTY_CYCLE_CORRECTION => TRUE, -- Duty cycle correction, TRUE or FALSE + FACTORY_JF => X"8080", -- FACTORY JF Values + PHASE_SHIFT => 0, -- Amount of fixed phase shift from -255 to 255 + STARTUP_WAIT => FALSE) -- Delay configuration DONE until DCM LOCK, TRUE/FALSE + port map ( + CLK0 => dcm_cpu1, -- 0 degree DCM CLK ouptput + CLK180 => open, -- 180 degree DCM CLK output + CLK270 => open, -- 270 degree DCM CLK output + CLK2X => dcm_cpu2, -- 2X DCM CLK output + CLK2X180 => open, -- 2X, 180 degree DCM CLK out + CLK90 => open, -- 90 degree DCM CLK output + CLKDV => open, -- Divided DCM CLK out (CLKDV_DIVIDE) + CLKFX => open, -- DCM CLK synthesis out (M/D) + CLKFX180 => open, -- 180 degree CLK synthesis out + LOCKED => locked_int(0), -- DCM LOCK status output + PSDONE => open, -- Dynamic phase adjust done output + STATUS => open, -- 8-bit DCM status bits output + CLKFB => cpu_clk_int, -- DCM clock feedback + CLKIN => cpu_clk_in, -- Clock input (from IBUFG, BUFG or DCM) + PSCLK => low, -- Dynamic phase adjust clock input + PSEN => low, -- Dynamic phase adjust enable input + PSINCDEC => low, -- Dynamic phase adjust increment/decrement + RST => areset); -- DCM asynchronous reset input + + cpu2_dcm: + DCM generic map ( + CLKDV_DIVIDE => 2.0, -- Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5 + -- 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0 + CLKFX_DIVIDE => 1, -- Can be any interger from 1 to 32 + CLKFX_MULTIPLY => 4, -- Can be any integer from 1 to 32 + CLKIN_DIVIDE_BY_2 => FALSE, -- TRUE/FALSE to enable CLKIN divide by two feature + CLKIN_PERIOD => 7.8125, -- Specify period of input clock + CLKOUT_PHASE_SHIFT => "NONE", -- Specify phase shift of NONE, FIXED or VARIABLE + CLK_FEEDBACK => "1X", -- Specify clock feedback of NONE, 1X or 2X + DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", -- SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or + -- an integer from 0 to 15 + DFS_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for frequency synthesis + DLL_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for DLL + DUTY_CYCLE_CORRECTION => TRUE, -- Duty cycle correction, TRUE or FALSE + FACTORY_JF => X"8080", -- FACTORY JF Values + PHASE_SHIFT => 0, -- Amount of fixed phase shift from -255 to 255 + STARTUP_WAIT => FALSE) -- Delay configuration DONE until DCM LOCK, TRUE/FALSE + port map ( + CLK0 => dcm_cpu2_dum, -- 0 degree DCM CLK ouptput + CLK180 => open, -- 180 degree DCM CLK output + CLK270 => open, -- 270 degree DCM CLK output + CLK2X => dcm_cpu4, -- 2X DCM CLK output + CLK2X180 => open, -- 2X, 180 degree DCM CLK out + CLK90 => open, -- 90 degree DCM CLK output + CLKDV => open, -- Divided DCM CLK out (CLKDV_DIVIDE) + CLKFX => open, -- DCM CLK synthesis out (M/D) + CLKFX180 => open, -- 180 degree CLK synthesis out + LOCKED => locked_int(1), -- DCM LOCK status output + PSDONE => open, -- Dynamic phase adjust done output + STATUS => open, -- 8-bit DCM status bits output + CLKFB => cpu_clk_2x_dum_int, -- DCM clock feedback + CLKIN => cpu_clk_2x_int, -- Clock input (from IBUFG, BUFG or DCM) + PSCLK => low, -- Dynamic phase adjust clock input + PSEN => low, -- Dynamic phase adjust enable input + PSINCDEC => low, -- Dynamic phase adjust increment/decrement + RST => dcm2_reset); -- DCM asynchronous reset input + + ddr_read_dcm: + DCM generic map ( + CLKDV_DIVIDE => 2.0, -- Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5 + -- 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0 + CLKFX_DIVIDE => 1, -- Can be any interger from 1 to 32 + CLKFX_MULTIPLY => 4, -- Can be any integer from 1 to 32 + CLKIN_DIVIDE_BY_2 => FALSE, -- TRUE/FALSE to enable CLKIN divide by two feature + CLKIN_PERIOD => 7.8125, -- Specify period of input clock + CLKOUT_PHASE_SHIFT => "FIXED", -- Specify phase shift of NONE, FIXED or VARIABLE +-- CLKOUT_PHASE_SHIFT => "NONE", -- Specify phase shift of NONE, FIXED or VARIABLE + CLK_FEEDBACK => "1X", -- Specify clock feedback of NONE, 1X or 2X + DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", -- SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or + -- an integer from 0 to 15 + DFS_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for frequency synthesis + DLL_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for DLL + DUTY_CYCLE_CORRECTION => TRUE, -- Duty cycle correction, TRUE or FALSE + FACTORY_JF => X"8080", -- FACTORY JF Values + PHASE_SHIFT => 103, -- Amount of fixed phase shift from -255 to 255 +-- PHASE_SHIFT => 0, -- Amount of fixed phase shift from -255 to 255 + STARTUP_WAIT => FALSE) -- Delay configuration DONE until DCM LOCK, TRUE/FALSE + port map ( + CLK0 => dcm_ddr2, -- 0 degree DCM CLK ouptput + CLK180 => open, -- 180 degree DCM CLK output + CLK270 => open, -- 270 degree DCM CLK output + CLK2X => dcm_ddr2_2x, -- 2X DCM CLK output + CLK2X180 => open, -- 2X, 180 degree DCM CLK out + CLK90 => open, -- 90 degree DCM CLK output + CLKDV => open, -- Divided DCM CLK out (CLKDV_DIVIDE) + CLKFX => open, -- DCM CLK synthesis out (M/D) + CLKFX180 => open, -- 180 degree CLK synthesis out + LOCKED => locked_int(2), -- DCM LOCK status output + PSDONE => open, -- Dynamic phase adjust done output + STATUS => open, -- 8-bit DCM status bits output + CLKFB => ddr_in_clk_int, -- DCM clock feedback + CLKIN => sdr_clk_fb_in, -- Clock input (from IBUFG, BUFG or DCM) + PSCLK => low, -- Dynamic phase adjust clock input + PSEN => low, -- Dynamic phase adjust enable input + PSINCDEC => low, -- Dynamic phase adjust increment/decrement + RST => dcm3_reset); -- DCM asynchronous reset input + + cpu1: + BUFG port map ( + I => dcm_cpu1, + O => cpu_clk_int); + + cpu2: + BUFG port map ( + I => dcm_cpu2, + O => cpu_clk_2x_int); + + cpu2_dum: + BUFG port map ( + I => dcm_cpu2_dum, + O => cpu_clk_2x_dum_int); + + cpu4: + BUFG port map ( + I => dcm_cpu4, + O => cpu_clk_4x_int); + + ddr_clk: + BUFG port map ( + I => dcm_ddr2, + O => ddr_in_clk_int); + + ddr_clk_2x: + BUFG port map ( + I => dcm_ddr2_2x, + O => ddr_in_clk_2x_int); + +end behave; \ No newline at end of file diff --git a/zpu/hdl/zpu4/src/dmipssmalltrace.do b/zpu/hdl/zpu4/src/dmipssmalltrace.do new file mode 100644 index 0000000..eb4c6fe --- /dev/null +++ b/zpu/hdl/zpu4/src/dmipssmalltrace.do @@ -0,0 +1,26 @@ +set BreakOnAssertion 1 +vlib work + +vcom -93 -explicit zpu_config_trace.vhd +vcom -93 -explicit zpupkg.vhd +vcom -93 -explicit txt_util.vhd +vcom -93 -explicit sim_fpga_top.vhd +vcom -93 -explicit zpu_core_small.vhd +vcom -93 -explicit bram_dmips.vhd +vcom -93 -explicit dram_dmips.vhd +vcom -93 -explicit timer.vhd +vcom -93 -explicit io.vhd +vcom -93 -explicit trace.vhd + + +vsim fpga_top +view wave + +add wave -recursive fpga_top/zpu/* +#--add wave -recursive fpga_top/ioMap/* +#add wave -recursive fpga_top/* +view structure + + +# run ZPU +run 5 ms diff --git a/zpu/hdl/zpu4/src/dmipstrace.do b/zpu/hdl/zpu4/src/dmipstrace.do new file mode 100644 index 0000000..8d5f430 --- /dev/null +++ b/zpu/hdl/zpu4/src/dmipstrace.do @@ -0,0 +1,25 @@ +set BreakOnAssertion 1 +vlib work + +vcom -93 -explicit zpu_config_trace.vhd +vcom -93 -explicit zpupkg.vhd +vcom -93 -explicit txt_util.vhd +vcom -93 -explicit sim_fpga_top.vhd +vcom -93 -explicit zpu_core.vhd +vcom -93 -explicit dram_dmips.vhd +vcom -93 -explicit timer.vhd +vcom -93 -explicit io.vhd +vcom -93 -explicit trace.vhd + + +vsim fpga_top +view wave + +add wave -recursive fpga_top/zpu/* +#--add wave -recursive fpga_top/ioMap/* +#add wave -recursive fpga_top/* +view structure + + +# run ZPU +run 5 ms diff --git a/zpu/hdl/zpu4/src/dmipstraceintstack.do b/zpu/hdl/zpu4/src/dmipstraceintstack.do new file mode 100644 index 0000000..b2addb4 --- /dev/null +++ b/zpu/hdl/zpu4/src/dmipstraceintstack.do @@ -0,0 +1,25 @@ +set BreakOnAssertion 1 +vlib work + +vcom -93 -explicit zpu_config_trace.vhd +vcom -93 -explicit zpupkg.vhd +vcom -93 -explicit txt_util.vhd +vcom -93 -explicit sim_fpga_top.vhd +vcom -93 -explicit zpu_core_intstack.vhd +vcom -93 -explicit dram_dmips.vhd +vcom -93 -explicit timer.vhd +vcom -93 -explicit io.vhd +vcom -93 -explicit trace.vhd + + +vsim fpga_top +view wave + +add wave -recursive fpga_top/zpu/* +#--add wave -recursive fpga_top/ioMap/* +#add wave -recursive fpga_top/* +view structure + + +# run ZPU +run 5 ms diff --git a/zpu/hdl/zpu4/src/dram_dmips.vhd b/zpu/hdl/zpu4/src/dram_dmips.vhd new file mode 100644 index 0000000..e63a27a --- /dev/null +++ b/zpu/hdl/zpu4/src/dram_dmips.vhd @@ -0,0 +1,3702 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + + +library work; +use work.zpu_config.all; +use work.zpupkg.all; + +entity dram is +port (clk : in std_logic; +areset : std_logic; + mem_writeEnable : in std_logic; + mem_readEnable : in std_logic; + mem_addr : in std_logic_vector(maxAddrBit downto 0); + mem_write : in std_logic_vector(wordSize-1 downto 0); + mem_read : out std_logic_vector(wordSize-1 downto 0); + mem_busy : out std_logic; + mem_writeMask : in std_logic_vector(wordBytes-1 downto 0)); +end dram; + +architecture dram_arch of dram is + + +type ram_type is array(0 to ((2**(maxAddrBit+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); + +shared variable ram : ram_type := +( +0 => x"0b0b0b0b", +1 => x"80700b0b", +2 => x"80e2a40c", +3 => x"3a0b0b80", +4 => x"c6fc0400", +5 => x"00000000", +6 => x"00000000", +7 => x"00000000", +8 => x"80088408", +9 => x"88080b0b", +10 => x"80c7c32d", +11 => x"880c840c", +12 => x"800c0400", +13 => x"00000000", +14 => x"00000000", +15 => x"00000000", +16 => x"71fd0608", +17 => x"72830609", +18 => x"81058205", +19 => x"832b2a83", +20 => x"ffff0652", +21 => x"04000000", +22 => x"00000000", +23 => x"00000000", +24 => x"71fd0608", +25 => x"83ffff73", +26 => x"83060981", +27 => x"05820583", +28 => x"2b2b0906", +29 => x"7383ffff", +30 => x"0b0b0b0b", +31 => x"83a70400", +32 => x"72098105", +33 => x"72057373", +34 => x"09060906", +35 => x"73097306", +36 => x"070a8106", +37 => x"53510400", +38 => x"00000000", +39 => x"00000000", +40 => x"72722473", +41 => x"732e0753", +42 => x"51040000", +43 => x"00000000", +44 => x"00000000", +45 => x"00000000", +46 => x"00000000", +47 => x"00000000", +48 => x"71737109", +49 => x"71068106", +50 => x"30720a10", +51 => x"0a720a10", +52 => x"0a31050a", +53 => x"81065151", +54 => x"53510400", +55 => x"00000000", +56 => x"72722673", +57 => x"732e0753", +58 => x"51040000", +59 => x"00000000", +60 => x"00000000", +61 => x"00000000", +62 => x"00000000", +63 => x"00000000", +64 => x"00000000", +65 => x"00000000", +66 => x"00000000", +67 => x"00000000", +68 => x"00000000", +69 => x"00000000", +70 => x"00000000", +71 => x"00000000", +72 => x"0b0b0b88", +73 => x"c4040000", +74 => x"00000000", +75 => x"00000000", +76 => x"00000000", +77 => x"00000000", +78 => x"00000000", +79 => x"00000000", +80 => x"720a722b", +81 => x"0a535104", +82 => x"00000000", +83 => x"00000000", +84 => x"00000000", +85 => x"00000000", +86 => x"00000000", +87 => x"00000000", +88 => x"72729f06", +89 => x"0981050b", +90 => x"0b0b88a7", +91 => x"05040000", +92 => x"00000000", +93 => x"00000000", +94 => x"00000000", +95 => x"00000000", +96 => x"72722aff", +97 => x"739f062a", +98 => x"0974090a", +99 => x"8106ff05", +100 => x"06075351", +101 => x"04000000", +102 => x"00000000", +103 => x"00000000", +104 => x"71715351", +105 => x"020d0406", +106 => x"73830609", +107 => x"81058205", +108 => x"832b0b2b", +109 => x"0772fc06", +110 => x"0c515104", +111 => x"00000000", +112 => x"72098105", +113 => x"72050970", +114 => x"81050906", +115 => x"0a810653", +116 => x"51040000", +117 => x"00000000", +118 => x"00000000", +119 => x"00000000", +120 => x"72098105", +121 => x"72050970", +122 => x"81050906", +123 => x"0a098106", +124 => x"53510400", +125 => x"00000000", +126 => x"00000000", +127 => x"00000000", +128 => x"71098105", +129 => x"52040000", +130 => x"00000000", +131 => x"00000000", +132 => x"00000000", +133 => x"00000000", +134 => x"00000000", +135 => x"00000000", +136 => x"72720981", +137 => x"05055351", +138 => x"04000000", +139 => x"00000000", +140 => x"00000000", +141 => x"00000000", +142 => x"00000000", +143 => x"00000000", +144 => x"72097206", +145 => x"73730906", +146 => x"07535104", +147 => x"00000000", +148 => x"00000000", +149 => x"00000000", +150 => x"00000000", +151 => x"00000000", +152 => x"71fc0608", +153 => x"72830609", +154 => x"81058305", +155 => x"1010102a", +156 => x"81ff0652", +157 => x"04000000", +158 => x"00000000", +159 => x"00000000", +160 => x"71fc0608", +161 => x"0b0b80e2", +162 => x"90738306", +163 => x"10100508", +164 => x"060b0b0b", +165 => x"88aa0400", +166 => x"00000000", +167 => x"00000000", +168 => x"80088408", +169 => x"88087575", +170 => x"0b0b0baf", +171 => x"ac2d5050", +172 => x"80085688", +173 => x"0c840c80", +174 => x"0c510400", +175 => x"00000000", +176 => x"80088408", +177 => x"88087575", +178 => x"0b0b0baf", +179 => x"f02d5050", +180 => x"80085688", +181 => x"0c840c80", +182 => x"0c510400", +183 => x"00000000", +184 => x"72097081", +185 => x"0509060a", +186 => x"8106ff05", +187 => x"70547106", +188 => x"73097274", +189 => x"05ff0506", +190 => x"07515151", +191 => x"04000000", +192 => x"72097081", +193 => x"0509060a", +194 => x"098106ff", +195 => x"05705471", +196 => x"06730972", +197 => x"7405ff05", +198 => x"06075151", +199 => x"51040000", +200 => x"05ff0504", +201 => x"00000000", +202 => x"00000000", +203 => x"00000000", +204 => x"00000000", +205 => x"00000000", +206 => x"00000000", +207 => x"00000000", +208 => x"810b0b0b", +209 => x"80e2a00c", +210 => x"51040000", +211 => x"00000000", +212 => x"00000000", +213 => x"00000000", +214 => x"00000000", +215 => x"00000000", +216 => x"71810552", +217 => x"04000000", +218 => x"00000000", +219 => x"00000000", +220 => x"00000000", +221 => x"00000000", +222 => x"00000000", +223 => x"00000000", +224 => x"00000000", +225 => x"00000000", +226 => x"00000000", +227 => x"00000000", +228 => x"00000000", +229 => x"00000000", +230 => x"00000000", +231 => x"00000000", +232 => x"02840572", +233 => x"10100552", +234 => x"04000000", +235 => x"00000000", +236 => x"00000000", +237 => x"00000000", +238 => x"00000000", +239 => x"00000000", +240 => x"00000000", +241 => x"00000000", +242 => x"00000000", +243 => x"00000000", +244 => x"00000000", +245 => x"00000000", +246 => x"00000000", +247 => x"00000000", +248 => x"717105ff", +249 => x"05715351", +250 => x"020d0400", +251 => x"00000000", +252 => x"00000000", +253 => x"00000000", +254 => x"00000000", +255 => x"00000000", +256 => x"83d93f80", +257 => x"cbcf3f04", +258 => x"10101010", +259 => x"10101010", +260 => x"10101010", +261 => x"10101010", +262 => x"10101010", +263 => x"10101010", +264 => x"10101010", +265 => x"10101053", +266 => x"51047381", +267 => x"ff067383", +268 => x"06098105", +269 => x"83051010", +270 => x"102b0772", +271 => x"fc060c51", +272 => x"51043c04", +273 => x"72728072", +274 => x"8106ff05", +275 => x"09720605", +276 => x"71105272", +277 => x"0a100a53", +278 => x"72ed3851", +279 => x"51535104", +280 => x"ff3d0d0b", +281 => x"0b80f294", +282 => x"08528412", +283 => x"08708106", +284 => x"515170f6", +285 => x"38710881", +286 => x"ff06800c", +287 => x"833d0d04", +288 => x"ff3d0d0b", +289 => x"0b80f294", +290 => x"08528412", +291 => x"08700a10", +292 => x"0a708106", +293 => x"51515170", +294 => x"f1387372", +295 => x"0c833d0d", +296 => x"0480e2a0", +297 => x"08802ea8", +298 => x"38838080", +299 => x"0b0b0b80", +300 => x"f2940c82", +301 => x"a0800b0b", +302 => x"0b80f298", +303 => x"0c829080", +304 => x"0b80f2a8", +305 => x"0c0b0b80", +306 => x"f29c0b80", +307 => x"f2ac0c04", +308 => x"f8808080", +309 => x"a40b0b0b", +310 => x"80f2940c", +311 => x"f8808082", +312 => x"800b0b0b", +313 => x"80f2980c", +314 => x"f8808084", +315 => x"800b80f2", +316 => x"a80cf880", +317 => x"8080940b", +318 => x"80f2ac0c", +319 => x"f8808080", +320 => x"9c0b80f2", +321 => x"a40cf880", +322 => x"8080a00b", +323 => x"80f2b00c", +324 => x"04f23d0d", +325 => x"600b0b80", +326 => x"f2980856", +327 => x"5d82750c", +328 => x"8059805a", +329 => x"800b8f3d", +330 => x"71101017", +331 => x"70085957", +332 => x"5d5b8076", +333 => x"81ff067c", +334 => x"832b5658", +335 => x"5276537b", +336 => x"519af33f", +337 => x"7d7f7a72", +338 => x"077c7207", +339 => x"71716081", +340 => x"05415f5d", +341 => x"5b595755", +342 => x"7a8724bb", +343 => x"380b0b80", +344 => x"f298087b", +345 => x"10101170", +346 => x"08585155", +347 => x"807681ff", +348 => x"067c832b", +349 => x"56585276", +350 => x"537b519a", +351 => x"b93f7d7f", +352 => x"7a72077c", +353 => x"72077171", +354 => x"60810541", +355 => x"5f5d5b59", +356 => x"5755877b", +357 => x"25c73876", +358 => x"7d0c7784", +359 => x"1e0c7c80", +360 => x"0c903d0d", +361 => x"04ff3d0d", +362 => x"80f2a033", +363 => x"5170a738", +364 => x"80e2ac08", +365 => x"70085252", +366 => x"70802e94", +367 => x"38841280", +368 => x"e2ac0c70", +369 => x"2d80e2ac", +370 => x"08700852", +371 => x"5270ee38", +372 => x"810b80f2", +373 => x"a034833d", +374 => x"0d040480", +375 => x"3d0d0b0b", +376 => x"80f29008", +377 => x"802e8e38", +378 => x"0b0b0b0b", +379 => x"800b802e", +380 => x"09810685", +381 => x"38823d0d", +382 => x"040b0b80", +383 => x"f290510b", +384 => x"0b0bf3fc", +385 => x"3f823d0d", +386 => x"0404ff3d", +387 => x"0d028f05", +388 => x"3352718a", +389 => x"2e8a3871", +390 => x"51fce53f", +391 => x"833d0d04", +392 => x"8d51fcdc", +393 => x"3f7151fc", +394 => x"d73f833d", +395 => x"0d04ce3d", +396 => x"0db53d70", +397 => x"70840552", +398 => x"088c8a5c", +399 => x"56a53d5e", +400 => x"5c807570", +401 => x"81055733", +402 => x"765b5558", +403 => x"73782e80", +404 => x"c1388e3d", +405 => x"5b73a52e", +406 => x"09810680", +407 => x"c5387870", +408 => x"81055a33", +409 => x"547380e4", +410 => x"2e81b638", +411 => x"7380e424", +412 => x"80c63873", +413 => x"80e32ea1", +414 => x"388052a5", +415 => x"51792d80", +416 => x"52735179", +417 => x"2d821858", +418 => x"78708105", +419 => x"5a335473", +420 => x"c4387780", +421 => x"0cb43d0d", +422 => x"047b841d", +423 => x"83123356", +424 => x"5d578052", +425 => x"7351792d", +426 => x"81187970", +427 => x"81055b33", +428 => x"555873ff", +429 => x"a038db39", +430 => x"7380f32e", +431 => x"098106ff", +432 => x"b8387b84", +433 => x"1d710859", +434 => x"5d568077", +435 => x"33555673", +436 => x"762e8d38", +437 => x"81167018", +438 => x"70335755", +439 => x"5674f538", +440 => x"ff165580", +441 => x"7625ffa0", +442 => x"38767081", +443 => x"05583354", +444 => x"80527351", +445 => x"792d8118", +446 => x"75ff1757", +447 => x"57588076", +448 => x"25ff8538", +449 => x"76708105", +450 => x"58335480", +451 => x"52735179", +452 => x"2d811875", +453 => x"ff175757", +454 => x"58758024", +455 => x"cc38fee8", +456 => x"397b841d", +457 => x"71087071", +458 => x"9f2c5953", +459 => x"595d5680", +460 => x"75248195", +461 => x"38757d7c", +462 => x"58565480", +463 => x"5773772e", +464 => x"098106b6", +465 => x"38b07b34", +466 => x"02b50556", +467 => x"7a762e97", +468 => x"38ff1656", +469 => x"75337570", +470 => x"81055734", +471 => x"8117577a", +472 => x"762e0981", +473 => x"06eb3880", +474 => x"7534767d", +475 => x"ff125758", +476 => x"56758024", +477 => x"fef338fe", +478 => x"8f398a52", +479 => x"7351a0f0", +480 => x"3f80080b", +481 => x"0b80d484", +482 => x"05337670", +483 => x"81055834", +484 => x"8a527351", +485 => x"a0963f80", +486 => x"08548008", +487 => x"802effac", +488 => x"388a5273", +489 => x"51a0c93f", +490 => x"80080b0b", +491 => x"80d48405", +492 => x"33767081", +493 => x"0558348a", +494 => x"5273519f", +495 => x"ef3f8008", +496 => x"548008ff", +497 => x"b538ff84", +498 => x"39745276", +499 => x"53b43dff", +500 => x"b8055195", +501 => x"b63fa33d", +502 => x"0856fed9", +503 => x"39803d0d", +504 => x"80c10b81", +505 => x"c0f43480", +506 => x"0b81c2d0", +507 => x"0c70800c", +508 => x"823d0d04", +509 => x"ff3d0d80", +510 => x"0b81c0f4", +511 => x"33525270", +512 => x"80c12e99", +513 => x"387181c2", +514 => x"d0080781", +515 => x"c2d00c80", +516 => x"c20b81c0", +517 => x"f8347080", +518 => x"0c833d0d", +519 => x"04810b81", +520 => x"c2d00807", +521 => x"81c2d00c", +522 => x"80c20b81", +523 => x"c0f83470", +524 => x"800c833d", +525 => x"0d04fd3d", +526 => x"0d757008", +527 => x"8a055353", +528 => x"81c0f433", +529 => x"517080c1", +530 => x"2e8b3873", +531 => x"f3387080", +532 => x"0c853d0d", +533 => x"04ff1270", +534 => x"81c0f008", +535 => x"31740c80", +536 => x"0c853d0d", +537 => x"04fc3d0d", +538 => x"81c0fc08", +539 => x"5574802e", +540 => x"8c387675", +541 => x"08710c81", +542 => x"c0fc0856", +543 => x"548c1553", +544 => x"81c0f008", +545 => x"528a5190", +546 => x"f03f7380", +547 => x"0c863d0d", +548 => x"04fb3d0d", +549 => x"77700856", +550 => x"56b05381", +551 => x"c0fc0852", +552 => x"7451acb4", +553 => x"3f850b8c", +554 => x"170c850b", +555 => x"8c160c75", +556 => x"08750c81", +557 => x"c0fc0854", +558 => x"73802e8a", +559 => x"38730875", +560 => x"0c81c0fc", +561 => x"08548c14", +562 => x"5381c0f0", +563 => x"08528a51", +564 => x"90a73f84", +565 => x"1508ad38", +566 => x"860b8c16", +567 => x"0c881552", +568 => x"88160851", +569 => x"8fb33f81", +570 => x"c0fc0870", +571 => x"08760c54", +572 => x"8c157054", +573 => x"548a5273", +574 => x"08518ffd", +575 => x"3f73800c", +576 => x"873d0d04", +577 => x"750854b0", +578 => x"53735275", +579 => x"51abc93f", +580 => x"73800c87", +581 => x"3d0d04d9", +582 => x"3d0db051", +583 => x"9eeb3f80", +584 => x"0881c0ec", +585 => x"0cb0519e", +586 => x"e03f8008", +587 => x"81c0fc0c", +588 => x"81c0ec08", +589 => x"80080c80", +590 => x"0b800884", +591 => x"050c820b", +592 => x"80088805", +593 => x"0ca80b80", +594 => x"088c050c", +595 => x"9f530b0b", +596 => x"80d49052", +597 => x"80089005", +598 => x"51aafd3f", +599 => x"a13d5e9f", +600 => x"530b0b80", +601 => x"d4b0527d", +602 => x"51aaed3f", +603 => x"8a0b80ff", +604 => x"b00c0b0b", +605 => x"80ded451", +606 => x"f9b43f0b", +607 => x"0b80d4d0", +608 => x"51f9ab3f", +609 => x"0b0b80de", +610 => x"d451f9a2", +611 => x"3f80e2b4", +612 => x"08802e8a", +613 => x"cf380b0b", +614 => x"80d58051", +615 => x"f9903f0b", +616 => x"0b80ded4", +617 => x"51f9873f", +618 => x"80e2b008", +619 => x"520b0b80", +620 => x"d5ac51f8", +621 => x"f93f80f2", +622 => x"cc51bbf8", +623 => x"3f810b9a", +624 => x"3d5e5b80", +625 => x"0b80e2b0", +626 => x"082582d6", +627 => x"38903d5f", +628 => x"80c10b81", +629 => x"c0f43481", +630 => x"0b81c2d0", +631 => x"0c80c20b", +632 => x"81c0f834", +633 => x"8240835a", +634 => x"9f530b0b", +635 => x"80d5dc52", +636 => x"7c51a9e4", +637 => x"3f814180", +638 => x"7d537e52", +639 => x"568f9e3f", +640 => x"8008762e", +641 => x"09810683", +642 => x"38815675", +643 => x"81c2d00c", +644 => x"7f705856", +645 => x"758325a2", +646 => x"38751010", +647 => x"16fd0542", +648 => x"a93dffa4", +649 => x"05538352", +650 => x"76518dcd", +651 => x"3f7f8105", +652 => x"70417058", +653 => x"56837624", +654 => x"e0386154", +655 => x"755380f2", +656 => x"d45281c1", +657 => x"88518dc1", +658 => x"3f81c0fc", +659 => x"08700858", +660 => x"58b05377", +661 => x"527651a8", +662 => x"ff3f850b", +663 => x"8c190c85", +664 => x"0b8c180c", +665 => x"7708770c", +666 => x"81c0fc08", +667 => x"5675802e", +668 => x"8a387508", +669 => x"770c81c0", +670 => x"fc08568c", +671 => x"165381c0", +672 => x"f008528a", +673 => x"518cf23f", +674 => x"84170888", +675 => x"e038860b", +676 => x"8c180c88", +677 => x"17528818", +678 => x"08518bfd", +679 => x"3f81c0fc", +680 => x"08700878", +681 => x"0c568c17", +682 => x"7054598a", +683 => x"52780851", +684 => x"8cc73f80", +685 => x"c10b81c0", +686 => x"f8335757", +687 => x"767626a2", +688 => x"3880c352", +689 => x"76518dab", +690 => x"3f800861", +691 => x"2e8aec38", +692 => x"81177081", +693 => x"ff0681c0", +694 => x"f8335858", +695 => x"58757727", +696 => x"e0387960", +697 => x"29627054", +698 => x"71535b59", +699 => x"99be3f80", +700 => x"0840787a", +701 => x"31708729", +702 => x"80083180", +703 => x"088a0581", +704 => x"c0f43381", +705 => x"c0f0085e", +706 => x"5b525a56", +707 => x"7780c12e", +708 => x"8ad8387b", +709 => x"f738811b", +710 => x"5b80e2b0", +711 => x"087b25fd", +712 => x"af3881c0", +713 => x"e451b98c", +714 => x"3f0b0b80", +715 => x"d5fc51f5", +716 => x"fd3f0b0b", +717 => x"80ded451", +718 => x"f5f43f0b", +719 => x"0b80d68c", +720 => x"51f5eb3f", +721 => x"0b0b80de", +722 => x"d451f5e2", +723 => x"3f81c0f0", +724 => x"08520b0b", +725 => x"80d6c451", +726 => x"f5d43f85", +727 => x"520b0b80", +728 => x"d6e051f5", +729 => x"c93f81c2", +730 => x"d008520b", +731 => x"0b80d6fc", +732 => x"51f5bb3f", +733 => x"81520b0b", +734 => x"80d6e051", +735 => x"f5b03f81", +736 => x"c0f43352", +737 => x"0b0b80d7", +738 => x"9851f5a2", +739 => x"3f80c152", +740 => x"0b0b80d7", +741 => x"b451f596", +742 => x"3f81c0f8", +743 => x"33520b0b", +744 => x"80d7d051", +745 => x"f5883f80", +746 => x"c2520b0b", +747 => x"80d7b451", +748 => x"f4fc3f81", +749 => x"c1a80852", +750 => x"0b0b80d7", +751 => x"ec51f4ee", +752 => x"3f87520b", +753 => x"0b80d6e0", +754 => x"51f4e33f", +755 => x"80ffb008", +756 => x"520b0b80", +757 => x"d88851f4", +758 => x"d53f0b0b", +759 => x"80d8a451", +760 => x"f4cc3f0b", +761 => x"0b80d8d0", +762 => x"51f4c33f", +763 => x"81c0fc08", +764 => x"7008535a", +765 => x"0b0b80d8", +766 => x"dc51f4b2", +767 => x"3f0b0b80", +768 => x"d8f851f4", +769 => x"a93f81c0", +770 => x"fc088411", +771 => x"0853560b", +772 => x"0b80d9ac", +773 => x"51f4973f", +774 => x"80520b0b", +775 => x"80d6e051", +776 => x"f48c3f81", +777 => x"c0fc0888", +778 => x"11085358", +779 => x"0b0b80d9", +780 => x"c851f3fa", +781 => x"3f82520b", +782 => x"0b80d6e0", +783 => x"51f3ef3f", +784 => x"81c0fc08", +785 => x"8c110853", +786 => x"570b0b80", +787 => x"d9e451f3", +788 => x"dd3f9152", +789 => x"0b0b80d6", +790 => x"e051f3d2", +791 => x"3f81c0fc", +792 => x"08900552", +793 => x"0b0b80da", +794 => x"8051f3c2", +795 => x"3f0b0b80", +796 => x"da9c51f3", +797 => x"b93f0b0b", +798 => x"80dad451", +799 => x"f3b03f81", +800 => x"c0ec0870", +801 => x"08535f0b", +802 => x"0b80d8dc", +803 => x"51f39f3f", +804 => x"0b0b80da", +805 => x"e851f396", +806 => x"3f81c0ec", +807 => x"08841108", +808 => x"535b0b0b", +809 => x"80d9ac51", +810 => x"f3843f80", +811 => x"520b0b80", +812 => x"d6e051f2", +813 => x"f93f81c0", +814 => x"ec088811", +815 => x"08535c0b", +816 => x"0b80d9c8", +817 => x"51f2e73f", +818 => x"81520b0b", +819 => x"80d6e051", +820 => x"f2dc3f81", +821 => x"c0ec088c", +822 => x"1108535a", +823 => x"0b0b80d9", +824 => x"e451f2ca", +825 => x"3f92520b", +826 => x"0b80d6e0", +827 => x"51f2bf3f", +828 => x"81c0ec08", +829 => x"9005520b", +830 => x"0b80da80", +831 => x"51f2af3f", +832 => x"0b0b80da", +833 => x"9c51f2a6", +834 => x"3f7f520b", +835 => x"0b80dba8", +836 => x"51f29b3f", +837 => x"85520b0b", +838 => x"80d6e051", +839 => x"f2903f78", +840 => x"520b0b80", +841 => x"dbc451f2", +842 => x"853f8d52", +843 => x"0b0b80d6", +844 => x"e051f1fa", +845 => x"3f61520b", +846 => x"0b80dbe0", +847 => x"51f1ef3f", +848 => x"87520b0b", +849 => x"80d6e051", +850 => x"f1e43f60", +851 => x"520b0b80", +852 => x"dbfc51f1", +853 => x"d93f8152", +854 => x"0b0b80d6", +855 => x"e051f1ce", +856 => x"3f7d520b", +857 => x"0b80dc98", +858 => x"51f1c33f", +859 => x"0b0b80dc", +860 => x"b451f1ba", +861 => x"3f7c520b", +862 => x"0b80dcec", +863 => x"51f1af3f", +864 => x"0b0b80dd", +865 => x"8851f1a6", +866 => x"3f0b0b80", +867 => x"ded451f1", +868 => x"9d3f81c0", +869 => x"e40881c0", +870 => x"e80880f2", +871 => x"cc0880f2", +872 => x"d0087271", +873 => x"31707426", +874 => x"75743170", +875 => x"723180f2", +876 => x"c40c4444", +877 => x"80f2c80c", +878 => x"80f2c808", +879 => x"560b0b80", +880 => x"ddc0555c", +881 => x"595758f0", +882 => x"e53f80f2", +883 => x"c4085680", +884 => x"762582b1", +885 => x"3880e2b0", +886 => x"0870719f", +887 => x"2c9a3d53", +888 => x"565680f2", +889 => x"c40880f2", +890 => x"c8084153", +891 => x"7f547052", +892 => x"5a8a8d3f", +893 => x"66685f80", +894 => x"f2b40c7d", +895 => x"80f2b80c", +896 => x"80e2b008", +897 => x"709f2c58", +898 => x"568058bd", +899 => x"84c07855", +900 => x"55765275", +901 => x"53795187", +902 => x"f33f953d", +903 => x"80f2c408", +904 => x"80f2c808", +905 => x"41557f56", +906 => x"67694053", +907 => x"7e547052", +908 => x"5c89cd3f", +909 => x"64665e80", +910 => x"f2bc0c7c", +911 => x"80f2c00c", +912 => x"80e2b008", +913 => x"709f2c40", +914 => x"58805783", +915 => x"dceb9480", +916 => x"7755557e", +917 => x"5277537b", +918 => x"5187b13f", +919 => x"64665d5b", +920 => x"805e8ddd", +921 => x"7e555580", +922 => x"f2c40880", +923 => x"f2c80859", +924 => x"52775379", +925 => x"5187953f", +926 => x"66684054", +927 => x"7e557a52", +928 => x"7b53a93d", +929 => x"ffa80551", +930 => x"88f63f62", +931 => x"645e81c1", +932 => x"800c7c81", +933 => x"c1840c0b", +934 => x"0b80ddd0", +935 => x"51ef8f3f", +936 => x"80f2b808", +937 => x"520b0b80", +938 => x"de8051ef", +939 => x"813f0b0b", +940 => x"80de8851", +941 => x"eef83f80", +942 => x"f2c00852", +943 => x"0b0b80de", +944 => x"8051eeea", +945 => x"3f81c184", +946 => x"08520b0b", +947 => x"80deb851", +948 => x"eedc3f0b", +949 => x"0b80ded4", +950 => x"51eed33f", +951 => x"800b800c", +952 => x"a93d0d04", +953 => x"0b0b80de", +954 => x"d851f5b0", +955 => x"39770857", +956 => x"b0537652", +957 => x"77519fe0", +958 => x"3f80c10b", +959 => x"81c0f833", +960 => x"5757f7b8", +961 => x"39758a38", +962 => x"80f2c808", +963 => x"8126fdc5", +964 => x"380b0b80", +965 => x"df8851ee", +966 => x"953f0b0b", +967 => x"80dfc051", +968 => x"ee8c3f0b", +969 => x"0b80ded4", +970 => x"51ee833f", +971 => x"80e2b008", +972 => x"70719f2c", +973 => x"9a3d5356", +974 => x"5680f2c4", +975 => x"0880f2c8", +976 => x"0841537f", +977 => x"5470525a", +978 => x"87b63f66", +979 => x"685f80f2", +980 => x"b40c7d80", +981 => x"f2b80c80", +982 => x"e2b00870", +983 => x"9f2c5856", +984 => x"8058bd84", +985 => x"c0785555", +986 => x"76527553", +987 => x"7951859c", +988 => x"3f953d80", +989 => x"f2c40880", +990 => x"f2c80841", +991 => x"557f5667", +992 => x"6940537e", +993 => x"5470525c", +994 => x"86f63f64", +995 => x"665e80f2", +996 => x"bc0c7c80", +997 => x"f2c00c80", +998 => x"e2b00870", +999 => x"9f2c4058", +1000 => x"805783dc", +1001 => x"eb948077", +1002 => x"55557e52", +1003 => x"77537b51", +1004 => x"84da3f64", +1005 => x"665d5b80", +1006 => x"5e8ddd7e", +1007 => x"555580f2", +1008 => x"c40880f2", +1009 => x"c8085952", +1010 => x"77537951", +1011 => x"84be3f66", +1012 => x"6840547e", +1013 => x"557a527b", +1014 => x"53a93dff", +1015 => x"a8055186", +1016 => x"9f3f6264", +1017 => x"5e81c180", +1018 => x"0c7c81c1", +1019 => x"840c0b0b", +1020 => x"80ddd051", +1021 => x"ecb83f80", +1022 => x"f2b80852", +1023 => x"0b0b80de", +1024 => x"8051ecaa", +1025 => x"3f0b0b80", +1026 => x"de8851ec", +1027 => x"a13f80f2", +1028 => x"c008520b", +1029 => x"0b80de80", +1030 => x"51ec933f", +1031 => x"81c18408", +1032 => x"520b0b80", +1033 => x"deb851ec", +1034 => x"853f0b0b", +1035 => x"80ded451", +1036 => x"ebfc3f80", +1037 => x"0b800ca9", +1038 => x"3d0d04a9", +1039 => x"3dffa005", +1040 => x"52805180", +1041 => x"d43f9f53", +1042 => x"0b0b80df", +1043 => x"e0527c51", +1044 => x"9d863f7a", +1045 => x"7b81c0f0", +1046 => x"0c811870", +1047 => x"81ff0681", +1048 => x"c0f83359", +1049 => x"59595af4", +1050 => x"f439ff16", +1051 => x"707b3160", +1052 => x"0c5c800b", +1053 => x"811c5c5c", +1054 => x"80e2b008", +1055 => x"7b25f2d0", +1056 => x"38f59f39", +1057 => x"ff3d0d73", +1058 => x"82327030", +1059 => x"70720780", +1060 => x"25800c52", +1061 => x"52833d0d", +1062 => x"04fe3d0d", +1063 => x"74767153", +1064 => x"54527182", +1065 => x"2e833883", +1066 => x"5171812e", +1067 => x"9a388172", +1068 => x"269f3871", +1069 => x"822eb838", +1070 => x"71842ea9", +1071 => x"3870730c", +1072 => x"70800c84", +1073 => x"3d0d0480", +1074 => x"e40b81c0", +1075 => x"f008258b", +1076 => x"3880730c", +1077 => x"70800c84", +1078 => x"3d0d0483", +1079 => x"730c7080", +1080 => x"0c843d0d", +1081 => x"0482730c", +1082 => x"70800c84", +1083 => x"3d0d0481", +1084 => x"730c7080", +1085 => x"0c843d0d", +1086 => x"04803d0d", +1087 => x"74741482", +1088 => x"05710c80", +1089 => x"0c823d0d", +1090 => x"04f73d0d", +1091 => x"7b7d7f61", +1092 => x"85127082", +1093 => x"2b751170", +1094 => x"74717084", +1095 => x"05530c5a", +1096 => x"5a5d5b76", +1097 => x"0c7980f8", +1098 => x"180c7986", +1099 => x"12525758", +1100 => x"5a5a7676", +1101 => x"24993876", +1102 => x"b329822b", +1103 => x"79115153", +1104 => x"76737084", +1105 => x"05550c81", +1106 => x"14547574", +1107 => x"25f23876", +1108 => x"81cc2919", +1109 => x"fc110881", +1110 => x"05fc120c", +1111 => x"7a197008", +1112 => x"9fa0130c", +1113 => x"5856850b", +1114 => x"81c0f00c", +1115 => x"75800c8b", +1116 => x"3d0d04fe", +1117 => x"3d0d0293", +1118 => x"05335180", +1119 => x"02840597", +1120 => x"05335452", +1121 => x"70732e88", +1122 => x"3871800c", +1123 => x"843d0d04", +1124 => x"7081c0f4", +1125 => x"34810b80", +1126 => x"0c843d0d", +1127 => x"04f83d0d", +1128 => x"7a7c5956", +1129 => x"820b8319", +1130 => x"55557416", +1131 => x"70337533", +1132 => x"5b515372", +1133 => x"792e80c6", +1134 => x"3880c10b", +1135 => x"81168116", +1136 => x"56565782", +1137 => x"7525e338", +1138 => x"ffa91770", +1139 => x"81ff0655", +1140 => x"59738226", +1141 => x"83388755", +1142 => x"81537680", +1143 => x"d22e9838", +1144 => x"77527551", +1145 => x"9bc43f80", +1146 => x"53728008", +1147 => x"25893887", +1148 => x"1581c0f0", +1149 => x"0c815372", +1150 => x"800c8a3d", +1151 => x"0d047281", +1152 => x"c0f43482", +1153 => x"7525ffa2", +1154 => x"38ffbd39", +1155 => x"ef3d0d63", +1156 => x"65675b42", +1157 => x"79436769", +1158 => x"59407741", +1159 => x"5a805d80", +1160 => x"5e617083", +1161 => x"ffff0671", +1162 => x"902a6270", +1163 => x"83ffff06", +1164 => x"71902a74", +1165 => x"72297473", +1166 => x"29757329", +1167 => x"77742973", +1168 => x"902a0572", +1169 => x"11515856", +1170 => x"535f5a57", +1171 => x"5a585558", +1172 => x"73732786", +1173 => x"38848080", +1174 => x"16567390", +1175 => x"2a165b78", +1176 => x"83ffff06", +1177 => x"74848080", +1178 => x"29055c7a", +1179 => x"7c5a5d78", +1180 => x"5e777f29", +1181 => x"61782905", +1182 => x"7d055d7c", +1183 => x"7e567a0c", +1184 => x"74841b0c", +1185 => x"79800c93", +1186 => x"3d0d04f9", +1187 => x"3d0d797b", +1188 => x"7d545872", +1189 => x"59773079", +1190 => x"70307072", +1191 => x"079f2a73", +1192 => x"71315a52", +1193 => x"59777956", +1194 => x"730c5373", +1195 => x"84130c54", +1196 => x"800c893d", +1197 => x"0d04f93d", +1198 => x"0d797b7d", +1199 => x"7f565452", +1200 => x"5472802e", +1201 => x"a0387057", +1202 => x"7158a073", +1203 => x"31528072", +1204 => x"25a13877", +1205 => x"70742b57", +1206 => x"70732a78", +1207 => x"752b0756", +1208 => x"51747653", +1209 => x"5170740c", +1210 => x"7184150c", +1211 => x"73800c89", +1212 => x"3d0d0480", +1213 => x"56777230", +1214 => x"2b557476", +1215 => x"5351e639", +1216 => x"e43d0d6e", +1217 => x"a13d08a3", +1218 => x"3d085957", +1219 => x"5f80764d", +1220 => x"774ea33d", +1221 => x"08a53d08", +1222 => x"574b754c", +1223 => x"5e7d6c24", +1224 => x"86fb3880", +1225 => x"6a24878f", +1226 => x"38696b58", +1227 => x"566b6d5d", +1228 => x"467b4775", +1229 => x"44764564", +1230 => x"6468685c", +1231 => x"5c565674", +1232 => x"81e73878", +1233 => x"762782c7", +1234 => x"387581ff", +1235 => x"26832b55", +1236 => x"83ffff76", +1237 => x"278c3890", +1238 => x"55fe800a", +1239 => x"76278338", +1240 => x"98557575", +1241 => x"2a80e080", +1242 => x"057033a0", +1243 => x"77317131", +1244 => x"57555774", +1245 => x"802e9538", +1246 => x"75752ba0", +1247 => x"76317a77", +1248 => x"2b7c722a", +1249 => x"077c782b", +1250 => x"5d5b5956", +1251 => x"75902a76", +1252 => x"83ffff06", +1253 => x"71547a53", +1254 => x"59578880", +1255 => x"3f80085b", +1256 => x"87ea3f80", +1257 => x"08800879", +1258 => x"297c902b", +1259 => x"7c902a07", +1260 => x"56565973", +1261 => x"75279438", +1262 => x"8008ff05", +1263 => x"76155559", +1264 => x"75742687", +1265 => x"38747426", +1266 => x"87b93876", +1267 => x"52737531", +1268 => x"5187c93f", +1269 => x"80085587", +1270 => x"b33f8008", +1271 => x"80087929", +1272 => x"7b83ffff", +1273 => x"0677902b", +1274 => x"07565957", +1275 => x"73782796", +1276 => x"388008ff", +1277 => x"05761555", +1278 => x"57757426", +1279 => x"89387774", +1280 => x"26777131", +1281 => x"58567890", +1282 => x"2b770758", +1283 => x"805b7a40", +1284 => x"77417f61", +1285 => x"56547d80", +1286 => x"d938737f", +1287 => x"0c747f84", +1288 => x"050c7e80", +1289 => x"0c9e3d0d", +1290 => x"0480705c", +1291 => x"58747926", +1292 => x"dd387481", +1293 => x"ff26832b", +1294 => x"577483ff", +1295 => x"ff2682a5", +1296 => x"3874772a", +1297 => x"80e08005", +1298 => x"7033a079", +1299 => x"31713159", +1300 => x"5c5d7682", +1301 => x"b3387654", +1302 => x"74792783", +1303 => x"38815479", +1304 => x"76277407", +1305 => x"59815878", +1306 => x"ffa23876", +1307 => x"58805bff", +1308 => x"9d397352", +1309 => x"74539e3d", +1310 => x"e80551fc", +1311 => x"8e3f6769", +1312 => x"567f0c74", +1313 => x"7f84050c", +1314 => x"7e800c9e", +1315 => x"3d0d0475", +1316 => x"802e81c4", +1317 => x"387581ff", +1318 => x"26832b55", +1319 => x"83ffff76", +1320 => x"278c3890", +1321 => x"55fe800a", +1322 => x"76278338", +1323 => x"98557575", +1324 => x"2a80e080", +1325 => x"057033a0", +1326 => x"77317131", +1327 => x"575e5474", +1328 => x"84913878", +1329 => x"76315481", +1330 => x"76902a77", +1331 => x"83ffff06", +1332 => x"5f5d5b7b", +1333 => x"52735185", +1334 => x"c33f8008", +1335 => x"5785ad3f", +1336 => x"80088008", +1337 => x"7e297890", +1338 => x"2b7c902a", +1339 => x"07565659", +1340 => x"73752794", +1341 => x"388008ff", +1342 => x"05761555", +1343 => x"59757426", +1344 => x"87387474", +1345 => x"2684f338", +1346 => x"7b527375", +1347 => x"3151858c", +1348 => x"3f800855", +1349 => x"84f63f80", +1350 => x"0880087e", +1351 => x"297b83ff", +1352 => x"ff067790", +1353 => x"2b075659", +1354 => x"57737827", +1355 => x"96388008", +1356 => x"ff057615", +1357 => x"55577574", +1358 => x"26893877", +1359 => x"74267771", +1360 => x"31585a78", +1361 => x"902b7707", +1362 => x"7b41417f", +1363 => x"6156547d", +1364 => x"802efdc6", +1365 => x"38fe9b39", +1366 => x"75528151", +1367 => x"84ae3f80", +1368 => x"0856feb1", +1369 => x"399057fe", +1370 => x"800a7527", +1371 => x"fdd33898", +1372 => x"75712a80", +1373 => x"e0800570", +1374 => x"33a07331", +1375 => x"7131535d", +1376 => x"5e577680", +1377 => x"2efdcf38", +1378 => x"a0773175", +1379 => x"782b7772", +1380 => x"2a077779", +1381 => x"2b7b7a2b", +1382 => x"7d742a07", +1383 => x"7d7b2b73", +1384 => x"902a7483", +1385 => x"ffff0671", +1386 => x"597f772a", +1387 => x"585e5c41", +1388 => x"5f585c54", +1389 => x"83e63f80", +1390 => x"085483d0", +1391 => x"3f800880", +1392 => x"08792975", +1393 => x"902b7e90", +1394 => x"2a075656", +1395 => x"59737527", +1396 => x"99388008", +1397 => x"ff057b15", +1398 => x"55597a74", +1399 => x"268c3873", +1400 => x"75278738", +1401 => x"ff197b15", +1402 => x"55597652", +1403 => x"73753151", +1404 => x"83aa3f80", +1405 => x"08558394", +1406 => x"3f800880", +1407 => x"0879297d", +1408 => x"83ffff06", +1409 => x"77902b07", +1410 => x"56595773", +1411 => x"78279938", +1412 => x"8008ff05", +1413 => x"7b155557", +1414 => x"7a74268c", +1415 => x"38737827", +1416 => x"8738ff17", +1417 => x"7b155557", +1418 => x"73783179", +1419 => x"902b7807", +1420 => x"7083ffff", +1421 => x"0671902a", +1422 => x"7983ffff", +1423 => x"067a902a", +1424 => x"73722973", +1425 => x"73297473", +1426 => x"29767429", +1427 => x"73902a05", +1428 => x"72055755", +1429 => x"435f5b58", +1430 => x"5a57595a", +1431 => x"747c2786", +1432 => x"38848080", +1433 => x"17577490", +1434 => x"2a177983", +1435 => x"ffff0676", +1436 => x"84808029", +1437 => x"05575776", +1438 => x"7a269a38", +1439 => x"767a3270", +1440 => x"30707207", +1441 => x"8025565a", +1442 => x"5b7c7627", +1443 => x"fafe3873", +1444 => x"802efaf8", +1445 => x"38ff1858", +1446 => x"805bfaf2", +1447 => x"39ff7653", +1448 => x"77549f3d", +1449 => x"e805525e", +1450 => x"f7e13f67", +1451 => x"69574c75", +1452 => x"4d698025", +1453 => x"f8f3387d", +1454 => x"096a6c5c", +1455 => x"537a549f", +1456 => x"3de80552", +1457 => x"5ef7c43f", +1458 => x"6769714c", +1459 => x"704d5856", +1460 => x"f8db39a0", +1461 => x"75317676", +1462 => x"2b7a772b", +1463 => x"7c732a07", +1464 => x"7c782b72", +1465 => x"902a7383", +1466 => x"ffff0671", +1467 => x"587e762a", +1468 => x"5742405d", +1469 => x"5d575881", +1470 => x"a33f8008", +1471 => x"57818d3f", +1472 => x"80088008", +1473 => x"7e297890", +1474 => x"2b7d902a", +1475 => x"07565659", +1476 => x"73752799", +1477 => x"388008ff", +1478 => x"05761555", +1479 => x"59757426", +1480 => x"8c387375", +1481 => x"278738ff", +1482 => x"19761555", +1483 => x"597b5273", +1484 => x"75315180", +1485 => x"e73f8008", +1486 => x"5580d13f", +1487 => x"80088008", +1488 => x"7e297c83", +1489 => x"ffff0670", +1490 => x"78902b07", +1491 => x"51565858", +1492 => x"73772799", +1493 => x"388008ff", +1494 => x"05761555", +1495 => x"58757426", +1496 => x"8c387377", +1497 => x"278738ff", +1498 => x"18761555", +1499 => x"5878902b", +1500 => x"78077478", +1501 => x"31555bfa", +1502 => x"da39ff19", +1503 => x"76155559", +1504 => x"fb8639ff", +1505 => x"19761555", +1506 => x"59f8c039", +1507 => x"fe3d0d80", +1508 => x"53755274", +1509 => x"5181913f", +1510 => x"843d0d04", +1511 => x"fe3d0d81", +1512 => x"53755274", +1513 => x"5181813f", +1514 => x"843d0d04", +1515 => x"fb3d0d77", +1516 => x"79555580", +1517 => x"56757524", +1518 => x"ab388074", +1519 => x"249d3880", +1520 => x"53735274", +1521 => x"5180e13f", +1522 => x"80085475", +1523 => x"802e8538", +1524 => x"80083054", +1525 => x"73800c87", +1526 => x"3d0d0473", +1527 => x"30768132", +1528 => x"5754dc39", +1529 => x"74305581", +1530 => x"56738025", +1531 => x"d238ec39", +1532 => x"fa3d0d78", +1533 => x"7a575580", +1534 => x"57767524", +1535 => x"a438759f", +1536 => x"2c548153", +1537 => x"75743274", +1538 => x"31527451", +1539 => x"9b3f8008", +1540 => x"5476802e", +1541 => x"85388008", +1542 => x"30547380", +1543 => x"0c883d0d", +1544 => x"04743055", +1545 => x"8157d739", +1546 => x"fc3d0d76", +1547 => x"78535481", +1548 => x"53807473", +1549 => x"26525572", +1550 => x"802e9838", +1551 => x"70802eab", +1552 => x"38807224", +1553 => x"a6387110", +1554 => x"73107572", +1555 => x"26535452", +1556 => x"72ea3873", +1557 => x"51788338", +1558 => x"74517080", +1559 => x"0c863d0d", +1560 => x"04720a10", +1561 => x"0a720a10", +1562 => x"0a535372", +1563 => x"802ee438", +1564 => x"717426ed", +1565 => x"38737231", +1566 => x"75740774", +1567 => x"0a100a74", +1568 => x"0a100a55", +1569 => x"555654e3", +1570 => x"39ff3d0d", +1571 => x"735280ea", +1572 => x"fc085196", +1573 => x"3f833d0d", +1574 => x"04ff3d0d", +1575 => x"735280ea", +1576 => x"fc085190", +1577 => x"cc3f833d", +1578 => x"0d04f43d", +1579 => x"0d7e608b", +1580 => x"1170f806", +1581 => x"5b55555d", +1582 => x"72962683", +1583 => x"38905880", +1584 => x"78247479", +1585 => x"26075580", +1586 => x"5474742e", +1587 => x"09810680", +1588 => x"ca387c51", +1589 => x"8d9e3f77", +1590 => x"83f72680", +1591 => x"c5387783", +1592 => x"2a701010", +1593 => x"1080e2f4", +1594 => x"058c1108", +1595 => x"58585475", +1596 => x"772e81f0", +1597 => x"38841608", +1598 => x"fc068c17", +1599 => x"08881808", +1600 => x"718c120c", +1601 => x"88120c5b", +1602 => x"76058411", +1603 => x"08810784", +1604 => x"120c537c", +1605 => x"518cde3f", +1606 => x"88165473", +1607 => x"800c8e3d", +1608 => x"0d047789", +1609 => x"2a78832a", +1610 => x"58547380", +1611 => x"2ebf3877", +1612 => x"862ab805", +1613 => x"57847427", +1614 => x"b43880db", +1615 => x"14579474", +1616 => x"27ab3877", +1617 => x"8c2a80ee", +1618 => x"055780d4", +1619 => x"74279e38", +1620 => x"778f2a80", +1621 => x"f7055782", +1622 => x"d4742791", +1623 => x"3877922a", +1624 => x"80fc0557", +1625 => x"8ad47427", +1626 => x"843880fe", +1627 => x"57761010", +1628 => x"1080e2f4", +1629 => x"058c1108", +1630 => x"56537473", +1631 => x"2ea33884", +1632 => x"1508fc06", +1633 => x"70793155", +1634 => x"56738f24", +1635 => x"88e43873", +1636 => x"802588e6", +1637 => x"388c1508", +1638 => x"5574732e", +1639 => x"098106df", +1640 => x"38811759", +1641 => x"80e38408", +1642 => x"567580e2", +1643 => x"fc2e82cc", +1644 => x"38841608", +1645 => x"fc067079", +1646 => x"31555573", +1647 => x"8f24bb38", +1648 => x"80e2fc0b", +1649 => x"80e3880c", +1650 => x"80e2fc0b", +1651 => x"80e3840c", +1652 => x"80742480", +1653 => x"db387416", +1654 => x"84110881", +1655 => x"0784120c", +1656 => x"53feb039", +1657 => x"88168c11", +1658 => x"08575975", +1659 => x"792e0981", +1660 => x"06fe8238", +1661 => x"821459ff", +1662 => x"ab397716", +1663 => x"78810784", +1664 => x"180c7080", +1665 => x"e3880c70", +1666 => x"80e3840c", +1667 => x"80e2fc0b", +1668 => x"8c120c8c", +1669 => x"11088812", +1670 => x"0c748107", +1671 => x"84120c74", +1672 => x"0574710c", +1673 => x"5b7c518a", +1674 => x"cc3f8816", +1675 => x"54fdec39", +1676 => x"83ff7527", +1677 => x"83913874", +1678 => x"892a7583", +1679 => x"2a545473", +1680 => x"802ebf38", +1681 => x"74862ab8", +1682 => x"05538474", +1683 => x"27b43880", +1684 => x"db145394", +1685 => x"7427ab38", +1686 => x"748c2a80", +1687 => x"ee055380", +1688 => x"d474279e", +1689 => x"38748f2a", +1690 => x"80f70553", +1691 => x"82d47427", +1692 => x"91387492", +1693 => x"2a80fc05", +1694 => x"538ad474", +1695 => x"27843880", +1696 => x"fe537210", +1697 => x"101080e2", +1698 => x"f4058811", +1699 => x"08555773", +1700 => x"772e868b", +1701 => x"38841408", +1702 => x"fc065b74", +1703 => x"7b278d38", +1704 => x"88140854", +1705 => x"73772e09", +1706 => x"8106ea38", +1707 => x"8c140880", +1708 => x"e2f40b84", +1709 => x"0508718c", +1710 => x"190c7588", +1711 => x"190c7788", +1712 => x"130c5c57", +1713 => x"758c150c", +1714 => x"78538079", +1715 => x"24839838", +1716 => x"72822c81", +1717 => x"712b5656", +1718 => x"747b2680", +1719 => x"ca387a75", +1720 => x"06577682", +1721 => x"a33878fc", +1722 => x"06840559", +1723 => x"7410707c", +1724 => x"06555573", +1725 => x"82923884", +1726 => x"1959f139", +1727 => x"80e2f40b", +1728 => x"84050879", +1729 => x"545b7880", +1730 => x"25c63882", +1731 => x"da397409", +1732 => x"7b067080", +1733 => x"e2f40b84", +1734 => x"050c5b74", +1735 => x"1055747b", +1736 => x"26853874", +1737 => x"85bc3880", +1738 => x"e2f40b88", +1739 => x"05087084", +1740 => x"1208fc06", +1741 => x"707b317b", +1742 => x"72268f72", +1743 => x"25075d57", +1744 => x"5c5c5578", +1745 => x"802e80d9", +1746 => x"38791580", +1747 => x"e2ec0819", +1748 => x"90115954", +1749 => x"5680e2e8", +1750 => x"08ff2e88", +1751 => x"38a08f13", +1752 => x"e0800657", +1753 => x"76527c51", +1754 => x"888c3f80", +1755 => x"08548008", +1756 => x"ff2e9038", +1757 => x"80087627", +1758 => x"82a73874", +1759 => x"80e2f42e", +1760 => x"829f3880", +1761 => x"e2f40b88", +1762 => x"05085584", +1763 => x"1508fc06", +1764 => x"70793179", +1765 => x"72268f72", +1766 => x"25075d55", +1767 => x"5a7a83f2", +1768 => x"38778107", +1769 => x"84160c77", +1770 => x"157080e2", +1771 => x"f40b8805", +1772 => x"0c748107", +1773 => x"84120c56", +1774 => x"7c5187b9", +1775 => x"3f881554", +1776 => x"73800c8e", +1777 => x"3d0d0474", +1778 => x"832a7054", +1779 => x"54807424", +1780 => x"819b3872", +1781 => x"822c8171", +1782 => x"2b80e2f8", +1783 => x"08077080", +1784 => x"e2f40b84", +1785 => x"050c7510", +1786 => x"101080e2", +1787 => x"f4058811", +1788 => x"08718c1b", +1789 => x"0c70881b", +1790 => x"0c798813", +1791 => x"0c57555c", +1792 => x"55758c15", +1793 => x"0cfdc139", +1794 => x"78791010", +1795 => x"1080e2f4", +1796 => x"0570565b", +1797 => x"5c8c1408", +1798 => x"5675742e", +1799 => x"a3388416", +1800 => x"08fc0670", +1801 => x"79315853", +1802 => x"768f2483", +1803 => x"f1387680", +1804 => x"2584af38", +1805 => x"8c160856", +1806 => x"75742e09", +1807 => x"8106df38", +1808 => x"8814811a", +1809 => x"70830655", +1810 => x"5a5472c9", +1811 => x"387b8306", +1812 => x"5675802e", +1813 => x"fdb838ff", +1814 => x"1cf81b5b", +1815 => x"5c881a08", +1816 => x"7a2eea38", +1817 => x"fdb53983", +1818 => x"1953fce4", +1819 => x"39831470", +1820 => x"822c8171", +1821 => x"2b80e2f8", +1822 => x"08077080", +1823 => x"e2f40b84", +1824 => x"050c7610", +1825 => x"101080e2", +1826 => x"f4058811", +1827 => x"08718c1c", +1828 => x"0c70881c", +1829 => x"0c7a8813", +1830 => x"0c58535d", +1831 => x"5653fee1", +1832 => x"3980e2b8", +1833 => x"08175980", +1834 => x"08762e81", +1835 => x"8b3880e2", +1836 => x"e808ff2e", +1837 => x"848e3873", +1838 => x"76311980", +1839 => x"e2b80c73", +1840 => x"87067056", +1841 => x"5372802e", +1842 => x"88388873", +1843 => x"31701555", +1844 => x"5576149f", +1845 => x"ff06a080", +1846 => x"71311670", +1847 => x"547e5351", +1848 => x"5385933f", +1849 => x"80085680", +1850 => x"08ff2e81", +1851 => x"9e3880e2", +1852 => x"b8081370", +1853 => x"80e2b80c", +1854 => x"747580e2", +1855 => x"f40b8805", +1856 => x"0c777631", +1857 => x"15810755", +1858 => x"56597a80", +1859 => x"e2f42e83", +1860 => x"c038798f", +1861 => x"2682ef38", +1862 => x"810b8415", +1863 => x"0c841508", +1864 => x"fc067079", +1865 => x"31797226", +1866 => x"8f722507", +1867 => x"5d555a7a", +1868 => x"802efced", +1869 => x"3880db39", +1870 => x"80089fff", +1871 => x"065574fe", +1872 => x"ed387880", +1873 => x"e2b80c80", +1874 => x"e2f40b88", +1875 => x"05087a18", +1876 => x"81078412", +1877 => x"0c5580e2", +1878 => x"e4087927", +1879 => x"86387880", +1880 => x"e2e40c80", +1881 => x"e2e00879", +1882 => x"27fca038", +1883 => x"7880e2e0", +1884 => x"0c841508", +1885 => x"fc067079", +1886 => x"31797226", +1887 => x"8f722507", +1888 => x"5d555a7a", +1889 => x"802efc99", +1890 => x"38883980", +1891 => x"745753fe", +1892 => x"dd397c51", +1893 => x"83df3f80", +1894 => x"0b800c8e", +1895 => x"3d0d0480", +1896 => x"7324a538", +1897 => x"72822c81", +1898 => x"712b80e2", +1899 => x"f8080770", +1900 => x"80e2f40b", +1901 => x"84050c5c", +1902 => x"5a768c17", +1903 => x"0c738817", +1904 => x"0c758818", +1905 => x"0cf9fd39", +1906 => x"83137082", +1907 => x"2c81712b", +1908 => x"80e2f808", +1909 => x"077080e2", +1910 => x"f40b8405", +1911 => x"0c5d5b53", +1912 => x"d8397a75", +1913 => x"065c7bfc", +1914 => x"9f388419", +1915 => x"75105659", +1916 => x"f139ff17", +1917 => x"810559f7", +1918 => x"ab398c15", +1919 => x"08881608", +1920 => x"718c120c", +1921 => x"88120c59", +1922 => x"75158411", +1923 => x"08810784", +1924 => x"120c587c", +1925 => x"5182de3f", +1926 => x"881554fb", +1927 => x"a3397716", +1928 => x"78810784", +1929 => x"180c8c17", +1930 => x"08881808", +1931 => x"718c120c", +1932 => x"88120c5c", +1933 => x"7080e388", +1934 => x"0c7080e3", +1935 => x"840c80e2", +1936 => x"fc0b8c12", +1937 => x"0c8c1108", +1938 => x"88120c77", +1939 => x"81078412", +1940 => x"0c770577", +1941 => x"710c557c", +1942 => x"51829a3f", +1943 => x"881654f5", +1944 => x"ba397216", +1945 => x"84110881", +1946 => x"0784120c", +1947 => x"588c1608", +1948 => x"88170871", +1949 => x"8c120c88", +1950 => x"120c577c", +1951 => x"5181f63f", +1952 => x"881654f5", +1953 => x"96397284", +1954 => x"150cf41a", +1955 => x"f8067084", +1956 => x"1d088106", +1957 => x"07841d0c", +1958 => x"701c5556", +1959 => x"850b8415", +1960 => x"0c850b88", +1961 => x"150c8f76", +1962 => x"27fdab38", +1963 => x"881b527c", +1964 => x"5184be3f", +1965 => x"80e2f40b", +1966 => x"88050880", +1967 => x"e2b8085a", +1968 => x"55fd9339", +1969 => x"7880e2b8", +1970 => x"0c7380e2", +1971 => x"e80cfbef", +1972 => x"39728415", +1973 => x"0cfcff39", +1974 => x"fb3d0d77", +1975 => x"707a7c58", +1976 => x"5553568f", +1977 => x"752780e6", +1978 => x"38727607", +1979 => x"83065170", +1980 => x"80dc3875", +1981 => x"73525470", +1982 => x"70840552", +1983 => x"08747084", +1984 => x"05560c73", +1985 => x"71708405", +1986 => x"53087170", +1987 => x"8405530c", +1988 => x"71708405", +1989 => x"53087170", +1990 => x"8405530c", +1991 => x"71708405", +1992 => x"53087170", +1993 => x"8405530c", +1994 => x"f0165654", +1995 => x"748f26c7", +1996 => x"38837527", +1997 => x"95387070", +1998 => x"84055208", +1999 => x"74708405", +2000 => x"560cfc15", +2001 => x"55748326", +2002 => x"ed387371", +2003 => x"5452ff15", +2004 => x"5170ff2e", +2005 => x"98387270", +2006 => x"81055433", +2007 => x"72708105", +2008 => x"5434ff11", +2009 => x"5170ff2e", +2010 => x"098106ea", +2011 => x"3875800c", +2012 => x"873d0d04", +2013 => x"0404fd3d", +2014 => x"0d800b81", +2015 => x"c2d40c76", +2016 => x"5187ca3f", +2017 => x"80085380", +2018 => x"08ff2e88", +2019 => x"3872800c", +2020 => x"853d0d04", +2021 => x"81c2d408", +2022 => x"5473802e", +2023 => x"f0387574", +2024 => x"710c5272", +2025 => x"800c853d", +2026 => x"0d04fb3d", +2027 => x"0d777970", +2028 => x"72078306", +2029 => x"53545270", +2030 => x"93387173", +2031 => x"73085456", +2032 => x"54717308", +2033 => x"2e80c438", +2034 => x"73755452", +2035 => x"71337081", +2036 => x"ff065254", +2037 => x"70802e9d", +2038 => x"38723355", +2039 => x"70752e09", +2040 => x"81069538", +2041 => x"81128114", +2042 => x"71337081", +2043 => x"ff065456", +2044 => x"545270e5", +2045 => x"38723355", +2046 => x"7381ff06", +2047 => x"7581ff06", +2048 => x"71713180", +2049 => x"0c555287", +2050 => x"3d0d0471", +2051 => x"09f7fbfd", +2052 => x"ff1306f8", +2053 => x"84828180", +2054 => x"06527197", +2055 => x"38841484", +2056 => x"16710854", +2057 => x"56547175", +2058 => x"082ee038", +2059 => x"73755452", +2060 => x"ff9a3980", +2061 => x"0b800c87", +2062 => x"3d0d04fb", +2063 => x"3d0d7770", +2064 => x"5256feb0", +2065 => x"3f80e2f4", +2066 => x"0b880508", +2067 => x"841108fc", +2068 => x"06707b31", +2069 => x"9fef05e0", +2070 => x"8006e080", +2071 => x"05525555", +2072 => x"a0807524", +2073 => x"94388052", +2074 => x"7551fe8a", +2075 => x"3f80e2fc", +2076 => x"08145372", +2077 => x"80082e8f", +2078 => x"387551fd", +2079 => x"f83f8053", +2080 => x"72800c87", +2081 => x"3d0d0474", +2082 => x"30527551", +2083 => x"fde83f80", +2084 => x"08ff2ea8", +2085 => x"3880e2f4", +2086 => x"0b880508", +2087 => x"74763181", +2088 => x"0784120c", +2089 => x"5380e2b8", +2090 => x"08753180", +2091 => x"e2b80c75", +2092 => x"51fdc23f", +2093 => x"810b800c", +2094 => x"873d0d04", +2095 => x"80527551", +2096 => x"fdb43f80", +2097 => x"e2f40b88", +2098 => x"05088008", +2099 => x"71315454", +2100 => x"8f7325ff", +2101 => x"a4388008", +2102 => x"80e2e808", +2103 => x"3180e2b8", +2104 => x"0c728107", +2105 => x"84150c75", +2106 => x"51fd8a3f", +2107 => x"8053ff90", +2108 => x"39f73d0d", +2109 => x"7b7d545a", +2110 => x"72802e82", +2111 => x"83387951", +2112 => x"fcf23ff8", +2113 => x"13841108", +2114 => x"70fe0670", +2115 => x"13841108", +2116 => x"fc065c57", +2117 => x"58545780", +2118 => x"e2fc0874", +2119 => x"2e82de38", +2120 => x"7784150c", +2121 => x"80738106", +2122 => x"56597479", +2123 => x"2e81d538", +2124 => x"77148411", +2125 => x"08810656", +2126 => x"5374a038", +2127 => x"77165678", +2128 => x"81e63888", +2129 => x"14085574", +2130 => x"80e2fc2e", +2131 => x"82f9388c", +2132 => x"1408708c", +2133 => x"170c7588", +2134 => x"120c5875", +2135 => x"81078418", +2136 => x"0c751776", +2137 => x"710c5478", +2138 => x"81913883", +2139 => x"ff762781", +2140 => x"c8387589", +2141 => x"2a76832a", +2142 => x"54547380", +2143 => x"2ebf3875", +2144 => x"862ab805", +2145 => x"53847427", +2146 => x"b43880db", +2147 => x"14539474", +2148 => x"27ab3875", +2149 => x"8c2a80ee", +2150 => x"055380d4", +2151 => x"74279e38", +2152 => x"758f2a80", +2153 => x"f7055382", +2154 => x"d4742791", +2155 => x"3875922a", +2156 => x"80fc0553", +2157 => x"8ad47427", +2158 => x"843880fe", +2159 => x"53721010", +2160 => x"1080e2f4", +2161 => x"05881108", +2162 => x"55557375", +2163 => x"2e82bf38", +2164 => x"841408fc", +2165 => x"06597579", +2166 => x"278d3888", +2167 => x"14085473", +2168 => x"752e0981", +2169 => x"06ea388c", +2170 => x"1408708c", +2171 => x"190c7488", +2172 => x"190c7788", +2173 => x"120c5576", +2174 => x"8c150c79", +2175 => x"51faf63f", +2176 => x"8b3d0d04", +2177 => x"76087771", +2178 => x"31587605", +2179 => x"88180856", +2180 => x"567480e2", +2181 => x"fc2e80e0", +2182 => x"388c1708", +2183 => x"708c170c", +2184 => x"7588120c", +2185 => x"53fe8939", +2186 => x"8814088c", +2187 => x"1508708c", +2188 => x"130c5988", +2189 => x"190cfea3", +2190 => x"3975832a", +2191 => x"70545480", +2192 => x"74248198", +2193 => x"3872822c", +2194 => x"81712b80", +2195 => x"e2f80807", +2196 => x"80e2f40b", +2197 => x"84050c74", +2198 => x"10101080", +2199 => x"e2f40588", +2200 => x"1108718c", +2201 => x"1b0c7088", +2202 => x"1b0c7988", +2203 => x"130c565a", +2204 => x"55768c15", +2205 => x"0cff8439", +2206 => x"8159fdb4", +2207 => x"39771673", +2208 => x"81065455", +2209 => x"72983876", +2210 => x"08777131", +2211 => x"5875058c", +2212 => x"18088819", +2213 => x"08718c12", +2214 => x"0c88120c", +2215 => x"55557481", +2216 => x"0784180c", +2217 => x"7680e2f4", +2218 => x"0b88050c", +2219 => x"80e2f008", +2220 => x"7526fec7", +2221 => x"3880e2ec", +2222 => x"08527951", +2223 => x"fafd3f79", +2224 => x"51f9b23f", +2225 => x"feba3981", +2226 => x"778c170c", +2227 => x"7788170c", +2228 => x"758c190c", +2229 => x"7588190c", +2230 => x"59fd8039", +2231 => x"83147082", +2232 => x"2c81712b", +2233 => x"80e2f808", +2234 => x"0780e2f4", +2235 => x"0b84050c", +2236 => x"75101010", +2237 => x"80e2f405", +2238 => x"88110871", +2239 => x"8c1c0c70", +2240 => x"881c0c7a", +2241 => x"88130c57", +2242 => x"5b5653fe", +2243 => x"e4398073", +2244 => x"24a33872", +2245 => x"822c8171", +2246 => x"2b80e2f8", +2247 => x"080780e2", +2248 => x"f40b8405", +2249 => x"0c58748c", +2250 => x"180c7388", +2251 => x"180c7688", +2252 => x"160cfdc3", +2253 => x"39831370", +2254 => x"822c8171", +2255 => x"2b80e2f8", +2256 => x"080780e2", +2257 => x"f40b8405", +2258 => x"0c5953da", +2259 => x"39fe3d0d", +2260 => x"81c2d808", +2261 => x"51708a38", +2262 => x"81c2e070", +2263 => x"81c2d80c", +2264 => x"51741152", +2265 => x"ff537187", +2266 => x"fb808026", +2267 => x"88387181", +2268 => x"c2d80c70", +2269 => x"5372800c", +2270 => x"843d0d04", +2271 => x"fd3d0d80", +2272 => x"0b80e2a4", +2273 => x"08545472", +2274 => x"812e9b38", +2275 => x"7381c2dc", +2276 => x"0cc28e3f", +2277 => x"c0ea3f80", +2278 => x"f1fc5281", +2279 => x"51caf83f", +2280 => x"80085189", +2281 => x"a73f7281", +2282 => x"c2dc0cc1", +2283 => x"f43fc0d0", +2284 => x"3f80f1fc", +2285 => x"528151ca", +2286 => x"de3f8008", +2287 => x"51898d3f", +2288 => x"00ff3900", +2289 => x"ff39f53d", +2290 => x"0d7e6081", +2291 => x"c2dc0870", +2292 => x"5b585b5b", +2293 => x"7580c238", +2294 => x"777a25a1", +2295 => x"38771b70", +2296 => x"337081ff", +2297 => x"06585859", +2298 => x"758a2e98", +2299 => x"387681ff", +2300 => x"0651c18c", +2301 => x"3f811858", +2302 => x"797824e1", +2303 => x"3879800c", +2304 => x"8d3d0d04", +2305 => x"8d51c0f8", +2306 => x"3f783370", +2307 => x"81ff0652", +2308 => x"57c0ed3f", +2309 => x"811858e0", +2310 => x"3979557a", +2311 => x"547d5385", +2312 => x"528d3dfc", +2313 => x"0551c09a", +2314 => x"3f800856", +2315 => x"88973f7b", +2316 => x"80080c75", +2317 => x"800c8d3d", +2318 => x"0d04f63d", +2319 => x"0d7d7f81", +2320 => x"c2dc0870", +2321 => x"5a585a5a", +2322 => x"7580c338", +2323 => x"767925b1", +2324 => x"38761a58", +2325 => x"c08a3f80", +2326 => x"08783480", +2327 => x"0b800881", +2328 => x"ff065758", +2329 => x"758a2ea2", +2330 => x"38758d32", +2331 => x"70307080", +2332 => x"257a0751", +2333 => x"515675b8", +2334 => x"38811757", +2335 => x"787724d1", +2336 => x"38765675", +2337 => x"800c8c3d", +2338 => x"0d048158", +2339 => x"dc397855", +2340 => x"79547c53", +2341 => x"84528c3d", +2342 => x"fc0551ff", +2343 => x"bfa43f80", +2344 => x"085687a1", +2345 => x"3f7a8008", +2346 => x"0c75800c", +2347 => x"8c3d0d04", +2348 => x"811756cf", +2349 => x"39f93d0d", +2350 => x"795781c2", +2351 => x"dc08802e", +2352 => x"ad387651", +2353 => x"89b43f7b", +2354 => x"567a5580", +2355 => x"08810554", +2356 => x"76538252", +2357 => x"893dfc05", +2358 => x"51ffbee6", +2359 => x"3f800857", +2360 => x"86e33f77", +2361 => x"80080c76", +2362 => x"800c893d", +2363 => x"0d0486d5", +2364 => x"3f850b80", +2365 => x"080cff0b", +2366 => x"800c893d", +2367 => x"0d04fb3d", +2368 => x"0d81c2dc", +2369 => x"08705654", +2370 => x"73883874", +2371 => x"800c873d", +2372 => x"0d047753", +2373 => x"8352873d", +2374 => x"fc0551ff", +2375 => x"bea43f80", +2376 => x"085486a1", +2377 => x"3f758008", +2378 => x"0c73800c", +2379 => x"873d0d04", +2380 => x"ff0b800c", +2381 => x"04fb3d0d", +2382 => x"775581c2", +2383 => x"dc08802e", +2384 => x"a9387451", +2385 => x"88b43f80", +2386 => x"08810554", +2387 => x"74538752", +2388 => x"873dfc05", +2389 => x"51ffbdea", +2390 => x"3f800855", +2391 => x"85e73f75", +2392 => x"80080c74", +2393 => x"800c873d", +2394 => x"0d0485d9", +2395 => x"3f850b80", +2396 => x"080cff0b", +2397 => x"800c873d", +2398 => x"0d04fa3d", +2399 => x"0d81c2dc", +2400 => x"08802ea3", +2401 => x"387a5579", +2402 => x"54785386", +2403 => x"52883dfc", +2404 => x"0551ffbd", +2405 => x"ad3f8008", +2406 => x"5685aa3f", +2407 => x"7680080c", +2408 => x"75800c88", +2409 => x"3d0d0485", +2410 => x"9c3f9d0b", +2411 => x"80080cff", +2412 => x"0b800c88", +2413 => x"3d0d04f7", +2414 => x"3d0d7b7d", +2415 => x"5b59bc53", +2416 => x"80527951", +2417 => x"86aa3f80", +2418 => x"70565798", +2419 => x"56741970", +2420 => x"3370782b", +2421 => x"79078118", +2422 => x"f81a5a58", +2423 => x"59555884", +2424 => x"7524ea38", +2425 => x"767a2384", +2426 => x"19588070", +2427 => x"56579856", +2428 => x"74187033", +2429 => x"70782b79", +2430 => x"078118f8", +2431 => x"1a5a5859", +2432 => x"51548475", +2433 => x"24ea3876", +2434 => x"821b2388", +2435 => x"19588070", +2436 => x"56579856", +2437 => x"74187033", +2438 => x"70782b79", +2439 => x"078118f8", +2440 => x"1a5a5859", +2441 => x"51548475", +2442 => x"24ea3876", +2443 => x"841b0c8c", +2444 => x"19588070", +2445 => x"56579856", +2446 => x"74187033", +2447 => x"70782b79", +2448 => x"078118f8", +2449 => x"1a5a5859", +2450 => x"51548475", +2451 => x"24ea3876", +2452 => x"881b2390", +2453 => x"19588070", +2454 => x"56579856", +2455 => x"74187033", +2456 => x"70782b79", +2457 => x"078118f8", +2458 => x"1a5a5859", +2459 => x"51548475", +2460 => x"24ea3876", +2461 => x"8a1b2394", +2462 => x"19588070", +2463 => x"56579856", +2464 => x"74187033", +2465 => x"70782b79", +2466 => x"078118f8", +2467 => x"1a5a5859", +2468 => x"51548475", +2469 => x"24ea3876", +2470 => x"8c1b2398", +2471 => x"19588070", +2472 => x"56579856", +2473 => x"74187033", +2474 => x"70782b79", +2475 => x"078118f8", +2476 => x"1a5a5859", +2477 => x"51548475", +2478 => x"24ea3876", +2479 => x"8e1b239c", +2480 => x"19588070", +2481 => x"5657b856", +2482 => x"74187033", +2483 => x"70782b79", +2484 => x"078118f8", +2485 => x"1a5a5859", +2486 => x"5a548875", +2487 => x"24ea3876", +2488 => x"901b0c8b", +2489 => x"3d0d04e9", +2490 => x"3d0d6a81", +2491 => x"c2dc0857", +2492 => x"57759338", +2493 => x"80c0800b", +2494 => x"84180c75", +2495 => x"ac180c75", +2496 => x"800c993d", +2497 => x"0d04893d", +2498 => x"70556a54", +2499 => x"558a5299", +2500 => x"3dffbc05", +2501 => x"51ffbaaa", +2502 => x"3f800877", +2503 => x"53755256", +2504 => x"fd953f82", +2505 => x"a03f7780", +2506 => x"080c7580", +2507 => x"0c993d0d", +2508 => x"04e93d0d", +2509 => x"695781c2", +2510 => x"dc08802e", +2511 => x"b6387651", +2512 => x"84b83f89", +2513 => x"3d705680", +2514 => x"08810555", +2515 => x"7754568f", +2516 => x"52993dff", +2517 => x"bc0551ff", +2518 => x"b9e83f80", +2519 => x"086b5376", +2520 => x"5257fcd3", +2521 => x"3f81de3f", +2522 => x"7780080c", +2523 => x"76800c99", +2524 => x"3d0d0481", +2525 => x"d03f850b", +2526 => x"80080cff", +2527 => x"0b800c99", +2528 => x"3d0d04fc", +2529 => x"3d0d8154", +2530 => x"81c2dc08", +2531 => x"88387380", +2532 => x"0c863d0d", +2533 => x"04765397", +2534 => x"b952863d", +2535 => x"fc0551ff", +2536 => x"b9a03f80", +2537 => x"0854819d", +2538 => x"3f748008", +2539 => x"0c73800c", +2540 => x"863d0d04", +2541 => x"f43d0d7e", +2542 => x"80f2a808", +2543 => x"700881ff", +2544 => x"06913df8", +2545 => x"05545159", +2546 => x"59ffbac5", +2547 => x"3f775780", +2548 => x"5476557b", +2549 => x"7d585276", +2550 => x"538e3df0", +2551 => x"0551d6a0", +2552 => x"3f797b58", +2553 => x"790c7684", +2554 => x"1a0c7880", +2555 => x"0c8e3d0d", +2556 => x"04f43d0d", +2557 => x"7e80f2a8", +2558 => x"08700870", +2559 => x"81ff0692", +2560 => x"3df80555", +2561 => x"515a5759", +2562 => x"ffba863f", +2563 => x"7757800b", +2564 => x"8b3d5954", +2565 => x"76557b7d", +2566 => x"58527653", +2567 => x"7751d5e0", +2568 => x"3f8056bd", +2569 => x"84c07655", +2570 => x"55797b58", +2571 => x"52765377", +2572 => x"51d5cd3f", +2573 => x"7a577880", +2574 => x"2e843876", +2575 => x"790c7680", +2576 => x"0c8e3d0d", +2577 => x"0480eafc", +2578 => x"08800c04", +2579 => x"f73d0d7b", +2580 => x"80eafc08", +2581 => x"82c81108", +2582 => x"5a545a77", +2583 => x"802e80da", +2584 => x"38818818", +2585 => x"841908ff", +2586 => x"0581712b", +2587 => x"59555980", +2588 => x"742480ea", +2589 => x"38807424", +2590 => x"b5387382", +2591 => x"2b781188", +2592 => x"05565681", +2593 => x"80190877", +2594 => x"06537280", +2595 => x"2eb63878", +2596 => x"16700853", +2597 => x"53795174", +2598 => x"0853722d", +2599 => x"ff14fc17", +2600 => x"fc177981", +2601 => x"2c5a5757", +2602 => x"54738025", +2603 => x"d6387708", +2604 => x"5877ffad", +2605 => x"3880eafc", +2606 => x"0853bc13", +2607 => x"08a53879", +2608 => x"51f5fd3f", +2609 => x"74085372", +2610 => x"2dff14fc", +2611 => x"17fc1779", +2612 => x"812c5a57", +2613 => x"57547380", +2614 => x"25ffa838", +2615 => x"d1398057", +2616 => x"ff933972", +2617 => x"51bc1308", +2618 => x"54732d79", +2619 => x"51f5d13f", +2620 => x"fb3d0d77", +2621 => x"7a71028c", +2622 => x"05a30533", +2623 => x"58545456", +2624 => x"83732780", +2625 => x"d4387583", +2626 => x"06517080", +2627 => x"cc387488", +2628 => x"2b750770", +2629 => x"71902b07", +2630 => x"55518f73", +2631 => x"27a73873", +2632 => x"72708405", +2633 => x"540c7174", +2634 => x"71708405", +2635 => x"530c7471", +2636 => x"70840553", +2637 => x"0c747170", +2638 => x"8405530c", +2639 => x"f0145452", +2640 => x"728f26db", +2641 => x"38837327", +2642 => x"90387372", +2643 => x"70840554", +2644 => x"0cfc1353", +2645 => x"728326f2", +2646 => x"38ff1351", +2647 => x"70ff2e93", +2648 => x"38747270", +2649 => x"81055434", +2650 => x"ff115170", +2651 => x"ff2e0981", +2652 => x"06ef3875", +2653 => x"800c873d", +2654 => x"0d04fd3d", +2655 => x"0d757071", +2656 => x"83065355", +2657 => x"5270b438", +2658 => x"71700870", +2659 => x"09f7fbfd", +2660 => x"ff1206f8", +2661 => x"84828180", +2662 => x"06545253", +2663 => x"719b3884", +2664 => x"13700870", +2665 => x"09f7fbfd", +2666 => x"ff1206f8", +2667 => x"84828180", +2668 => x"06545253", +2669 => x"71802ee7", +2670 => x"38725271", +2671 => x"33537280", +2672 => x"2e8a3881", +2673 => x"12703354", +2674 => x"5272f838", +2675 => x"71743180", +2676 => x"0c853d0d", +2677 => x"04ff3d0d", +2678 => x"80f2840b", +2679 => x"fc057008", +2680 => x"525270ff", +2681 => x"2e913870", +2682 => x"2dfc1270", +2683 => x"08525270", +2684 => x"ff2e0981", +2685 => x"06f13883", +2686 => x"3d0d0404", +2687 => x"ffb7a63f", +2688 => x"04000000", +2689 => x"30313233", +2690 => x"34353637", +2691 => x"38390000", +2692 => x"44485259", +2693 => x"53544f4e", +2694 => x"45205052", +2695 => x"4f475241", +2696 => x"4d2c2053", +2697 => x"4f4d4520", +2698 => x"53545249", +2699 => x"4e470000", +2700 => x"44485259", +2701 => x"53544f4e", +2702 => x"45205052", +2703 => x"4f475241", +2704 => x"4d2c2031", +2705 => x"27535420", +2706 => x"53545249", +2707 => x"4e470000", +2708 => x"44687279", +2709 => x"73746f6e", +2710 => x"65204265", +2711 => x"6e63686d", +2712 => x"61726b2c", +2713 => x"20566572", +2714 => x"73696f6e", +2715 => x"20322e31", +2716 => x"20284c61", +2717 => x"6e677561", +2718 => x"67653a20", +2719 => x"43290a00", +2720 => x"50726f67", +2721 => x"72616d20", +2722 => x"636f6d70", +2723 => x"696c6564", +2724 => x"20776974", +2725 => x"68202772", +2726 => x"65676973", +2727 => x"74657227", +2728 => x"20617474", +2729 => x"72696275", +2730 => x"74650a00", +2731 => x"45786563", +2732 => x"7574696f", +2733 => x"6e207374", +2734 => x"61727473", +2735 => x"2c202564", +2736 => x"2072756e", +2737 => x"73207468", +2738 => x"726f7567", +2739 => x"68204468", +2740 => x"72797374", +2741 => x"6f6e650a", +2742 => x"00000000", +2743 => x"44485259", +2744 => x"53544f4e", +2745 => x"45205052", +2746 => x"4f475241", +2747 => x"4d2c2032", +2748 => x"274e4420", +2749 => x"53545249", +2750 => x"4e470000", +2751 => x"45786563", +2752 => x"7574696f", +2753 => x"6e20656e", +2754 => x"64730a00", +2755 => x"46696e61", +2756 => x"6c207661", +2757 => x"6c756573", +2758 => x"206f6620", +2759 => x"74686520", +2760 => x"76617269", +2761 => x"61626c65", +2762 => x"73207573", +2763 => x"65642069", +2764 => x"6e207468", +2765 => x"65206265", +2766 => x"6e63686d", +2767 => x"61726b3a", +2768 => x"0a000000", +2769 => x"496e745f", +2770 => x"476c6f62", +2771 => x"3a202020", +2772 => x"20202020", +2773 => x"20202020", +2774 => x"2025640a", +2775 => x"00000000", +2776 => x"20202020", +2777 => x"20202020", +2778 => x"73686f75", +2779 => x"6c642062", +2780 => x"653a2020", +2781 => x"2025640a", +2782 => x"00000000", +2783 => x"426f6f6c", +2784 => x"5f476c6f", +2785 => x"623a2020", +2786 => x"20202020", +2787 => x"20202020", +2788 => x"2025640a", +2789 => x"00000000", +2790 => x"43685f31", +2791 => x"5f476c6f", +2792 => x"623a2020", +2793 => x"20202020", +2794 => x"20202020", +2795 => x"2025630a", +2796 => x"00000000", +2797 => x"20202020", +2798 => x"20202020", +2799 => x"73686f75", +2800 => x"6c642062", +2801 => x"653a2020", +2802 => x"2025630a", +2803 => x"00000000", +2804 => x"43685f32", +2805 => x"5f476c6f", +2806 => x"623a2020", +2807 => x"20202020", +2808 => x"20202020", +2809 => x"2025630a", +2810 => x"00000000", +2811 => x"4172725f", +2812 => x"315f476c", +2813 => x"6f625b38", +2814 => x"5d3a2020", +2815 => x"20202020", +2816 => x"2025640a", +2817 => x"00000000", +2818 => x"4172725f", +2819 => x"325f476c", +2820 => x"6f625b38", +2821 => x"5d5b375d", +2822 => x"3a202020", +2823 => x"2025640a", +2824 => x"00000000", +2825 => x"20202020", +2826 => x"20202020", +2827 => x"73686f75", +2828 => x"6c642062", +2829 => x"653a2020", +2830 => x"204e756d", +2831 => x"6265725f", +2832 => x"4f665f52", +2833 => x"756e7320", +2834 => x"2b203130", +2835 => x"0a000000", +2836 => x"5074725f", +2837 => x"476c6f62", +2838 => x"2d3e0a00", +2839 => x"20205074", +2840 => x"725f436f", +2841 => x"6d703a20", +2842 => x"20202020", +2843 => x"20202020", +2844 => x"2025640a", +2845 => x"00000000", +2846 => x"20202020", +2847 => x"20202020", +2848 => x"73686f75", +2849 => x"6c642062", +2850 => x"653a2020", +2851 => x"2028696d", +2852 => x"706c656d", +2853 => x"656e7461", +2854 => x"74696f6e", +2855 => x"2d646570", +2856 => x"656e6465", +2857 => x"6e74290a", +2858 => x"00000000", +2859 => x"20204469", +2860 => x"7363723a", +2861 => x"20202020", +2862 => x"20202020", +2863 => x"20202020", +2864 => x"2025640a", +2865 => x"00000000", +2866 => x"2020456e", +2867 => x"756d5f43", +2868 => x"6f6d703a", +2869 => x"20202020", +2870 => x"20202020", +2871 => x"2025640a", +2872 => x"00000000", +2873 => x"2020496e", +2874 => x"745f436f", +2875 => x"6d703a20", +2876 => x"20202020", +2877 => x"20202020", +2878 => x"2025640a", +2879 => x"00000000", +2880 => x"20205374", +2881 => x"725f436f", +2882 => x"6d703a20", +2883 => x"20202020", +2884 => x"20202020", +2885 => x"2025730a", +2886 => x"00000000", +2887 => x"20202020", +2888 => x"20202020", +2889 => x"73686f75", +2890 => x"6c642062", +2891 => x"653a2020", +2892 => x"20444852", +2893 => x"5953544f", +2894 => x"4e452050", +2895 => x"524f4752", +2896 => x"414d2c20", +2897 => x"534f4d45", +2898 => x"20535452", +2899 => x"494e470a", +2900 => x"00000000", +2901 => x"4e657874", +2902 => x"5f507472", +2903 => x"5f476c6f", +2904 => x"622d3e0a", +2905 => x"00000000", +2906 => x"20202020", +2907 => x"20202020", +2908 => x"73686f75", +2909 => x"6c642062", +2910 => x"653a2020", +2911 => x"2028696d", +2912 => x"706c656d", +2913 => x"656e7461", +2914 => x"74696f6e", +2915 => x"2d646570", +2916 => x"656e6465", +2917 => x"6e74292c", +2918 => x"2073616d", +2919 => x"65206173", +2920 => x"2061626f", +2921 => x"76650a00", +2922 => x"496e745f", +2923 => x"315f4c6f", +2924 => x"633a2020", +2925 => x"20202020", +2926 => x"20202020", +2927 => x"2025640a", +2928 => x"00000000", +2929 => x"496e745f", +2930 => x"325f4c6f", +2931 => x"633a2020", +2932 => x"20202020", +2933 => x"20202020", +2934 => x"2025640a", +2935 => x"00000000", +2936 => x"496e745f", +2937 => x"335f4c6f", +2938 => x"633a2020", +2939 => x"20202020", +2940 => x"20202020", +2941 => x"2025640a", +2942 => x"00000000", +2943 => x"456e756d", +2944 => x"5f4c6f63", +2945 => x"3a202020", +2946 => x"20202020", +2947 => x"20202020", +2948 => x"2025640a", +2949 => x"00000000", +2950 => x"5374725f", +2951 => x"315f4c6f", +2952 => x"633a2020", +2953 => x"20202020", +2954 => x"20202020", +2955 => x"2025730a", +2956 => x"00000000", +2957 => x"20202020", +2958 => x"20202020", +2959 => x"73686f75", +2960 => x"6c642062", +2961 => x"653a2020", +2962 => x"20444852", +2963 => x"5953544f", +2964 => x"4e452050", +2965 => x"524f4752", +2966 => x"414d2c20", +2967 => x"31275354", +2968 => x"20535452", +2969 => x"494e470a", +2970 => x"00000000", +2971 => x"5374725f", +2972 => x"325f4c6f", +2973 => x"633a2020", +2974 => x"20202020", +2975 => x"20202020", +2976 => x"2025730a", +2977 => x"00000000", +2978 => x"20202020", +2979 => x"20202020", +2980 => x"73686f75", +2981 => x"6c642062", +2982 => x"653a2020", +2983 => x"20444852", +2984 => x"5953544f", +2985 => x"4e452050", +2986 => x"524f4752", +2987 => x"414d2c20", +2988 => x"32274e44", +2989 => x"20535452", +2990 => x"494e470a", +2991 => x"00000000", +2992 => x"55736572", +2993 => x"2074696d", +2994 => x"653a2025", +2995 => x"640a0000", +2996 => x"4d696372", +2997 => x"6f736563", +2998 => x"6f6e6473", +2999 => x"20666f72", +3000 => x"206f6e65", +3001 => x"2072756e", +3002 => x"20746872", +3003 => x"6f756768", +3004 => x"20446872", +3005 => x"7973746f", +3006 => x"6e653a20", +3007 => x"00000000", +3008 => x"2564200a", +3009 => x"00000000", +3010 => x"44687279", +3011 => x"73746f6e", +3012 => x"65732070", +3013 => x"65722053", +3014 => x"65636f6e", +3015 => x"643a2020", +3016 => x"20202020", +3017 => x"20202020", +3018 => x"20202020", +3019 => x"20202020", +3020 => x"20202020", +3021 => x"00000000", +3022 => x"56415820", +3023 => x"4d495053", +3024 => x"20726174", +3025 => x"696e6720", +3026 => x"2a203130", +3027 => x"3030203d", +3028 => x"20256420", +3029 => x"0a000000", +3030 => x"50726f67", +3031 => x"72616d20", +3032 => x"636f6d70", +3033 => x"696c6564", +3034 => x"20776974", +3035 => x"686f7574", +3036 => x"20277265", +3037 => x"67697374", +3038 => x"65722720", +3039 => x"61747472", +3040 => x"69627574", +3041 => x"650a0000", +3042 => x"4d656173", +3043 => x"75726564", +3044 => x"2074696d", +3045 => x"6520746f", +3046 => x"6f20736d", +3047 => x"616c6c20", +3048 => x"746f206f", +3049 => x"62746169", +3050 => x"6e206d65", +3051 => x"616e696e", +3052 => x"6766756c", +3053 => x"20726573", +3054 => x"756c7473", +3055 => x"0a000000", +3056 => x"506c6561", +3057 => x"73652069", +3058 => x"6e637265", +3059 => x"61736520", +3060 => x"6e756d62", +3061 => x"6572206f", +3062 => x"66207275", +3063 => x"6e730a00", +3064 => x"44485259", +3065 => x"53544f4e", +3066 => x"45205052", +3067 => x"4f475241", +3068 => x"4d2c2033", +3069 => x"27524420", +3070 => x"53545249", +3071 => x"4e470000", +3072 => x"00010202", +3073 => x"03030303", +3074 => x"04040404", +3075 => x"04040404", +3076 => x"05050505", +3077 => x"05050505", +3078 => x"05050505", +3079 => x"05050505", +3080 => x"06060606", +3081 => x"06060606", +3082 => x"06060606", +3083 => x"06060606", +3084 => x"06060606", +3085 => x"06060606", +3086 => x"06060606", +3087 => x"06060606", +3088 => x"07070707", +3089 => x"07070707", +3090 => x"07070707", +3091 => x"07070707", +3092 => x"07070707", +3093 => x"07070707", +3094 => x"07070707", +3095 => x"07070707", +3096 => x"07070707", +3097 => x"07070707", +3098 => x"07070707", +3099 => x"07070707", +3100 => x"07070707", +3101 => x"07070707", +3102 => x"07070707", +3103 => x"07070707", +3104 => x"08080808", +3105 => x"08080808", +3106 => x"08080808", +3107 => x"08080808", +3108 => x"08080808", +3109 => x"08080808", +3110 => x"08080808", +3111 => x"08080808", +3112 => x"08080808", +3113 => x"08080808", +3114 => x"08080808", +3115 => x"08080808", +3116 => x"08080808", +3117 => x"08080808", +3118 => x"08080808", +3119 => x"08080808", +3120 => x"08080808", +3121 => x"08080808", +3122 => x"08080808", +3123 => x"08080808", +3124 => x"08080808", +3125 => x"08080808", +3126 => x"08080808", +3127 => x"08080808", +3128 => x"08080808", +3129 => x"08080808", +3130 => x"08080808", +3131 => x"08080808", +3132 => x"08080808", +3133 => x"08080808", +3134 => x"08080808", +3135 => x"08080808", +3136 => x"43000000", +3137 => x"64756d6d", +3138 => x"792e6578", +3139 => x"65000000", +3140 => x"00ffffff", +3141 => x"ff00ffff", +3142 => x"ffff00ff", +3143 => x"ffffff00", +3144 => x"00000000", +3145 => x"00000000", +3146 => x"00000000", +3147 => x"0000390c", +3148 => x"000004d2", -- iterations 0x4d2=1234 +3149 => x"00000000", +3150 => x"00000000", +3151 => x"00000000", +3152 => x"00000000", +3153 => x"00000000", +3154 => x"00000000", +3155 => x"00000000", +3156 => x"00000000", +3157 => x"00000000", +3158 => x"00000000", +3159 => x"00000000", +3160 => x"00000000", +3161 => x"00000000", +3162 => x"ffffffff", +3163 => x"00000000", +3164 => x"00020000", +3165 => x"00000000", +3166 => x"00000000", +3167 => x"00003174", +3168 => x"00003174", +3169 => x"0000317c", +3170 => x"0000317c", +3171 => x"00003184", +3172 => x"00003184", +3173 => x"0000318c", +3174 => x"0000318c", +3175 => x"00003194", +3176 => x"00003194", +3177 => x"0000319c", +3178 => x"0000319c", +3179 => x"000031a4", +3180 => x"000031a4", +3181 => x"000031ac", +3182 => x"000031ac", +3183 => x"000031b4", +3184 => x"000031b4", +3185 => x"000031bc", +3186 => x"000031bc", +3187 => x"000031c4", +3188 => x"000031c4", +3189 => x"000031cc", +3190 => x"000031cc", +3191 => x"000031d4", +3192 => x"000031d4", +3193 => x"000031dc", +3194 => x"000031dc", +3195 => x"000031e4", +3196 => x"000031e4", +3197 => x"000031ec", +3198 => x"000031ec", +3199 => x"000031f4", +3200 => x"000031f4", +3201 => x"000031fc", +3202 => x"000031fc", +3203 => x"00003204", +3204 => x"00003204", +3205 => x"0000320c", +3206 => x"0000320c", +3207 => x"00003214", +3208 => x"00003214", +3209 => x"0000321c", +3210 => x"0000321c", +3211 => x"00003224", +3212 => x"00003224", +3213 => x"0000322c", +3214 => x"0000322c", +3215 => x"00003234", +3216 => x"00003234", +3217 => x"0000323c", +3218 => x"0000323c", +3219 => x"00003244", +3220 => x"00003244", +3221 => x"0000324c", +3222 => x"0000324c", +3223 => x"00003254", +3224 => x"00003254", +3225 => x"0000325c", +3226 => x"0000325c", +3227 => x"00003264", +3228 => x"00003264", +3229 => x"0000326c", +3230 => x"0000326c", +3231 => x"00003274", +3232 => x"00003274", +3233 => x"0000327c", +3234 => x"0000327c", +3235 => x"00003284", +3236 => x"00003284", +3237 => x"0000328c", +3238 => x"0000328c", +3239 => x"00003294", +3240 => x"00003294", +3241 => x"0000329c", +3242 => x"0000329c", +3243 => x"000032a4", +3244 => x"000032a4", +3245 => x"000032ac", +3246 => x"000032ac", +3247 => x"000032b4", +3248 => x"000032b4", +3249 => x"000032bc", +3250 => x"000032bc", +3251 => x"000032c4", +3252 => x"000032c4", +3253 => x"000032cc", +3254 => x"000032cc", +3255 => x"000032d4", +3256 => x"000032d4", +3257 => x"000032dc", +3258 => x"000032dc", +3259 => x"000032e4", +3260 => x"000032e4", +3261 => x"000032ec", +3262 => x"000032ec", +3263 => x"000032f4", +3264 => x"000032f4", +3265 => x"000032fc", +3266 => x"000032fc", +3267 => x"00003304", +3268 => x"00003304", +3269 => x"0000330c", +3270 => x"0000330c", +3271 => x"00003314", +3272 => x"00003314", +3273 => x"0000331c", +3274 => x"0000331c", +3275 => x"00003324", +3276 => x"00003324", +3277 => x"0000332c", +3278 => x"0000332c", +3279 => x"00003334", +3280 => x"00003334", +3281 => x"0000333c", +3282 => x"0000333c", +3283 => x"00003344", +3284 => x"00003344", +3285 => x"0000334c", +3286 => x"0000334c", +3287 => x"00003354", +3288 => x"00003354", +3289 => x"0000335c", +3290 => x"0000335c", +3291 => x"00003364", +3292 => x"00003364", +3293 => x"0000336c", +3294 => x"0000336c", +3295 => x"00003374", +3296 => x"00003374", +3297 => x"0000337c", +3298 => x"0000337c", +3299 => x"00003384", +3300 => x"00003384", +3301 => x"0000338c", +3302 => x"0000338c", +3303 => x"00003394", +3304 => x"00003394", +3305 => x"0000339c", +3306 => x"0000339c", +3307 => x"000033a4", +3308 => x"000033a4", +3309 => x"000033ac", +3310 => x"000033ac", +3311 => x"000033b4", +3312 => x"000033b4", +3313 => x"000033bc", +3314 => x"000033bc", +3315 => x"000033c4", +3316 => x"000033c4", +3317 => x"000033cc", +3318 => x"000033cc", +3319 => x"000033d4", +3320 => x"000033d4", +3321 => x"000033dc", +3322 => x"000033dc", +3323 => x"000033e4", +3324 => x"000033e4", +3325 => x"000033ec", +3326 => x"000033ec", +3327 => x"000033f4", +3328 => x"000033f4", +3329 => x"000033fc", +3330 => x"000033fc", +3331 => x"00003404", +3332 => x"00003404", +3333 => x"0000340c", +3334 => x"0000340c", +3335 => x"00003414", +3336 => x"00003414", +3337 => x"0000341c", +3338 => x"0000341c", +3339 => x"00003424", +3340 => x"00003424", +3341 => x"0000342c", +3342 => x"0000342c", +3343 => x"00003434", +3344 => x"00003434", +3345 => x"0000343c", +3346 => x"0000343c", +3347 => x"00003444", +3348 => x"00003444", +3349 => x"0000344c", +3350 => x"0000344c", +3351 => x"00003454", +3352 => x"00003454", +3353 => x"0000345c", +3354 => x"0000345c", +3355 => x"00003464", +3356 => x"00003464", +3357 => x"0000346c", +3358 => x"0000346c", +3359 => x"00003474", +3360 => x"00003474", +3361 => x"0000347c", +3362 => x"0000347c", +3363 => x"00003484", +3364 => x"00003484", +3365 => x"0000348c", +3366 => x"0000348c", +3367 => x"00003494", +3368 => x"00003494", +3369 => x"0000349c", +3370 => x"0000349c", +3371 => x"000034a4", +3372 => x"000034a4", +3373 => x"000034ac", +3374 => x"000034ac", +3375 => x"000034b4", +3376 => x"000034b4", +3377 => x"000034bc", +3378 => x"000034bc", +3379 => x"000034c4", +3380 => x"000034c4", +3381 => x"000034cc", +3382 => x"000034cc", +3383 => x"000034d4", +3384 => x"000034d4", +3385 => x"000034dc", +3386 => x"000034dc", +3387 => x"000034e4", +3388 => x"000034e4", +3389 => x"000034ec", +3390 => x"000034ec", +3391 => x"000034f4", +3392 => x"000034f4", +3393 => x"000034fc", +3394 => x"000034fc", +3395 => x"00003504", +3396 => x"00003504", +3397 => x"0000350c", +3398 => x"0000350c", +3399 => x"00003514", +3400 => x"00003514", +3401 => x"0000351c", +3402 => x"0000351c", +3403 => x"00003524", +3404 => x"00003524", +3405 => x"0000352c", +3406 => x"0000352c", +3407 => x"00003534", +3408 => x"00003534", +3409 => x"0000353c", +3410 => x"0000353c", +3411 => x"00003544", +3412 => x"00003544", +3413 => x"0000354c", +3414 => x"0000354c", +3415 => x"00003554", +3416 => x"00003554", +3417 => x"0000355c", +3418 => x"0000355c", +3419 => x"00003564", +3420 => x"00003564", +3421 => x"0000356c", +3422 => x"0000356c", +3423 => x"00003580", +3424 => x"00000000", +3425 => x"000037e8", +3426 => x"00003844", +3427 => x"000038a0", +3428 => x"00000000", +3429 => x"00000000", +3430 => x"00000000", +3431 => x"00000000", +3432 => x"00000000", +3433 => x"00000000", +3434 => x"00000000", +3435 => x"00000000", +3436 => x"00000000", +3437 => x"00003100", +3438 => x"00000000", +3439 => x"00000000", +3440 => x"00000000", +3441 => x"00000000", +3442 => x"00000000", +3443 => x"00000000", +3444 => x"00000000", +3445 => x"00000000", +3446 => x"00000000", +3447 => x"00000000", +3448 => x"00000000", +3449 => x"00000000", +3450 => x"00000000", +3451 => x"00000000", +3452 => x"00000000", +3453 => x"00000000", +3454 => x"00000000", +3455 => x"00000000", +3456 => x"00000000", +3457 => x"00000000", +3458 => x"00000000", +3459 => x"00000000", +3460 => x"00000000", +3461 => x"00000000", +3462 => x"00000000", +3463 => x"00000000", +3464 => x"00000000", +3465 => x"00000000", +3466 => x"00000001", +3467 => x"330eabcd", +3468 => x"1234e66d", +3469 => x"deec0005", +3470 => x"000b0000", +3471 => x"00000000", +3472 => x"00000000", +3473 => x"00000000", +3474 => x"00000000", +3475 => x"00000000", +3476 => x"00000000", +3477 => x"00000000", +3478 => x"00000000", +3479 => x"00000000", +3480 => x"00000000", +3481 => x"00000000", +3482 => x"00000000", +3483 => x"00000000", +3484 => x"00000000", +3485 => x"00000000", +3486 => x"00000000", +3487 => x"00000000", +3488 => x"00000000", +3489 => x"00000000", +3490 => x"00000000", +3491 => x"00000000", +3492 => x"00000000", +3493 => x"00000000", +3494 => x"00000000", +3495 => x"00000000", +3496 => x"00000000", +3497 => x"00000000", +3498 => x"00000000", +3499 => x"00000000", +3500 => x"00000000", +3501 => x"00000000", +3502 => x"00000000", +3503 => x"00000000", +3504 => x"00000000", +3505 => x"00000000", +3506 => x"00000000", +3507 => x"00000000", +3508 => x"00000000", +3509 => x"00000000", +3510 => x"00000000", +3511 => x"00000000", +3512 => x"00000000", +3513 => x"00000000", +3514 => x"00000000", +3515 => x"00000000", +3516 => x"00000000", +3517 => x"00000000", +3518 => x"00000000", +3519 => x"00000000", +3520 => x"00000000", +3521 => x"00000000", +3522 => x"00000000", +3523 => x"00000000", +3524 => x"00000000", +3525 => x"00000000", +3526 => x"00000000", +3527 => x"00000000", +3528 => x"00000000", +3529 => x"00000000", +3530 => x"00000000", +3531 => x"00000000", +3532 => x"00000000", +3533 => x"00000000", +3534 => x"00000000", +3535 => x"00000000", +3536 => x"00000000", +3537 => x"00000000", +3538 => x"00000000", +3539 => x"00000000", +3540 => x"00000000", +3541 => x"00000000", +3542 => x"00000000", +3543 => x"00000000", +3544 => x"00000000", +3545 => x"00000000", +3546 => x"00000000", +3547 => x"00000000", +3548 => x"00000000", +3549 => x"00000000", +3550 => x"00000000", +3551 => x"00000000", +3552 => x"00000000", +3553 => x"00000000", +3554 => x"00000000", +3555 => x"00000000", +3556 => x"00000000", +3557 => x"00000000", +3558 => x"00000000", +3559 => x"00000000", +3560 => x"00000000", +3561 => x"00000000", +3562 => x"00000000", +3563 => x"00000000", +3564 => x"00000000", +3565 => x"00000000", +3566 => x"00000000", +3567 => x"00000000", +3568 => x"00000000", +3569 => x"00000000", +3570 => x"00000000", +3571 => x"00000000", +3572 => x"00000000", +3573 => x"00000000", +3574 => x"00000000", +3575 => x"00000000", +3576 => x"00000000", +3577 => x"00000000", +3578 => x"00000000", +3579 => x"00000000", +3580 => x"00000000", +3581 => x"00000000", +3582 => x"00000000", +3583 => x"00000000", +3584 => x"00000000", +3585 => x"00000000", +3586 => x"00000000", +3587 => x"00000000", +3588 => x"00000000", +3589 => x"00000000", +3590 => x"00000000", +3591 => x"00000000", +3592 => x"00000000", +3593 => x"00000000", +3594 => x"00000000", +3595 => x"00000000", +3596 => x"00000000", +3597 => x"00000000", +3598 => x"00000000", +3599 => x"00000000", +3600 => x"00000000", +3601 => x"00000000", +3602 => x"00000000", +3603 => x"00000000", +3604 => x"00000000", +3605 => x"00000000", +3606 => x"00000000", +3607 => x"00000000", +3608 => x"00000000", +3609 => x"00000000", +3610 => x"00000000", +3611 => x"00000000", +3612 => x"00000000", +3613 => x"00000000", +3614 => x"00000000", +3615 => x"00000000", +3616 => x"00000000", +3617 => x"00000000", +3618 => x"00000000", +3619 => x"00000000", +3620 => x"00000000", +3621 => x"00000000", +3622 => x"00000000", +3623 => x"00000000", +3624 => x"00000000", +3625 => x"00000000", +3626 => x"00000000", +3627 => x"00000000", +3628 => x"00000000", +3629 => x"00000000", +3630 => x"00000000", +3631 => x"00000000", +3632 => x"00000000", +3633 => x"00000000", +3634 => x"00000000", +3635 => x"00000000", +3636 => x"00000000", +3637 => x"00000000", +3638 => x"00000000", +3639 => x"00000000", +3640 => x"00000000", +3641 => x"00000000", +3642 => x"00000000", +3643 => x"00000000", +3644 => x"00000000", +3645 => x"00000000", +3646 => x"00000000", +3647 => x"00003104", +3648 => x"ffffffff", +3649 => x"00000000", +3650 => x"ffffffff", +3651 => x"00000000", + others => x"00000000" +); + +begin + +mem_busy<=mem_readEnable; -- we're done on the cycle after we serve the read request + +process (clk, areset) +begin + if areset = '1' then + elsif (clk'event and clk = '1') then + if (mem_writeEnable = '1') then + ram(conv_integer(mem_addr(maxAddrBit downto minAddrBit))) := mem_write; + end if; + mem_read <= ram(conv_integer(mem_addr(maxAddrBit downto minAddrBit))); + end if; +end process; + + + + +end dram_arch; diff --git a/zpu/hdl/zpu4/src/dram_hello.vhd b/zpu/hdl/zpu4/src/dram_hello.vhd new file mode 100644 index 0000000..dc46dbb --- /dev/null +++ b/zpu/hdl/zpu4/src/dram_hello.vhd @@ -0,0 +1,3214 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + + +library work; +use work.zpu_config.all; +use work.zpupkg.all; + +entity dram is +port (clk : in std_logic; + mem_writeEnable : in std_logic; + mem_readEnable : in std_logic; + mem_addr : in std_logic_vector(maxAddrBit downto 0); + mem_write : in std_logic_vector(wordSize-1 downto 0); + mem_read : out std_logic_vector(wordSize-1 downto 0); + mem_busy : out std_logic; + mem_writeMask : in std_logic_vector(wordBytes-1 downto 0)); +end dram; + +architecture dram_arch of dram is + + +type ram_type is array(0 to ((2**(maxAddrBit+1))/4)-1) of std_logic_vector(wordSize-1 downto 0); + +shared variable ram : ram_type := +( +0 => x"0b0b0b0b", +1 => x"80700b0b", +2 => x"80d3900c", +3 => x"3a0b0b80", +4 => x"c8b20400", +5 => x"00000000", +6 => x"00000000", +7 => x"00000000", +8 => x"80088408", +9 => x"88080b0b", +10 => x"80c8fb2d", +11 => x"880c840c", +12 => x"800c0400", +13 => x"00000000", +14 => x"00000000", +15 => x"00000000", +16 => x"71fd0608", +17 => x"72830609", +18 => x"81058205", +19 => x"832b2a83", +20 => x"ffff0652", +21 => x"04000000", +22 => x"00000000", +23 => x"00000000", +24 => x"71fd0608", +25 => x"83ffff73", +26 => x"83060981", +27 => x"05820583", +28 => x"2b2b0906", +29 => x"7383ffff", +30 => x"0b0b0b0b", +31 => x"83a70400", +32 => x"72098105", +33 => x"72057373", +34 => x"09060906", +35 => x"73097306", +36 => x"070a8106", +37 => x"53510400", +38 => x"00000000", +39 => x"00000000", +40 => x"72722473", +41 => x"732e0753", +42 => x"51040000", +43 => x"00000000", +44 => x"00000000", +45 => x"00000000", +46 => x"00000000", +47 => x"00000000", +48 => x"71737109", +49 => x"71068106", +50 => x"30720a10", +51 => x"0a720a10", +52 => x"0a31050a", +53 => x"81065151", +54 => x"53510400", +55 => x"00000000", +56 => x"72722673", +57 => x"732e0753", +58 => x"51040000", +59 => x"00000000", +60 => x"00000000", +61 => x"00000000", +62 => x"00000000", +63 => x"00000000", +64 => x"00000000", +65 => x"00000000", +66 => x"00000000", +67 => x"00000000", +68 => x"00000000", +69 => x"00000000", +70 => x"00000000", +71 => x"00000000", +72 => x"0b0b0b88", +73 => x"c4040000", +74 => x"00000000", +75 => x"00000000", +76 => x"00000000", +77 => x"00000000", +78 => x"00000000", +79 => x"00000000", +80 => x"720a722b", +81 => x"0a535104", +82 => x"00000000", +83 => x"00000000", +84 => x"00000000", +85 => x"00000000", +86 => x"00000000", +87 => x"00000000", +88 => x"72729f06", +89 => x"0981050b", +90 => x"0b0b88a7", +91 => x"05040000", +92 => x"00000000", +93 => x"00000000", +94 => x"00000000", +95 => x"00000000", +96 => x"72722aff", +97 => x"739f062a", +98 => x"0974090a", +99 => x"8106ff05", +100 => x"06075351", +101 => x"04000000", +102 => x"00000000", +103 => x"00000000", +104 => x"71715351", +105 => x"020d0406", +106 => x"73830609", +107 => x"81058205", +108 => x"832b0b2b", +109 => x"0772fc06", +110 => x"0c515104", +111 => x"00000000", +112 => x"72098105", +113 => x"72050970", +114 => x"81050906", +115 => x"0a810653", +116 => x"51040000", +117 => x"00000000", +118 => x"00000000", +119 => x"00000000", +120 => x"72098105", +121 => x"72050970", +122 => x"81050906", +123 => x"0a098106", +124 => x"53510400", +125 => x"00000000", +126 => x"00000000", +127 => x"00000000", +128 => x"71098105", +129 => x"52040000", +130 => x"00000000", +131 => x"00000000", +132 => x"00000000", +133 => x"00000000", +134 => x"00000000", +135 => x"00000000", +136 => x"72720981", +137 => x"05055351", +138 => x"04000000", +139 => x"00000000", +140 => x"00000000", +141 => x"00000000", +142 => x"00000000", +143 => x"00000000", +144 => x"72097206", +145 => x"73730906", +146 => x"07535104", +147 => x"00000000", +148 => x"00000000", +149 => x"00000000", +150 => x"00000000", +151 => x"00000000", +152 => x"71fc0608", +153 => x"72830609", +154 => x"81058305", +155 => x"1010102a", +156 => x"81ff0652", +157 => x"04000000", +158 => x"00000000", +159 => x"00000000", +160 => x"71fc0608", +161 => x"0b0b80d2", +162 => x"fc738306", +163 => x"10100508", +164 => x"060b0b0b", +165 => x"88aa0400", +166 => x"00000000", +167 => x"00000000", +168 => x"80088408", +169 => x"88087575", +170 => x"0b0b0b8d", +171 => x"872d5050", +172 => x"80085688", +173 => x"0c840c80", +174 => x"0c510400", +175 => x"00000000", +176 => x"80088408", +177 => x"88087575", +178 => x"0b0b0b8d", +179 => x"cb2d5050", +180 => x"80085688", +181 => x"0c840c80", +182 => x"0c510400", +183 => x"00000000", +184 => x"72097081", +185 => x"0509060a", +186 => x"8106ff05", +187 => x"70547106", +188 => x"73097274", +189 => x"05ff0506", +190 => x"07515151", +191 => x"04000000", +192 => x"72097081", +193 => x"0509060a", +194 => x"098106ff", +195 => x"05705471", +196 => x"06730972", +197 => x"7405ff05", +198 => x"06075151", +199 => x"51040000", +200 => x"05ff0504", +201 => x"00000000", +202 => x"00000000", +203 => x"00000000", +204 => x"00000000", +205 => x"00000000", +206 => x"00000000", +207 => x"00000000", +208 => x"810b0b0b", +209 => x"80d38c0c", +210 => x"51040000", +211 => x"00000000", +212 => x"00000000", +213 => x"00000000", +214 => x"00000000", +215 => x"00000000", +216 => x"71810552", +217 => x"04000000", +218 => x"00000000", +219 => x"00000000", +220 => x"00000000", +221 => x"00000000", +222 => x"00000000", +223 => x"00000000", +224 => x"00000000", +225 => x"00000000", +226 => x"00000000", +227 => x"00000000", +228 => x"00000000", +229 => x"00000000", +230 => x"00000000", +231 => x"00000000", +232 => x"02840572", +233 => x"10100552", +234 => x"04000000", +235 => x"00000000", +236 => x"00000000", +237 => x"00000000", +238 => x"00000000", +239 => x"00000000", +240 => x"00000000", +241 => x"00000000", +242 => x"00000000", +243 => x"00000000", +244 => x"00000000", +245 => x"00000000", +246 => x"00000000", +247 => x"00000000", +248 => x"717105ff", +249 => x"05715351", +250 => x"020d0400", +251 => x"00000000", +252 => x"00000000", +253 => x"00000000", +254 => x"00000000", +255 => x"00000000", +256 => x"83d93f80", +257 => x"ca953f04", +258 => x"10101010", +259 => x"10101010", +260 => x"10101010", +261 => x"10101010", +262 => x"10101010", +263 => x"10101010", +264 => x"10101010", +265 => x"10101053", +266 => x"51047381", +267 => x"ff067383", +268 => x"06098105", +269 => x"83051010", +270 => x"102b0772", +271 => x"fc060c51", +272 => x"51043c04", +273 => x"72728072", +274 => x"8106ff05", +275 => x"09720605", +276 => x"71105272", +277 => x"0a100a53", +278 => x"72ed3851", +279 => x"51535104", +280 => x"ff3d0d0b", +281 => x"0b80e2f8", +282 => x"08528412", +283 => x"08708106", +284 => x"515170f6", +285 => x"38710881", +286 => x"ff06800c", +287 => x"833d0d04", +288 => x"ff3d0d0b", +289 => x"0b80e2f8", +290 => x"08528412", +291 => x"08700a10", +292 => x"0a708106", +293 => x"51515170", +294 => x"f1387372", +295 => x"0c833d0d", +296 => x"0480d38c", +297 => x"08802ea8", +298 => x"38838080", +299 => x"0b0b0b80", +300 => x"e2f80c82", +301 => x"a0800b0b", +302 => x"0b80e2fc", +303 => x"0c829080", +304 => x"0b80e38c", +305 => x"0c0b0b80", +306 => x"e3800b80", +307 => x"e3900c04", +308 => x"f8808080", +309 => x"a40b0b0b", +310 => x"80e2f80c", +311 => x"f8808082", +312 => x"800b0b0b", +313 => x"80e2fc0c", +314 => x"f8808084", +315 => x"800b80e3", +316 => x"8c0cf880", +317 => x"8080940b", +318 => x"80e3900c", +319 => x"f8808080", +320 => x"9c0b80e3", +321 => x"880cf880", +322 => x"8080a00b", +323 => x"80e3940c", +324 => x"04f23d0d", +325 => x"600b0b80", +326 => x"e2fc0856", +327 => x"5d82750c", +328 => x"8059805a", +329 => x"800b8f3d", +330 => x"71101017", +331 => x"70085957", +332 => x"5d5b8076", +333 => x"81ff067c", +334 => x"832b5658", +335 => x"5276537b", +336 => x"5181fa3f", +337 => x"7d7f7a72", +338 => x"077c7207", +339 => x"71716081", +340 => x"05415f5d", +341 => x"5b595755", +342 => x"7a8724bb", +343 => x"380b0b80", +344 => x"e2fc087b", +345 => x"10101170", +346 => x"08585155", +347 => x"807681ff", +348 => x"067c832b", +349 => x"56585276", +350 => x"537b5181", +351 => x"c03f7d7f", +352 => x"7a72077c", +353 => x"72077171", +354 => x"60810541", +355 => x"5f5d5b59", +356 => x"5755877b", +357 => x"25c73876", +358 => x"7d0c7784", +359 => x"1e0c7c80", +360 => x"0c903d0d", +361 => x"04ff3d0d", +362 => x"80e38433", +363 => x"5170a738", +364 => x"80d39808", +365 => x"70085252", +366 => x"70802e94", +367 => x"38841280", +368 => x"d3980c70", +369 => x"2d80d398", +370 => x"08700852", +371 => x"5270ee38", +372 => x"810b80e3", +373 => x"8434833d", +374 => x"0d040480", +375 => x"3d0d0b0b", +376 => x"80e2f408", +377 => x"802e8e38", +378 => x"0b0b0b0b", +379 => x"800b802e", +380 => x"09810685", +381 => x"38823d0d", +382 => x"040b0b80", +383 => x"e2f4510b", +384 => x"0b0bf3fc", +385 => x"3f823d0d", +386 => x"0404fe3d", +387 => x"0d89530b", +388 => x"0b80d2c8", +389 => x"51838d3f", +390 => x"0b0b80d2", +391 => x"d8518384", +392 => x"3f810a0b", +393 => x"80e3980c", +394 => x"ff0b80e3", +395 => x"9c0cff13", +396 => x"53728025", +397 => x"da387280", +398 => x"0c843d0d", +399 => x"04f93d0d", +400 => x"797b7d7f", +401 => x"56545254", +402 => x"72802ea0", +403 => x"38705771", +404 => x"58a07331", +405 => x"52807225", +406 => x"a1387770", +407 => x"742b5770", +408 => x"732a7875", +409 => x"2b075651", +410 => x"74765351", +411 => x"70740c71", +412 => x"84150c73", +413 => x"800c893d", +414 => x"0d048056", +415 => x"7772302b", +416 => x"55747653", +417 => x"51e639fb", +418 => x"3d0d7779", +419 => x"55558056", +420 => x"757524ab", +421 => x"38807424", +422 => x"9d388053", +423 => x"73527451", +424 => x"80e13f80", +425 => x"08547580", +426 => x"2e853880", +427 => x"08305473", +428 => x"800c873d", +429 => x"0d047330", +430 => x"76813257", +431 => x"54dc3974", +432 => x"30558156", +433 => x"738025d2", +434 => x"38ec39fa", +435 => x"3d0d787a", +436 => x"57558057", +437 => x"767524a4", +438 => x"38759f2c", +439 => x"54815375", +440 => x"74327431", +441 => x"5274519b", +442 => x"3f800854", +443 => x"76802e85", +444 => x"38800830", +445 => x"5473800c", +446 => x"883d0d04", +447 => x"74305581", +448 => x"57d739fc", +449 => x"3d0d7678", +450 => x"53548153", +451 => x"80747326", +452 => x"52557280", +453 => x"2e983870", +454 => x"802eab38", +455 => x"807224a6", +456 => x"38711073", +457 => x"10757226", +458 => x"53545272", +459 => x"ea387351", +460 => x"78833874", +461 => x"5170800c", +462 => x"863d0d04", +463 => x"720a100a", +464 => x"720a100a", +465 => x"53537280", +466 => x"2ee43871", +467 => x"7426ed38", +468 => x"73723175", +469 => x"7407740a", +470 => x"100a740a", +471 => x"100a5555", +472 => x"5654e339", +473 => x"f73d0d7c", +474 => x"70525380", +475 => x"f93f7254", +476 => x"80085580", +477 => x"d2e85681", +478 => x"57800881", +479 => x"055a8b3d", +480 => x"e4115953", +481 => x"8259f413", +482 => x"527b8811", +483 => x"08525381", +484 => x"b03f8008", +485 => x"30708008", +486 => x"079f2c8a", +487 => x"07800c53", +488 => x"8b3d0d04", +489 => x"f63d0d7c", +490 => x"80d39c08", +491 => x"71535553", +492 => x"b53f7255", +493 => x"80085680", +494 => x"d2e85781", +495 => x"58800881", +496 => x"055b8c3d", +497 => x"e4115a53", +498 => x"825af413", +499 => x"52881408", +500 => x"5180ee3f", +501 => x"80083070", +502 => x"8008079f", +503 => x"2c8a0780", +504 => x"0c548c3d", +505 => x"0d04fd3d", +506 => x"0d757071", +507 => x"83065355", +508 => x"5270b438", +509 => x"71700870", +510 => x"09f7fbfd", +511 => x"ff1206f8", +512 => x"84828180", +513 => x"06545253", +514 => x"719b3884", +515 => x"13700870", +516 => x"09f7fbfd", +517 => x"ff1206f8", +518 => x"84828180", +519 => x"06545253", +520 => x"71802ee7", +521 => x"38725271", +522 => x"33537280", +523 => x"2e8a3881", +524 => x"12703354", +525 => x"5272f838", +526 => x"71743180", +527 => x"0c853d0d", +528 => x"04f23d0d", +529 => x"60628811", +530 => x"08705856", +531 => x"5f5a7380", +532 => x"2e818c38", +533 => x"8c1a2270", +534 => x"832a8132", +535 => x"81065658", +536 => x"74863890", +537 => x"1a089138", +538 => x"795190b7", +539 => x"3fff5580", +540 => x"0880ec38", +541 => x"8c1a2258", +542 => x"7d085580", +543 => x"7883ffff", +544 => x"06700a10", +545 => x"0a810641", +546 => x"5c577e77", +547 => x"2e80d738", +548 => x"76903874", +549 => x"08841608", +550 => x"88175758", +551 => x"5676802e", +552 => x"f2387654", +553 => x"88807727", +554 => x"84388880", +555 => x"54735375", +556 => x"529c1a08", +557 => x"51a41a08", +558 => x"58772d80", +559 => x"0b800825", +560 => x"82e03880", +561 => x"08167780", +562 => x"08317f88", +563 => x"05088008", +564 => x"31706188", +565 => x"050c5b58", +566 => x"5678ffb4", +567 => x"38805574", +568 => x"800c903d", +569 => x"0d047a81", +570 => x"32810677", +571 => x"40567580", +572 => x"2e81bd38", +573 => x"76903874", +574 => x"08841608", +575 => x"88175758", +576 => x"5976802e", +577 => x"f238881a", +578 => x"087883ff", +579 => x"ff067089", +580 => x"2a810656", +581 => x"59567380", +582 => x"2e82f838", +583 => x"7577278b", +584 => x"3877872a", +585 => x"81065c7b", +586 => x"82b53876", +587 => x"76278338", +588 => x"76567553", +589 => x"78527908", +590 => x"5185833f", +591 => x"881a0876", +592 => x"31881b0c", +593 => x"7908167a", +594 => x"0c765675", +595 => x"19777731", +596 => x"7f880508", +597 => x"78317061", +598 => x"88050c41", +599 => x"58597e80", +600 => x"2efefa38", +601 => x"8c1a2258", +602 => x"ff8a3978", +603 => x"79547c53", +604 => x"7b525684", +605 => x"c93f881a", +606 => x"08793188", +607 => x"1b0c7908", +608 => x"197a0c7c", +609 => x"76315d7c", +610 => x"8e387951", +611 => x"8ff23f80", +612 => x"08818f38", +613 => x"80085f75", +614 => x"1c777731", +615 => x"7f880508", +616 => x"78317061", +617 => x"88050c5d", +618 => x"585c7a80", +619 => x"2efeae38", +620 => x"76818338", +621 => x"74088416", +622 => x"08881757", +623 => x"585c7680", +624 => x"2ef23876", +625 => x"538a527b", +626 => x"5182d33f", +627 => x"80087c31", +628 => x"81055d80", +629 => x"08843881", +630 => x"175d815f", +631 => x"7c59767d", +632 => x"27833876", +633 => x"59941a08", +634 => x"881b0811", +635 => x"5758807a", +636 => x"085c5490", +637 => x"1a087b27", +638 => x"83388154", +639 => x"75792584", +640 => x"3873ba38", +641 => x"777924fe", +642 => x"e2387753", +643 => x"7b529c1a", +644 => x"0851a41a", +645 => x"0859782d", +646 => x"80085680", +647 => x"088024fe", +648 => x"e2388c1a", +649 => x"2280c007", +650 => x"5e7d8c1b", +651 => x"23ff5574", +652 => x"800c903d", +653 => x"0d047eff", +654 => x"a338ff87", +655 => x"3975537b", +656 => x"527a5182", +657 => x"f93f7908", +658 => x"167a0c79", +659 => x"518eb13f", +660 => x"8008cf38", +661 => x"7c76315d", +662 => x"7cfebc38", +663 => x"feac3990", +664 => x"1a087a08", +665 => x"71317811", +666 => x"70565a57", +667 => x"5280d39c", +668 => x"08518494", +669 => x"3f800880", +670 => x"2effa738", +671 => x"8008901b", +672 => x"0c800816", +673 => x"7a0c7794", +674 => x"1b0c7688", +675 => x"1b0c7656", +676 => x"fd993979", +677 => x"0858901a", +678 => x"08782783", +679 => x"38815475", +680 => x"77278438", +681 => x"73b33894", +682 => x"1a085473", +683 => x"772680d3", +684 => x"38735378", +685 => x"529c1a08", +686 => x"51a41a08", +687 => x"58772d80", +688 => x"08568008", +689 => x"8024fd83", +690 => x"388c1a22", +691 => x"80c0075e", +692 => x"7d8c1b23", +693 => x"ff55fed7", +694 => x"39755378", +695 => x"52775181", +696 => x"dd3f7908", +697 => x"167a0c79", +698 => x"518d953f", +699 => x"8008802e", +700 => x"fcd9388c", +701 => x"1a2280c0", +702 => x"075e7d8c", +703 => x"1b23ff55", +704 => x"fead3976", +705 => x"77547953", +706 => x"78525681", +707 => x"b13f881a", +708 => x"08773188", +709 => x"1b0c7908", +710 => x"177a0cfc", +711 => x"ae39fa3d", +712 => x"0d7a7902", +713 => x"8805a705", +714 => x"33555354", +715 => x"83742780", +716 => x"df387183", +717 => x"06517080", +718 => x"d7387171", +719 => x"57558351", +720 => x"75828029", +721 => x"13ff1252", +722 => x"56708025", +723 => x"f3388374", +724 => x"27bc3874", +725 => x"08763270", +726 => x"09f7fbfd", +727 => x"ff1206f8", +728 => x"84828180", +729 => x"06515170", +730 => x"802e9838", +731 => x"74518052", +732 => x"70335772", +733 => x"772eb938", +734 => x"81118113", +735 => x"53518372", +736 => x"27ee38fc", +737 => x"14841656", +738 => x"54738326", +739 => x"c6387452", +740 => x"ff145170", +741 => x"ff2e9738", +742 => x"71335472", +743 => x"742e9838", +744 => x"8112ff12", +745 => x"525270ff", +746 => x"2e098106", +747 => x"eb388051", +748 => x"70800c88", +749 => x"3d0d0471", +750 => x"800c883d", +751 => x"0d04fa3d", +752 => x"0d787a7c", +753 => x"72727259", +754 => x"57555856", +755 => x"57747727", +756 => x"b2387515", +757 => x"51767127", +758 => x"aa387076", +759 => x"18ff1853", +760 => x"535370ff", +761 => x"2e9638ff", +762 => x"12ff1454", +763 => x"52723372", +764 => x"34ff1151", +765 => x"70ff2e09", +766 => x"8106ec38", +767 => x"76800c88", +768 => x"3d0d048f", +769 => x"762780e6", +770 => x"38747707", +771 => x"83065170", +772 => x"80dc3876", +773 => x"75525370", +774 => x"70840552", +775 => x"08737084", +776 => x"05550c72", +777 => x"71708405", +778 => x"53087170", +779 => x"8405530c", +780 => x"71708405", +781 => x"53087170", +782 => x"8405530c", +783 => x"71708405", +784 => x"53087170", +785 => x"8405530c", +786 => x"f0155553", +787 => x"738f26c7", +788 => x"38837427", +789 => x"95387070", +790 => x"84055208", +791 => x"73708405", +792 => x"550cfc14", +793 => x"54738326", +794 => x"ed387271", +795 => x"5452ff14", +796 => x"5170ff2e", +797 => x"ff863872", +798 => x"70810554", +799 => x"33727081", +800 => x"055434ff", +801 => x"1151ea39", +802 => x"ef3d0d63", +803 => x"6567405d", +804 => x"427b802e", +805 => x"85823861", +806 => x"51a9eb3f", +807 => x"f81c7084", +808 => x"120870fc", +809 => x"0670628b", +810 => x"0570f806", +811 => x"4159455c", +812 => x"5f415796", +813 => x"742782c5", +814 => x"38807b24", +815 => x"7e7c2607", +816 => x"58805477", +817 => x"742e0981", +818 => x"0682ab38", +819 => x"787b2581", +820 => x"fe387817", +821 => x"80dad80b", +822 => x"8805085b", +823 => x"5679762e", +824 => x"84c53884", +825 => x"160870fe", +826 => x"06178411", +827 => x"08810641", +828 => x"55557e82", +829 => x"8d3874fc", +830 => x"06587976", +831 => x"2e84e338", +832 => x"78185f7e", +833 => x"7b2581ff", +834 => x"387c8106", +835 => x"547382c1", +836 => x"38767708", +837 => x"31841108", +838 => x"fc065657", +839 => x"75802e91", +840 => x"3879762e", +841 => x"84f03874", +842 => x"18195877", +843 => x"7b258491", +844 => x"3876802e", +845 => x"829b3878", +846 => x"15567a76", +847 => x"24829238", +848 => x"8c170888", +849 => x"1808718c", +850 => x"120c8812", +851 => x"0c5e7559", +852 => x"881761fc", +853 => x"055b5679", +854 => x"a42685ff", +855 => x"387b7659", +856 => x"55937a27", +857 => x"80c9387b", +858 => x"7084055d", +859 => x"087c5676", +860 => x"0c747084", +861 => x"0556088c", +862 => x"180c9017", +863 => x"589b7a27", +864 => x"ae387470", +865 => x"84055608", +866 => x"780c7470", +867 => x"84055608", +868 => x"94180c98", +869 => x"1758a37a", +870 => x"27953874", +871 => x"70840556", +872 => x"08780c74", +873 => x"70840556", +874 => x"089c180c", +875 => x"a0175874", +876 => x"70840556", +877 => x"08755f78", +878 => x"7084055a", +879 => x"0c777e70", +880 => x"84054008", +881 => x"71708405", +882 => x"530c7e08", +883 => x"710c5d78", +884 => x"7b315675", +885 => x"8f2680c9", +886 => x"38841708", +887 => x"81067907", +888 => x"84180c78", +889 => x"17841108", +890 => x"81078412", +891 => x"0c5b6151", +892 => x"a7953f88", +893 => x"17547380", +894 => x"0c933d0d", +895 => x"04905bfd", +896 => x"b8397756", +897 => x"fe83398c", +898 => x"16088817", +899 => x"08718c12", +900 => x"0c88120c", +901 => x"587e707c", +902 => x"3157598f", +903 => x"7627ffb9", +904 => x"387a1784", +905 => x"18088106", +906 => x"7c078419", +907 => x"0c768107", +908 => x"84120c76", +909 => x"11841108", +910 => x"81078412", +911 => x"0c5b8805", +912 => x"5261518f", +913 => x"de3f6151", +914 => x"a6bd3f88", +915 => x"1754ffa6", +916 => x"397d5261", +917 => x"5197db3f", +918 => x"80085a80", +919 => x"08802e81", +920 => x"ab388008", +921 => x"f8056084", +922 => x"0508fe06", +923 => x"61055855", +924 => x"74772e83", +925 => x"f238fc19", +926 => x"5877a426", +927 => x"81b0387b", +928 => x"80085657", +929 => x"93782780", +930 => x"dc387b70", +931 => x"70840552", +932 => x"08800870", +933 => x"8405800c", +934 => x"0c800871", +935 => x"70840553", +936 => x"085d567b", +937 => x"76708405", +938 => x"580c579b", +939 => x"7827b638", +940 => x"76708405", +941 => x"58087570", +942 => x"8405570c", +943 => x"76708405", +944 => x"58087570", +945 => x"8405570c", +946 => x"a3782799", +947 => x"38767084", +948 => x"05580875", +949 => x"70840557", +950 => x"0c767084", +951 => x"05580875", +952 => x"70840557", +953 => x"0c767084", +954 => x"05580877", +955 => x"5e757084", +956 => x"05570c74", +957 => x"7d708405", +958 => x"5f087170", +959 => x"8405530c", +960 => x"7d08710c", +961 => x"5f7b5261", +962 => x"518e983f", +963 => x"6151a4f7", +964 => x"3f79800c", +965 => x"933d0d04", +966 => x"7d526151", +967 => x"96943f80", +968 => x"08800c93", +969 => x"3d0d0484", +970 => x"160855fb", +971 => x"c9397753", +972 => x"7b528008", +973 => x"51a2a93f", +974 => x"7b526151", +975 => x"8de53fcc", +976 => x"398c1608", +977 => x"88170871", +978 => x"8c120c88", +979 => x"120c5d8c", +980 => x"17088818", +981 => x"08718c12", +982 => x"0c88120c", +983 => x"597759fb", +984 => x"ef397818", +985 => x"901c4055", +986 => x"7e7524fb", +987 => x"9c387a17", +988 => x"7080dad8", +989 => x"0b88050c", +990 => x"757c3181", +991 => x"0784120c", +992 => x"56841708", +993 => x"81067b07", +994 => x"84180c61", +995 => x"51a3f83f", +996 => x"881754fc", +997 => x"e1397418", +998 => x"19901c5e", +999 => x"5a7c7a24", +1000 => x"fb8f388c", +1001 => x"17088818", +1002 => x"08718c12", +1003 => x"0c88120c", +1004 => x"5e881761", +1005 => x"fc055759", +1006 => x"75a42681", +1007 => x"b6387b79", +1008 => x"59559376", +1009 => x"2780c938", +1010 => x"7b708405", +1011 => x"5d087c56", +1012 => x"790c7470", +1013 => x"84055608", +1014 => x"8c180c90", +1015 => x"17589b76", +1016 => x"27ae3874", +1017 => x"70840556", +1018 => x"08780c74", +1019 => x"70840556", +1020 => x"0894180c", +1021 => x"981758a3", +1022 => x"76279538", +1023 => x"74708405", +1024 => x"5608780c", +1025 => x"74708405", +1026 => x"56089c18", +1027 => x"0ca01758", +1028 => x"74708405", +1029 => x"56087541", +1030 => x"78708405", +1031 => x"5a0c7760", +1032 => x"70840542", +1033 => x"08717084", +1034 => x"05530c60", +1035 => x"08710c5e", +1036 => x"7a177080", +1037 => x"dad80b88", +1038 => x"050c7a7c", +1039 => x"31810784", +1040 => x"120c5884", +1041 => x"17088106", +1042 => x"7b078418", +1043 => x"0c6151a2", +1044 => x"b63f7854", +1045 => x"73800c93", +1046 => x"3d0d0479", +1047 => x"537b5275", +1048 => x"519ffd3f", +1049 => x"fae93984", +1050 => x"1508fc06", +1051 => x"19605859", +1052 => x"fadd3975", +1053 => x"537b5278", +1054 => x"519fe53f", +1055 => x"7a177080", +1056 => x"dad80b88", +1057 => x"050c7a7c", +1058 => x"31810784", +1059 => x"120c5884", +1060 => x"17088106", +1061 => x"7b078418", +1062 => x"0c6151a1", +1063 => x"ea3f7854", +1064 => x"ffb239fa", +1065 => x"3d0d7880", +1066 => x"d39c0854", +1067 => x"55b81308", +1068 => x"802e81af", +1069 => x"388c1522", +1070 => x"7083ffff", +1071 => x"0670832a", +1072 => x"81328106", +1073 => x"55555672", +1074 => x"802e80da", +1075 => x"3873842a", +1076 => x"81328106", +1077 => x"57ff5376", +1078 => x"80f23873", +1079 => x"822a8106", +1080 => x"5473802e", +1081 => x"b938b015", +1082 => x"08547380", +1083 => x"2e9c3880", +1084 => x"c0155373", +1085 => x"732e8f38", +1086 => x"735280d3", +1087 => x"9c08518a", +1088 => x"a23f8c15", +1089 => x"225676b0", +1090 => x"160c75db", +1091 => x"0657768c", +1092 => x"1623800b", +1093 => x"84160c90", +1094 => x"1508750c", +1095 => x"76567588", +1096 => x"0754738c", +1097 => x"16239015", +1098 => x"08802ebf", +1099 => x"388c1522", +1100 => x"70810655", +1101 => x"53739c38", +1102 => x"720a100a", +1103 => x"81065675", +1104 => x"85389415", +1105 => x"08547388", +1106 => x"160c8053", +1107 => x"72800c88", +1108 => x"3d0d0480", +1109 => x"0b88160c", +1110 => x"94150830", +1111 => x"98160c80", +1112 => x"53ea3972", +1113 => x"5182a63f", +1114 => x"fecb3974", +1115 => x"518fc03f", +1116 => x"8c152270", +1117 => x"81065553", +1118 => x"73802eff", +1119 => x"bb38d439", +1120 => x"f83d0d7a", +1121 => x"5776802e", +1122 => x"81973880", +1123 => x"d39c0854", +1124 => x"b8140880", +1125 => x"2e80eb38", +1126 => x"8c172270", +1127 => x"902b7090", +1128 => x"2c70832a", +1129 => x"81328106", +1130 => x"5b5b5755", +1131 => x"7780cb38", +1132 => x"90170856", +1133 => x"75802e80", +1134 => x"c1387608", +1135 => x"76317678", +1136 => x"0c798306", +1137 => x"55557385", +1138 => x"38941708", +1139 => x"58778818", +1140 => x"0c807525", +1141 => x"a5387453", +1142 => x"75529c17", +1143 => x"0851a417", +1144 => x"0854732d", +1145 => x"800b8008", +1146 => x"2580c938", +1147 => x"80081675", +1148 => x"80083156", +1149 => x"56748024", +1150 => x"dd38800b", +1151 => x"800c8a3d", +1152 => x"0d047351", +1153 => x"81873f8c", +1154 => x"17227090", +1155 => x"2b70902c", +1156 => x"70832a81", +1157 => x"3281065b", +1158 => x"5b575577", +1159 => x"dd38ff90", +1160 => x"39a38052", +1161 => x"80d39c08", +1162 => x"518cd43f", +1163 => x"8008800c", +1164 => x"8a3d0d04", +1165 => x"8c172280", +1166 => x"c0075877", +1167 => x"8c1823ff", +1168 => x"0b800c8a", +1169 => x"3d0d04fa", +1170 => x"3d0d7970", +1171 => x"80dc298c", +1172 => x"11547a53", +1173 => x"56578fda", +1174 => x"3f800880", +1175 => x"08555680", +1176 => x"08802ea2", +1177 => x"3880088c", +1178 => x"0554800b", +1179 => x"80080c76", +1180 => x"80088405", +1181 => x"0c738008", +1182 => x"88050c74", +1183 => x"53805273", +1184 => x"519cf93f", +1185 => x"75547380", +1186 => x"0c883d0d", +1187 => x"04fe3d0d", +1188 => x"74aacc0b", +1189 => x"bc120c53", +1190 => x"810bb814", +1191 => x"0c800b84", +1192 => x"dc140c83", +1193 => x"0b84e014", +1194 => x"0c84e813", +1195 => x"84e4140c", +1196 => x"84130851", +1197 => x"8070720c", +1198 => x"7084130c", +1199 => x"7088130c", +1200 => x"52840b8c", +1201 => x"1223718e", +1202 => x"12237190", +1203 => x"120c7194", +1204 => x"120c7198", +1205 => x"120c709c", +1206 => x"120c80c3", +1207 => x"bc0ba012", +1208 => x"0c80c488", +1209 => x"0ba4120c", +1210 => x"80c5840b", +1211 => x"a8120c80", +1212 => x"c5d50bac", +1213 => x"120c8813", +1214 => x"0872710c", +1215 => x"7284120c", +1216 => x"7288120c", +1217 => x"51890b8c", +1218 => x"1223810b", +1219 => x"8e122371", +1220 => x"90120c71", +1221 => x"94120c71", +1222 => x"98120c70", +1223 => x"9c120c80", +1224 => x"c3bc0ba0", +1225 => x"120c80c4", +1226 => x"880ba412", +1227 => x"0c80c584", +1228 => x"0ba8120c", +1229 => x"80c5d50b", +1230 => x"ac120c8c", +1231 => x"13087271", +1232 => x"0c728412", +1233 => x"0c728812", +1234 => x"0c518a0b", +1235 => x"8c122382", +1236 => x"0b8e1223", +1237 => x"7190120c", +1238 => x"7194120c", +1239 => x"7198120c", +1240 => x"709c120c", +1241 => x"80c3bc0b", +1242 => x"a0120c80", +1243 => x"c4880ba4", +1244 => x"120c80c5", +1245 => x"840ba812", +1246 => x"0c80c5d5", +1247 => x"0bac120c", +1248 => x"843d0d04", +1249 => x"f83d0d7a", +1250 => x"80d39c08", +1251 => x"b8110857", +1252 => x"57587481", +1253 => x"ec38aacc", +1254 => x"0bbc170c", +1255 => x"810bb817", +1256 => x"0c7484dc", +1257 => x"170c830b", +1258 => x"84e0170c", +1259 => x"84e81684", +1260 => x"e4170c84", +1261 => x"16087571", +1262 => x"0c758412", +1263 => x"0c758812", +1264 => x"0c59840b", +1265 => x"8c1a2374", +1266 => x"8e1a2374", +1267 => x"901a0c74", +1268 => x"941a0c74", +1269 => x"981a0c78", +1270 => x"9c1a0c80", +1271 => x"c3bc0ba0", +1272 => x"1a0c80c4", +1273 => x"880ba41a", +1274 => x"0c80c584", +1275 => x"0ba81a0c", +1276 => x"80c5d50b", +1277 => x"ac1a0c88", +1278 => x"16087571", +1279 => x"0c758412", +1280 => x"0c758812", +1281 => x"0c57890b", +1282 => x"8c182381", +1283 => x"0b8e1823", +1284 => x"7490180c", +1285 => x"7494180c", +1286 => x"7498180c", +1287 => x"769c180c", +1288 => x"80c3bc0b", +1289 => x"a0180c80", +1290 => x"c4880ba4", +1291 => x"180c80c5", +1292 => x"840ba818", +1293 => x"0c80c5d5", +1294 => x"0bac180c", +1295 => x"8c160875", +1296 => x"710c7584", +1297 => x"120c7588", +1298 => x"120c548a", +1299 => x"0b8c1523", +1300 => x"820b8e15", +1301 => x"23749015", +1302 => x"0c749415", +1303 => x"0c749815", +1304 => x"0c739c15", +1305 => x"0c80c3bc", +1306 => x"0ba0150c", +1307 => x"80c4880b", +1308 => x"a4150c80", +1309 => x"c5840ba8", +1310 => x"150c80c5", +1311 => x"d50bac15", +1312 => x"0c84dc16", +1313 => x"88110884", +1314 => x"1208ff05", +1315 => x"57575780", +1316 => x"75249f38", +1317 => x"8c162270", +1318 => x"902b7090", +1319 => x"2c515559", +1320 => x"73802e80", +1321 => x"ed3880dc", +1322 => x"16ff1656", +1323 => x"56748025", +1324 => x"e3387608", +1325 => x"5574802e", +1326 => x"8f387488", +1327 => x"11088412", +1328 => x"08ff0557", +1329 => x"5757c839", +1330 => x"82fc5277", +1331 => x"518ae33f", +1332 => x"80088008", +1333 => x"55568008", +1334 => x"802ea338", +1335 => x"80088c05", +1336 => x"7580080c", +1337 => x"54840b80", +1338 => x"0884050c", +1339 => x"73800888", +1340 => x"050c82f0", +1341 => x"53745273", +1342 => x"5198813f", +1343 => x"75547374", +1344 => x"780c5573", +1345 => x"ffb4388c", +1346 => x"780c800b", +1347 => x"800c8a3d", +1348 => x"0d04810b", +1349 => x"8c172373", +1350 => x"760c7388", +1351 => x"170c7384", +1352 => x"170c7390", +1353 => x"170c7394", +1354 => x"170c7398", +1355 => x"170cff0b", +1356 => x"8e172373", +1357 => x"b0170c73", +1358 => x"b4170c73", +1359 => x"80c4170c", +1360 => x"7380c817", +1361 => x"0c75800c", +1362 => x"8a3d0d04", +1363 => x"ff3d0da3", +1364 => x"80527351", +1365 => x"86a93f83", +1366 => x"3d0d04ff", +1367 => x"3d0da380", +1368 => x"5280d39c", +1369 => x"08518697", +1370 => x"3f833d0d", +1371 => x"04fb3d0d", +1372 => x"77705256", +1373 => x"98903f80", +1374 => x"dad80b88", +1375 => x"05088411", +1376 => x"08fc0670", +1377 => x"7b319fef", +1378 => x"05e08006", +1379 => x"e0800552", +1380 => x"5555a080", +1381 => x"75249438", +1382 => x"80527551", +1383 => x"97ea3f80", +1384 => x"dae00814", +1385 => x"53728008", +1386 => x"2e8f3875", +1387 => x"5197d83f", +1388 => x"80537280", +1389 => x"0c873d0d", +1390 => x"04743052", +1391 => x"755197c8", +1392 => x"3f8008ff", +1393 => x"2ea83880", +1394 => x"dad80b88", +1395 => x"05087476", +1396 => x"31810784", +1397 => x"120c5380", +1398 => x"da9c0875", +1399 => x"3180da9c", +1400 => x"0c755197", +1401 => x"a23f810b", +1402 => x"800c873d", +1403 => x"0d048052", +1404 => x"75519794", +1405 => x"3f80dad8", +1406 => x"0b880508", +1407 => x"80087131", +1408 => x"54548f73", +1409 => x"25ffa438", +1410 => x"800880da", +1411 => x"cc083180", +1412 => x"da9c0c72", +1413 => x"81078415", +1414 => x"0c755196", +1415 => x"ea3f8053", +1416 => x"ff9039f7", +1417 => x"3d0d7b7d", +1418 => x"545a7280", +1419 => x"2e828338", +1420 => x"795196d2", +1421 => x"3ff81384", +1422 => x"110870fe", +1423 => x"06701384", +1424 => x"1108fc06", +1425 => x"5c575854", +1426 => x"5780dae0", +1427 => x"08742e82", +1428 => x"de387784", +1429 => x"150c8073", +1430 => x"81065659", +1431 => x"74792e81", +1432 => x"d5387714", +1433 => x"84110881", +1434 => x"06565374", +1435 => x"a0387716", +1436 => x"567881e6", +1437 => x"38881408", +1438 => x"557480da", +1439 => x"e02e82f9", +1440 => x"388c1408", +1441 => x"708c170c", +1442 => x"7588120c", +1443 => x"58758107", +1444 => x"84180c75", +1445 => x"1776710c", +1446 => x"54788191", +1447 => x"3883ff76", +1448 => x"2781c838", +1449 => x"75892a76", +1450 => x"832a5454", +1451 => x"73802ebf", +1452 => x"3875862a", +1453 => x"b8055384", +1454 => x"7427b438", +1455 => x"80db1453", +1456 => x"947427ab", +1457 => x"38758c2a", +1458 => x"80ee0553", +1459 => x"80d47427", +1460 => x"9e38758f", +1461 => x"2a80f705", +1462 => x"5382d474", +1463 => x"27913875", +1464 => x"922a80fc", +1465 => x"05538ad4", +1466 => x"74278438", +1467 => x"80fe5372", +1468 => x"10101080", +1469 => x"dad80588", +1470 => x"11085555", +1471 => x"73752e82", +1472 => x"bf388414", +1473 => x"08fc0659", +1474 => x"7579278d", +1475 => x"38881408", +1476 => x"5473752e", +1477 => x"098106ea", +1478 => x"388c1408", +1479 => x"708c190c", +1480 => x"7488190c", +1481 => x"7788120c", +1482 => x"55768c15", +1483 => x"0c795194", +1484 => x"d63f8b3d", +1485 => x"0d047608", +1486 => x"77713158", +1487 => x"76058818", +1488 => x"08565674", +1489 => x"80dae02e", +1490 => x"80e0388c", +1491 => x"1708708c", +1492 => x"170c7588", +1493 => x"120c53fe", +1494 => x"89398814", +1495 => x"088c1508", +1496 => x"708c130c", +1497 => x"5988190c", +1498 => x"fea33975", +1499 => x"832a7054", +1500 => x"54807424", +1501 => x"81983872", +1502 => x"822c8171", +1503 => x"2b80dadc", +1504 => x"080780da", +1505 => x"d80b8405", +1506 => x"0c741010", +1507 => x"1080dad8", +1508 => x"05881108", +1509 => x"718c1b0c", +1510 => x"70881b0c", +1511 => x"7988130c", +1512 => x"565a5576", +1513 => x"8c150cff", +1514 => x"84398159", +1515 => x"fdb43977", +1516 => x"16738106", +1517 => x"54557298", +1518 => x"38760877", +1519 => x"71315875", +1520 => x"058c1808", +1521 => x"88190871", +1522 => x"8c120c88", +1523 => x"120c5555", +1524 => x"74810784", +1525 => x"180c7680", +1526 => x"dad80b88", +1527 => x"050c80da", +1528 => x"d4087526", +1529 => x"fec73880", +1530 => x"dad00852", +1531 => x"7951fafd", +1532 => x"3f795193", +1533 => x"923ffeba", +1534 => x"3981778c", +1535 => x"170c7788", +1536 => x"170c758c", +1537 => x"190c7588", +1538 => x"190c59fd", +1539 => x"80398314", +1540 => x"70822c81", +1541 => x"712b80da", +1542 => x"dc080780", +1543 => x"dad80b84", +1544 => x"050c7510", +1545 => x"101080da", +1546 => x"d8058811", +1547 => x"08718c1c", +1548 => x"0c70881c", +1549 => x"0c7a8813", +1550 => x"0c575b56", +1551 => x"53fee439", +1552 => x"807324a3", +1553 => x"3872822c", +1554 => x"81712b80", +1555 => x"dadc0807", +1556 => x"80dad80b", +1557 => x"84050c58", +1558 => x"748c180c", +1559 => x"7388180c", +1560 => x"7688160c", +1561 => x"fdc33983", +1562 => x"1370822c", +1563 => x"81712b80", +1564 => x"dadc0807", +1565 => x"80dad80b", +1566 => x"84050c59", +1567 => x"53da39f9", +1568 => x"3d0d797b", +1569 => x"5853800b", +1570 => x"80d39c08", +1571 => x"53567272", +1572 => x"2ebc3884", +1573 => x"dc135574", +1574 => x"762eb338", +1575 => x"88150884", +1576 => x"1608ff05", +1577 => x"54548073", +1578 => x"2499388c", +1579 => x"14227090", +1580 => x"2b535871", +1581 => x"80d43880", +1582 => x"dc14ff14", +1583 => x"54547280", +1584 => x"25e93874", +1585 => x"085574d4", +1586 => x"3880d39c", +1587 => x"085284dc", +1588 => x"12557480", +1589 => x"2ead3888", +1590 => x"15088416", +1591 => x"08ff0554", +1592 => x"54807324", +1593 => x"98388c14", +1594 => x"2270902b", +1595 => x"535871ad", +1596 => x"3880dc14", +1597 => x"ff145454", +1598 => x"728025ea", +1599 => x"38740855", +1600 => x"74d53875", +1601 => x"800c893d", +1602 => x"0d047351", +1603 => x"762d7580", +1604 => x"080780dc", +1605 => x"15ff1555", +1606 => x"5556ffa2", +1607 => x"39735176", +1608 => x"2d758008", +1609 => x"0780dc15", +1610 => x"ff155555", +1611 => x"56ca39ea", +1612 => x"3d0d688c", +1613 => x"1122700a", +1614 => x"100a8106", +1615 => x"57585674", +1616 => x"80e4388e", +1617 => x"16227090", +1618 => x"2b70902c", +1619 => x"51555880", +1620 => x"7424b138", +1621 => x"983dc405", +1622 => x"53735280", +1623 => x"d39c0851", +1624 => x"93fb3f80", +1625 => x"0b800824", +1626 => x"97387983", +1627 => x"e0800654", +1628 => x"7380c080", +1629 => x"2e818f38", +1630 => x"73828080", +1631 => x"2e819138", +1632 => x"8c162257", +1633 => x"76908007", +1634 => x"54738c17", +1635 => x"23888052", +1636 => x"80d39c08", +1637 => x"51819b3f", +1638 => x"80089d38", +1639 => x"8c162282", +1640 => x"0755748c", +1641 => x"172380c3", +1642 => x"1670770c", +1643 => x"90170c81", +1644 => x"0b94170c", +1645 => x"983d0d04", +1646 => x"80d39c08", +1647 => x"aacc0bbc", +1648 => x"120c588c", +1649 => x"16228180", +1650 => x"0754738c", +1651 => x"17238008", +1652 => x"760c8008", +1653 => x"90170c88", +1654 => x"800b9417", +1655 => x"0c74802e", +1656 => x"d3388e16", +1657 => x"2270902b", +1658 => x"70902c53", +1659 => x"56549cd0", +1660 => x"3f800880", +1661 => x"2effbd38", +1662 => x"8c162281", +1663 => x"0757768c", +1664 => x"1723983d", +1665 => x"0d04810b", +1666 => x"8c172258", +1667 => x"55fef539", +1668 => x"a8160880", +1669 => x"c5842e09", +1670 => x"8106fee4", +1671 => x"388c1622", +1672 => x"88800754", +1673 => x"738c1723", +1674 => x"88800b80", +1675 => x"cc170cfe", +1676 => x"dc39f43d", +1677 => x"0d7e608b", +1678 => x"1170f806", +1679 => x"5b55555d", +1680 => x"72962683", +1681 => x"38905880", +1682 => x"78247479", +1683 => x"26075580", +1684 => x"5474742e", +1685 => x"09810680", +1686 => x"ca387c51", +1687 => x"8ea83f77", +1688 => x"83f72680", +1689 => x"c5387783", +1690 => x"2a701010", +1691 => x"1080dad8", +1692 => x"058c1108", +1693 => x"58585475", +1694 => x"772e81f0", +1695 => x"38841608", +1696 => x"fc068c17", +1697 => x"08881808", +1698 => x"718c120c", +1699 => x"88120c5b", +1700 => x"76058411", +1701 => x"08810784", +1702 => x"120c537c", +1703 => x"518de83f", +1704 => x"88165473", +1705 => x"800c8e3d", +1706 => x"0d047789", +1707 => x"2a78832a", +1708 => x"58547380", +1709 => x"2ebf3877", +1710 => x"862ab805", +1711 => x"57847427", +1712 => x"b43880db", +1713 => x"14579474", +1714 => x"27ab3877", +1715 => x"8c2a80ee", +1716 => x"055780d4", +1717 => x"74279e38", +1718 => x"778f2a80", +1719 => x"f7055782", +1720 => x"d4742791", +1721 => x"3877922a", +1722 => x"80fc0557", +1723 => x"8ad47427", +1724 => x"843880fe", +1725 => x"57761010", +1726 => x"1080dad8", +1727 => x"058c1108", +1728 => x"56537473", +1729 => x"2ea33884", +1730 => x"1508fc06", +1731 => x"70793155", +1732 => x"56738f24", +1733 => x"88e43873", +1734 => x"802588e6", +1735 => x"388c1508", +1736 => x"5574732e", +1737 => x"098106df", +1738 => x"38811759", +1739 => x"80dae808", +1740 => x"567580da", +1741 => x"e02e82cc", +1742 => x"38841608", +1743 => x"fc067079", +1744 => x"31555573", +1745 => x"8f24bb38", +1746 => x"80dae00b", +1747 => x"80daec0c", +1748 => x"80dae00b", +1749 => x"80dae80c", +1750 => x"80742480", +1751 => x"db387416", +1752 => x"84110881", +1753 => x"0784120c", +1754 => x"53feb039", +1755 => x"88168c11", +1756 => x"08575975", +1757 => x"792e0981", +1758 => x"06fe8238", +1759 => x"821459ff", +1760 => x"ab397716", +1761 => x"78810784", +1762 => x"180c7080", +1763 => x"daec0c70", +1764 => x"80dae80c", +1765 => x"80dae00b", +1766 => x"8c120c8c", +1767 => x"11088812", +1768 => x"0c748107", +1769 => x"84120c74", +1770 => x"0574710c", +1771 => x"5b7c518b", +1772 => x"d63f8816", +1773 => x"54fdec39", +1774 => x"83ff7527", +1775 => x"83913874", +1776 => x"892a7583", +1777 => x"2a545473", +1778 => x"802ebf38", +1779 => x"74862ab8", +1780 => x"05538474", +1781 => x"27b43880", +1782 => x"db145394", +1783 => x"7427ab38", +1784 => x"748c2a80", +1785 => x"ee055380", +1786 => x"d474279e", +1787 => x"38748f2a", +1788 => x"80f70553", +1789 => x"82d47427", +1790 => x"91387492", +1791 => x"2a80fc05", +1792 => x"538ad474", +1793 => x"27843880", +1794 => x"fe537210", +1795 => x"101080da", +1796 => x"d8058811", +1797 => x"08555773", +1798 => x"772e868b", +1799 => x"38841408", +1800 => x"fc065b74", +1801 => x"7b278d38", +1802 => x"88140854", +1803 => x"73772e09", +1804 => x"8106ea38", +1805 => x"8c140880", +1806 => x"dad80b84", +1807 => x"0508718c", +1808 => x"190c7588", +1809 => x"190c7788", +1810 => x"130c5c57", +1811 => x"758c150c", +1812 => x"78538079", +1813 => x"24839838", +1814 => x"72822c81", +1815 => x"712b5656", +1816 => x"747b2680", +1817 => x"ca387a75", +1818 => x"06577682", +1819 => x"a33878fc", +1820 => x"06840559", +1821 => x"7410707c", +1822 => x"06555573", +1823 => x"82923884", +1824 => x"1959f139", +1825 => x"80dad80b", +1826 => x"84050879", +1827 => x"545b7880", +1828 => x"25c63882", +1829 => x"da397409", +1830 => x"7b067080", +1831 => x"dad80b84", +1832 => x"050c5b74", +1833 => x"1055747b", +1834 => x"26853874", +1835 => x"85bc3880", +1836 => x"dad80b88", +1837 => x"05087084", +1838 => x"1208fc06", +1839 => x"707b317b", +1840 => x"72268f72", +1841 => x"25075d57", +1842 => x"5c5c5578", +1843 => x"802e80d9", +1844 => x"38791580", +1845 => x"dad00819", +1846 => x"90115954", +1847 => x"5680dacc", +1848 => x"08ff2e88", +1849 => x"38a08f13", +1850 => x"e0800657", +1851 => x"76527c51", +1852 => x"89963f80", +1853 => x"08548008", +1854 => x"ff2e9038", +1855 => x"80087627", +1856 => x"82a73874", +1857 => x"80dad82e", +1858 => x"829f3880", +1859 => x"dad80b88", +1860 => x"05085584", +1861 => x"1508fc06", +1862 => x"70793179", +1863 => x"72268f72", +1864 => x"25075d55", +1865 => x"5a7a83f2", +1866 => x"38778107", +1867 => x"84160c77", +1868 => x"157080da", +1869 => x"d80b8805", +1870 => x"0c748107", +1871 => x"84120c56", +1872 => x"7c5188c3", +1873 => x"3f881554", +1874 => x"73800c8e", +1875 => x"3d0d0474", +1876 => x"832a7054", +1877 => x"54807424", +1878 => x"819b3872", +1879 => x"822c8171", +1880 => x"2b80dadc", +1881 => x"08077080", +1882 => x"dad80b84", +1883 => x"050c7510", +1884 => x"101080da", +1885 => x"d8058811", +1886 => x"08718c1b", +1887 => x"0c70881b", +1888 => x"0c798813", +1889 => x"0c57555c", +1890 => x"55758c15", +1891 => x"0cfdc139", +1892 => x"78791010", +1893 => x"1080dad8", +1894 => x"0570565b", +1895 => x"5c8c1408", +1896 => x"5675742e", +1897 => x"a3388416", +1898 => x"08fc0670", +1899 => x"79315853", +1900 => x"768f2483", +1901 => x"f1387680", +1902 => x"2584af38", +1903 => x"8c160856", +1904 => x"75742e09", +1905 => x"8106df38", +1906 => x"8814811a", +1907 => x"70830655", +1908 => x"5a5472c9", +1909 => x"387b8306", +1910 => x"5675802e", +1911 => x"fdb838ff", +1912 => x"1cf81b5b", +1913 => x"5c881a08", +1914 => x"7a2eea38", +1915 => x"fdb53983", +1916 => x"1953fce4", +1917 => x"39831470", +1918 => x"822c8171", +1919 => x"2b80dadc", +1920 => x"08077080", +1921 => x"dad80b84", +1922 => x"050c7610", +1923 => x"101080da", +1924 => x"d8058811", +1925 => x"08718c1c", +1926 => x"0c70881c", +1927 => x"0c7a8813", +1928 => x"0c58535d", +1929 => x"5653fee1", +1930 => x"3980da9c", +1931 => x"08175980", +1932 => x"08762e81", +1933 => x"8b3880da", +1934 => x"cc08ff2e", +1935 => x"848e3873", +1936 => x"76311980", +1937 => x"da9c0c73", +1938 => x"87067056", +1939 => x"5372802e", +1940 => x"88388873", +1941 => x"31701555", +1942 => x"5576149f", +1943 => x"ff06a080", +1944 => x"71311670", +1945 => x"547e5351", +1946 => x"53869d3f", +1947 => x"80085680", +1948 => x"08ff2e81", +1949 => x"9e3880da", +1950 => x"9c081370", +1951 => x"80da9c0c", +1952 => x"747580da", +1953 => x"d80b8805", +1954 => x"0c777631", +1955 => x"15810755", +1956 => x"56597a80", +1957 => x"dad82e83", +1958 => x"c038798f", +1959 => x"2682ef38", +1960 => x"810b8415", +1961 => x"0c841508", +1962 => x"fc067079", +1963 => x"31797226", +1964 => x"8f722507", +1965 => x"5d555a7a", +1966 => x"802efced", +1967 => x"3880db39", +1968 => x"80089fff", +1969 => x"065574fe", +1970 => x"ed387880", +1971 => x"da9c0c80", +1972 => x"dad80b88", +1973 => x"05087a18", +1974 => x"81078412", +1975 => x"0c5580da", +1976 => x"c8087927", +1977 => x"86387880", +1978 => x"dac80c80", +1979 => x"dac40879", +1980 => x"27fca038", +1981 => x"7880dac4", +1982 => x"0c841508", +1983 => x"fc067079", +1984 => x"31797226", +1985 => x"8f722507", +1986 => x"5d555a7a", +1987 => x"802efc99", +1988 => x"38883980", +1989 => x"745753fe", +1990 => x"dd397c51", +1991 => x"84e93f80", +1992 => x"0b800c8e", +1993 => x"3d0d0480", +1994 => x"7324a538", +1995 => x"72822c81", +1996 => x"712b80da", +1997 => x"dc080770", +1998 => x"80dad80b", +1999 => x"84050c5c", +2000 => x"5a768c17", +2001 => x"0c738817", +2002 => x"0c758818", +2003 => x"0cf9fd39", +2004 => x"83137082", +2005 => x"2c81712b", +2006 => x"80dadc08", +2007 => x"077080da", +2008 => x"d80b8405", +2009 => x"0c5d5b53", +2010 => x"d8397a75", +2011 => x"065c7bfc", +2012 => x"9f388419", +2013 => x"75105659", +2014 => x"f139ff17", +2015 => x"810559f7", +2016 => x"ab398c15", +2017 => x"08881608", +2018 => x"718c120c", +2019 => x"88120c59", +2020 => x"75158411", +2021 => x"08810784", +2022 => x"120c587c", +2023 => x"5183e83f", +2024 => x"881554fb", +2025 => x"a3397716", +2026 => x"78810784", +2027 => x"180c8c17", +2028 => x"08881808", +2029 => x"718c120c", +2030 => x"88120c5c", +2031 => x"7080daec", +2032 => x"0c7080da", +2033 => x"e80c80da", +2034 => x"e00b8c12", +2035 => x"0c8c1108", +2036 => x"88120c77", +2037 => x"81078412", +2038 => x"0c770577", +2039 => x"710c557c", +2040 => x"5183a43f", +2041 => x"881654f5", +2042 => x"ba397216", +2043 => x"84110881", +2044 => x"0784120c", +2045 => x"588c1608", +2046 => x"88170871", +2047 => x"8c120c88", +2048 => x"120c577c", +2049 => x"5183803f", +2050 => x"881654f5", +2051 => x"96397284", +2052 => x"150cf41a", +2053 => x"f8067084", +2054 => x"1d088106", +2055 => x"07841d0c", +2056 => x"701c5556", +2057 => x"850b8415", +2058 => x"0c850b88", +2059 => x"150c8f76", +2060 => x"27fdab38", +2061 => x"881b527c", +2062 => x"51ebe83f", +2063 => x"80dad80b", +2064 => x"88050880", +2065 => x"da9c085a", +2066 => x"55fd9339", +2067 => x"7880da9c", +2068 => x"0c7380da", +2069 => x"cc0cfbef", +2070 => x"39728415", +2071 => x"0cfcff39", +2072 => x"fb3d0d77", +2073 => x"707a7c58", +2074 => x"5553568f", +2075 => x"752780e6", +2076 => x"38727607", +2077 => x"83065170", +2078 => x"80dc3875", +2079 => x"73525470", +2080 => x"70840552", +2081 => x"08747084", +2082 => x"05560c73", +2083 => x"71708405", +2084 => x"53087170", +2085 => x"8405530c", +2086 => x"71708405", +2087 => x"53087170", +2088 => x"8405530c", +2089 => x"71708405", +2090 => x"53087170", +2091 => x"8405530c", +2092 => x"f0165654", +2093 => x"748f26c7", +2094 => x"38837527", +2095 => x"95387070", +2096 => x"84055208", +2097 => x"74708405", +2098 => x"560cfc15", +2099 => x"55748326", +2100 => x"ed387371", +2101 => x"5452ff15", +2102 => x"5170ff2e", +2103 => x"98387270", +2104 => x"81055433", +2105 => x"72708105", +2106 => x"5434ff11", +2107 => x"5170ff2e", +2108 => x"098106ea", +2109 => x"3875800c", +2110 => x"873d0d04", +2111 => x"fb3d0d77", +2112 => x"7a71028c", +2113 => x"05a30533", +2114 => x"58545456", +2115 => x"83732780", +2116 => x"d4387583", +2117 => x"06517080", +2118 => x"cc387488", +2119 => x"2b750770", +2120 => x"71902b07", +2121 => x"55518f73", +2122 => x"27a73873", +2123 => x"72708405", +2124 => x"540c7174", +2125 => x"71708405", +2126 => x"530c7471", +2127 => x"70840553", +2128 => x"0c747170", +2129 => x"8405530c", +2130 => x"f0145452", +2131 => x"728f26db", +2132 => x"38837327", +2133 => x"90387372", +2134 => x"70840554", +2135 => x"0cfc1353", +2136 => x"728326f2", +2137 => x"38ff1351", +2138 => x"70ff2e93", +2139 => x"38747270", +2140 => x"81055434", +2141 => x"ff115170", +2142 => x"ff2e0981", +2143 => x"06ef3875", +2144 => x"800c873d", +2145 => x"0d040404", +2146 => x"fd3d0d80", +2147 => x"0b80e3a0", +2148 => x"0c765184", +2149 => x"ee3f8008", +2150 => x"538008ff", +2151 => x"2e883872", +2152 => x"800c853d", +2153 => x"0d0480e3", +2154 => x"a0085473", +2155 => x"802ef038", +2156 => x"7574710c", +2157 => x"5272800c", +2158 => x"853d0d04", +2159 => x"f93d0d79", +2160 => x"7c557b54", +2161 => x"8e112270", +2162 => x"902b7090", +2163 => x"2c555780", +2164 => x"d39c0853", +2165 => x"585683f3", +2166 => x"3f800857", +2167 => x"800b8008", +2168 => x"24933880", +2169 => x"d0160880", +2170 => x"080580d0", +2171 => x"170c7680", +2172 => x"0c893d0d", +2173 => x"048c1622", +2174 => x"83dfff06", +2175 => x"55748c17", +2176 => x"2376800c", +2177 => x"893d0d04", +2178 => x"fa3d0d78", +2179 => x"8c112270", +2180 => x"882a7081", +2181 => x"06515758", +2182 => x"5674a938", +2183 => x"8c162283", +2184 => x"dfff0655", +2185 => x"748c1723", +2186 => x"7a547953", +2187 => x"8e162270", +2188 => x"902b7090", +2189 => x"2c545680", +2190 => x"d39c0852", +2191 => x"5681b23f", +2192 => x"883d0d04", +2193 => x"82548053", +2194 => x"8e162270", +2195 => x"902b7090", +2196 => x"2c545680", +2197 => x"d39c0852", +2198 => x"5782b83f", +2199 => x"8c162283", +2200 => x"dfff0655", +2201 => x"748c1723", +2202 => x"7a547953", +2203 => x"8e162270", +2204 => x"902b7090", +2205 => x"2c545680", +2206 => x"d39c0852", +2207 => x"5680f23f", +2208 => x"883d0d04", +2209 => x"f93d0d79", +2210 => x"7c557b54", +2211 => x"8e112270", +2212 => x"902b7090", +2213 => x"2c555780", +2214 => x"d39c0853", +2215 => x"585681f3", +2216 => x"3f800857", +2217 => x"8008ff2e", +2218 => x"99388c16", +2219 => x"22a08007", +2220 => x"55748c17", +2221 => x"23800880", +2222 => x"d0170c76", +2223 => x"800c893d", +2224 => x"0d048c16", +2225 => x"2283dfff", +2226 => x"0655748c", +2227 => x"17237680", +2228 => x"0c893d0d", +2229 => x"04fe3d0d", +2230 => x"748e1122", +2231 => x"70902b70", +2232 => x"902c5551", +2233 => x"515380d3", +2234 => x"9c0851bd", +2235 => x"3f843d0d", +2236 => x"04fb3d0d", +2237 => x"800b80e3", +2238 => x"a00c7a53", +2239 => x"79527851", +2240 => x"82fc3f80", +2241 => x"08558008", +2242 => x"ff2e8838", +2243 => x"74800c87", +2244 => x"3d0d0480", +2245 => x"e3a00856", +2246 => x"75802ef0", +2247 => x"38777671", +2248 => x"0c547480", +2249 => x"0c873d0d", +2250 => x"04fd3d0d", +2251 => x"800b80e3", +2252 => x"a00c7651", +2253 => x"85853f80", +2254 => x"08538008", +2255 => x"ff2e8838", +2256 => x"72800c85", +2257 => x"3d0d0480", +2258 => x"e3a00854", +2259 => x"73802ef0", +2260 => x"38757471", +2261 => x"0c527280", +2262 => x"0c853d0d", +2263 => x"04fc3d0d", +2264 => x"800b80e3", +2265 => x"a00c7852", +2266 => x"775188b8", +2267 => x"3f800854", +2268 => x"8008ff2e", +2269 => x"88387380", +2270 => x"0c863d0d", +2271 => x"0480e3a0", +2272 => x"08557480", +2273 => x"2ef03876", +2274 => x"75710c53", +2275 => x"73800c86", +2276 => x"3d0d04fb", +2277 => x"3d0d800b", +2278 => x"80e3a00c", +2279 => x"7a537952", +2280 => x"78518593", +2281 => x"3f800855", +2282 => x"8008ff2e", +2283 => x"88387480", +2284 => x"0c873d0d", +2285 => x"0480e3a0", +2286 => x"08567580", +2287 => x"2ef03877", +2288 => x"76710c54", +2289 => x"74800c87", +2290 => x"3d0d04fb", +2291 => x"3d0d800b", +2292 => x"80e3a00c", +2293 => x"7a537952", +2294 => x"7851829a", +2295 => x"3f800855", +2296 => x"8008ff2e", +2297 => x"88387480", +2298 => x"0c873d0d", +2299 => x"0480e3a0", +2300 => x"08567580", +2301 => x"2ef03877", +2302 => x"76710c54", +2303 => x"74800c87", +2304 => x"3d0d04fe", +2305 => x"3d0d80e3", +2306 => x"a4085170", +2307 => x"8a3880e3", +2308 => x"ac7080e3", +2309 => x"a40c5174", +2310 => x"1152ff53", +2311 => x"7187fb80", +2312 => x"80268838", +2313 => x"7180e3a4", +2314 => x"0c705372", +2315 => x"800c843d", +2316 => x"0d04fd3d", +2317 => x"0d800b80", +2318 => x"d3900854", +2319 => x"5472812e", +2320 => x"9c387380", +2321 => x"e3a80cc0", +2322 => x"d83fffbf", +2323 => x"b33f80e2", +2324 => x"e0528151", +2325 => x"c3b43f80", +2326 => x"0851889b", +2327 => x"3f7280e3", +2328 => x"a80cc0bd", +2329 => x"3fffbf98", +2330 => x"3f80e2e0", +2331 => x"528151c3", +2332 => x"993f8008", +2333 => x"5188803f", +2334 => x"00ff3900", +2335 => x"ff39f53d", +2336 => x"0d7e6080", +2337 => x"e3a80870", +2338 => x"5b585b5b", +2339 => x"7580c538", +2340 => x"777a25a2", +2341 => x"38771b70", +2342 => x"337081ff", +2343 => x"06585859", +2344 => x"758a2e99", +2345 => x"387681ff", +2346 => x"0651ffbf", +2347 => x"d33f8118", +2348 => x"58797824", +2349 => x"e0387980", +2350 => x"0c8d3d0d", +2351 => x"048d51ff", +2352 => x"bfbe3f78", +2353 => x"337081ff", +2354 => x"065257ff", +2355 => x"bfb23f81", +2356 => x"1858de39", +2357 => x"79557a54", +2358 => x"7d538552", +2359 => x"8d3dfc05", +2360 => x"51ffbede", +2361 => x"3f800856", +2362 => x"87863f7b", +2363 => x"80080c75", +2364 => x"800c8d3d", +2365 => x"0d04f63d", +2366 => x"0d7d7f80", +2367 => x"e3a80870", +2368 => x"5a585a5a", +2369 => x"7580c438", +2370 => x"767925b2", +2371 => x"38761a58", +2372 => x"ffbecd3f", +2373 => x"80087834", +2374 => x"800b8008", +2375 => x"81ff0657", +2376 => x"58758a2e", +2377 => x"a238758d", +2378 => x"32703070", +2379 => x"80257a07", +2380 => x"51515675", +2381 => x"b8388117", +2382 => x"57787724", +2383 => x"d0387656", +2384 => x"75800c8c", +2385 => x"3d0d0481", +2386 => x"58dc3978", +2387 => x"5579547c", +2388 => x"5384528c", +2389 => x"3dfc0551", +2390 => x"ffbde73f", +2391 => x"80085686", +2392 => x"8f3f7a80", +2393 => x"080c7580", +2394 => x"0c8c3d0d", +2395 => x"04811756", +2396 => x"cf39f93d", +2397 => x"0d795780", +2398 => x"e3a80880", +2399 => x"2ead3876", +2400 => x"51c4e33f", +2401 => x"7b567a55", +2402 => x"80088105", +2403 => x"54765382", +2404 => x"52893dfc", +2405 => x"0551ffbd", +2406 => x"a93f8008", +2407 => x"5785d13f", +2408 => x"7780080c", +2409 => x"76800c89", +2410 => x"3d0d0485", +2411 => x"c33f850b", +2412 => x"80080cff", +2413 => x"0b800c89", +2414 => x"3d0d04fb", +2415 => x"3d0d80e3", +2416 => x"a8087056", +2417 => x"54738838", +2418 => x"74800c87", +2419 => x"3d0d0477", +2420 => x"53835287", +2421 => x"3dfc0551", +2422 => x"ffbce73f", +2423 => x"80085485", +2424 => x"8f3f7580", +2425 => x"080c7380", +2426 => x"0c873d0d", +2427 => x"04ff0b80", +2428 => x"0c04fb3d", +2429 => x"0d775580", +2430 => x"e3a80880", +2431 => x"2ea93874", +2432 => x"51c3e33f", +2433 => x"80088105", +2434 => x"54745387", +2435 => x"52873dfc", +2436 => x"0551ffbc", +2437 => x"ad3f8008", +2438 => x"5584d53f", +2439 => x"7580080c", +2440 => x"74800c87", +2441 => x"3d0d0484", +2442 => x"c73f850b", +2443 => x"80080cff", +2444 => x"0b800c87", +2445 => x"3d0d04fa", +2446 => x"3d0d80e3", +2447 => x"a808802e", +2448 => x"a3387a55", +2449 => x"79547853", +2450 => x"8652883d", +2451 => x"fc0551ff", +2452 => x"bbf03f80", +2453 => x"08568498", +2454 => x"3f768008", +2455 => x"0c75800c", +2456 => x"883d0d04", +2457 => x"848a3f9d", +2458 => x"0b80080c", +2459 => x"ff0b800c", +2460 => x"883d0d04", +2461 => x"f73d0d7b", +2462 => x"7d5b59bc", +2463 => x"53805279", +2464 => x"51f4f93f", +2465 => x"80705657", +2466 => x"98567419", +2467 => x"70337078", +2468 => x"2b790781", +2469 => x"18f81a5a", +2470 => x"58595558", +2471 => x"847524ea", +2472 => x"38767a23", +2473 => x"84195880", +2474 => x"70565798", +2475 => x"56741870", +2476 => x"3370782b", +2477 => x"79078118", +2478 => x"f81a5a58", +2479 => x"59515484", +2480 => x"7524ea38", +2481 => x"76821b23", +2482 => x"88195880", +2483 => x"70565798", +2484 => x"56741870", +2485 => x"3370782b", +2486 => x"79078118", +2487 => x"f81a5a58", +2488 => x"59515484", +2489 => x"7524ea38", +2490 => x"76841b0c", +2491 => x"8c195880", +2492 => x"70565798", +2493 => x"56741870", +2494 => x"3370782b", +2495 => x"79078118", +2496 => x"f81a5a58", +2497 => x"59515484", +2498 => x"7524ea38", +2499 => x"76881b23", +2500 => x"90195880", +2501 => x"70565798", +2502 => x"56741870", +2503 => x"3370782b", +2504 => x"79078118", +2505 => x"f81a5a58", +2506 => x"59515484", +2507 => x"7524ea38", +2508 => x"768a1b23", +2509 => x"94195880", +2510 => x"70565798", +2511 => x"56741870", +2512 => x"3370782b", +2513 => x"79078118", +2514 => x"f81a5a58", +2515 => x"59515484", +2516 => x"7524ea38", +2517 => x"768c1b23", +2518 => x"98195880", +2519 => x"70565798", +2520 => x"56741870", +2521 => x"3370782b", +2522 => x"79078118", +2523 => x"f81a5a58", +2524 => x"59515484", +2525 => x"7524ea38", +2526 => x"768e1b23", +2527 => x"9c195880", +2528 => x"705657b8", +2529 => x"56741870", +2530 => x"3370782b", +2531 => x"79078118", +2532 => x"f81a5a58", +2533 => x"595a5488", +2534 => x"7524ea38", +2535 => x"76901b0c", +2536 => x"8b3d0d04", +2537 => x"e93d0d6a", +2538 => x"80e3a808", +2539 => x"57577593", +2540 => x"3880c080", +2541 => x"0b84180c", +2542 => x"75ac180c", +2543 => x"75800c99", +2544 => x"3d0d0489", +2545 => x"3d70556a", +2546 => x"54558a52", +2547 => x"993dffbc", +2548 => x"0551ffb8", +2549 => x"ed3f8008", +2550 => x"77537552", +2551 => x"56fd953f", +2552 => x"818e3f77", +2553 => x"80080c75", +2554 => x"800c993d", +2555 => x"0d04e93d", +2556 => x"0d695780", +2557 => x"e3a80880", +2558 => x"2eb73876", +2559 => x"51ffbfe6", +2560 => x"3f893d70", +2561 => x"56800881", +2562 => x"05557754", +2563 => x"568f5299", +2564 => x"3dffbc05", +2565 => x"51ffb8aa", +2566 => x"3f80086b", +2567 => x"53765257", +2568 => x"fcd23f80", +2569 => x"cb3f7780", +2570 => x"080c7680", +2571 => x"0c993d0d", +2572 => x"04be3f85", +2573 => x"0b80080c", +2574 => x"ff0b800c", +2575 => x"993d0d04", +2576 => x"fc3d0d81", +2577 => x"5480e3a8", +2578 => x"08883873", +2579 => x"800c863d", +2580 => x"0d047653", +2581 => x"97b95286", +2582 => x"3dfc0551", +2583 => x"ffb7e33f", +2584 => x"8008548c", +2585 => x"3f748008", +2586 => x"0c73800c", +2587 => x"863d0d04", +2588 => x"80d39c08", +2589 => x"800c04f7", +2590 => x"3d0d7b80", +2591 => x"d39c0882", +2592 => x"c811085a", +2593 => x"545a7780", +2594 => x"2e80da38", +2595 => x"81881884", +2596 => x"1908ff05", +2597 => x"81712b59", +2598 => x"55598074", +2599 => x"2480ea38", +2600 => x"807424b5", +2601 => x"3873822b", +2602 => x"78118805", +2603 => x"56568180", +2604 => x"19087706", +2605 => x"5372802e", +2606 => x"b6387816", +2607 => x"70085353", +2608 => x"79517408", +2609 => x"53722dff", +2610 => x"14fc17fc", +2611 => x"1779812c", +2612 => x"5a575754", +2613 => x"738025d6", +2614 => x"38770858", +2615 => x"77ffad38", +2616 => x"80d39c08", +2617 => x"53bc1308", +2618 => x"a5387951", +2619 => x"f78a3f74", +2620 => x"0853722d", +2621 => x"ff14fc17", +2622 => x"fc177981", +2623 => x"2c5a5757", +2624 => x"54738025", +2625 => x"ffa838d1", +2626 => x"398057ff", +2627 => x"93397251", +2628 => x"bc130854", +2629 => x"732d7951", +2630 => x"f6de3fff", +2631 => x"3d0d80e2", +2632 => x"e80bfc05", +2633 => x"70085252", +2634 => x"70ff2e91", +2635 => x"38702dfc", +2636 => x"12700852", +2637 => x"5270ff2e", +2638 => x"098106f1", +2639 => x"38833d0d", +2640 => x"0404ffb8", +2641 => x"e03f0400", +2642 => x"48656c6c", +2643 => x"6f20776f", +2644 => x"726c6420", +2645 => x"310a0000", +2646 => x"48656c6c", +2647 => x"6f20776f", +2648 => x"726c6420", +2649 => x"320a0000", +2650 => x"0a000000", +2651 => x"43000000", +2652 => x"64756d6d", +2653 => x"792e6578", +2654 => x"65000000", +2655 => x"00ffffff", +2656 => x"ff00ffff", +2657 => x"ffff00ff", +2658 => x"ffffff00", +2659 => x"00000000", +2660 => x"00000000", +2661 => x"00000000", +2662 => x"00003170", +2663 => x"000029a0", +2664 => x"00000000", +2665 => x"00002c08", +2666 => x"00002c64", +2667 => x"00002cc0", +2668 => x"00000000", +2669 => x"00000000", +2670 => x"00000000", +2671 => x"00000000", +2672 => x"00000000", +2673 => x"00000000", +2674 => x"00000000", +2675 => x"00000000", +2676 => x"00000000", +2677 => x"0000296c", +2678 => x"00000000", +2679 => x"00000000", +2680 => x"00000000", +2681 => x"00000000", +2682 => x"00000000", +2683 => x"00000000", +2684 => x"00000000", +2685 => x"00000000", +2686 => x"00000000", +2687 => x"00000000", +2688 => x"00000000", +2689 => x"00000000", +2690 => x"00000000", +2691 => x"00000000", +2692 => x"00000000", +2693 => x"00000000", +2694 => x"00000000", +2695 => x"00000000", +2696 => x"00000000", +2697 => x"00000000", +2698 => x"00000000", +2699 => x"00000000", +2700 => x"00000000", +2701 => x"00000000", +2702 => x"00000000", +2703 => x"00000000", +2704 => x"00000000", +2705 => x"00000000", +2706 => x"00000001", +2707 => x"330eabcd", +2708 => x"1234e66d", +2709 => x"deec0005", +2710 => x"000b0000", +2711 => x"00000000", +2712 => x"00000000", +2713 => x"00000000", +2714 => x"00000000", +2715 => x"00000000", +2716 => x"00000000", +2717 => x"00000000", +2718 => x"00000000", +2719 => x"00000000", +2720 => x"00000000", +2721 => x"00000000", +2722 => x"00000000", +2723 => x"00000000", +2724 => x"00000000", +2725 => x"00000000", +2726 => x"00000000", +2727 => x"00000000", +2728 => x"00000000", +2729 => x"00000000", +2730 => x"00000000", +2731 => x"00000000", +2732 => x"00000000", +2733 => x"00000000", +2734 => x"00000000", +2735 => x"00000000", +2736 => x"00000000", +2737 => x"00000000", +2738 => x"00000000", +2739 => x"00000000", +2740 => x"00000000", +2741 => x"00000000", +2742 => x"00000000", +2743 => x"00000000", +2744 => x"00000000", +2745 => x"00000000", +2746 => x"00000000", +2747 => x"00000000", +2748 => x"00000000", +2749 => x"00000000", +2750 => x"00000000", +2751 => x"00000000", +2752 => x"00000000", +2753 => x"00000000", +2754 => x"00000000", +2755 => x"00000000", +2756 => x"00000000", +2757 => x"00000000", +2758 => x"00000000", +2759 => x"00000000", +2760 => x"00000000", +2761 => x"00000000", +2762 => x"00000000", +2763 => x"00000000", +2764 => x"00000000", +2765 => x"00000000", +2766 => x"00000000", +2767 => x"00000000", +2768 => x"00000000", +2769 => x"00000000", +2770 => x"00000000", +2771 => x"00000000", +2772 => x"00000000", +2773 => x"00000000", +2774 => x"00000000", +2775 => x"00000000", +2776 => x"00000000", +2777 => x"00000000", +2778 => x"00000000", +2779 => x"00000000", +2780 => x"00000000", +2781 => x"00000000", +2782 => x"00000000", +2783 => x"00000000", +2784 => x"00000000", +2785 => x"00000000", +2786 => x"00000000", +2787 => x"00000000", +2788 => x"00000000", +2789 => x"00000000", +2790 => x"00000000", +2791 => x"00000000", +2792 => x"00000000", +2793 => x"00000000", +2794 => x"00000000", +2795 => x"00000000", +2796 => x"00000000", +2797 => x"00000000", +2798 => x"00000000", +2799 => x"00000000", +2800 => x"00000000", +2801 => x"00000000", +2802 => x"00000000", +2803 => x"00000000", +2804 => x"00000000", +2805 => x"00000000", +2806 => x"00000000", +2807 => x"00000000", +2808 => x"00000000", +2809 => x"00000000", +2810 => x"00000000", +2811 => x"00000000", +2812 => x"00000000", +2813 => x"00000000", +2814 => x"00000000", +2815 => x"00000000", +2816 => x"00000000", +2817 => x"00000000", +2818 => x"00000000", +2819 => x"00000000", +2820 => x"00000000", +2821 => x"00000000", +2822 => x"00000000", +2823 => x"00000000", +2824 => x"00000000", +2825 => x"00000000", +2826 => x"00000000", +2827 => x"00000000", +2828 => x"00000000", +2829 => x"00000000", +2830 => x"00000000", +2831 => x"00000000", +2832 => x"00000000", +2833 => x"00000000", +2834 => x"00000000", +2835 => x"00000000", +2836 => x"00000000", +2837 => x"00000000", +2838 => x"00000000", +2839 => x"00000000", +2840 => x"00000000", +2841 => x"00000000", +2842 => x"00000000", +2843 => x"00000000", +2844 => x"00000000", +2845 => x"00000000", +2846 => x"00000000", +2847 => x"00000000", +2848 => x"00000000", +2849 => x"00000000", +2850 => x"00000000", +2851 => x"00000000", +2852 => x"00000000", +2853 => x"00000000", +2854 => x"00000000", +2855 => x"00000000", +2856 => x"00000000", +2857 => x"00000000", +2858 => x"00000000", +2859 => x"00000000", +2860 => x"00000000", +2861 => x"00000000", +2862 => x"00000000", +2863 => x"00000000", +2864 => x"00000000", +2865 => x"00000000", +2866 => x"00000000", +2867 => x"00000000", +2868 => x"00000000", +2869 => x"00000000", +2870 => x"00000000", +2871 => x"00000000", +2872 => x"00000000", +2873 => x"00000000", +2874 => x"00000000", +2875 => x"00000000", +2876 => x"00000000", +2877 => x"00000000", +2878 => x"00000000", +2879 => x"00000000", +2880 => x"00000000", +2881 => x"00000000", +2882 => x"00000000", +2883 => x"00000000", +2884 => x"00000000", +2885 => x"00000000", +2886 => x"00000000", +2887 => x"00000000", +2888 => x"00000000", +2889 => x"00000000", +2890 => x"00000000", +2891 => x"00000000", +2892 => x"00000000", +2893 => x"00000000", +2894 => x"00000000", +2895 => x"00000000", +2896 => x"00000000", +2897 => x"00000000", +2898 => x"00000000", +2899 => x"ffffffff", +2900 => x"00000000", +2901 => x"00020000", +2902 => x"00000000", +2903 => x"00000000", +2904 => x"00002d58", +2905 => x"00002d58", +2906 => x"00002d60", +2907 => x"00002d60", +2908 => x"00002d68", +2909 => x"00002d68", +2910 => x"00002d70", +2911 => x"00002d70", +2912 => x"00002d78", +2913 => x"00002d78", +2914 => x"00002d80", +2915 => x"00002d80", +2916 => x"00002d88", +2917 => x"00002d88", +2918 => x"00002d90", +2919 => x"00002d90", +2920 => x"00002d98", +2921 => x"00002d98", +2922 => x"00002da0", +2923 => x"00002da0", +2924 => x"00002da8", +2925 => x"00002da8", +2926 => x"00002db0", +2927 => x"00002db0", +2928 => x"00002db8", +2929 => x"00002db8", +2930 => x"00002dc0", +2931 => x"00002dc0", +2932 => x"00002dc8", +2933 => x"00002dc8", +2934 => x"00002dd0", +2935 => x"00002dd0", +2936 => x"00002dd8", +2937 => x"00002dd8", +2938 => x"00002de0", +2939 => x"00002de0", +2940 => x"00002de8", +2941 => x"00002de8", +2942 => x"00002df0", +2943 => x"00002df0", +2944 => x"00002df8", +2945 => x"00002df8", +2946 => x"00002e00", +2947 => x"00002e00", +2948 => x"00002e08", +2949 => x"00002e08", +2950 => x"00002e10", +2951 => x"00002e10", +2952 => x"00002e18", +2953 => x"00002e18", +2954 => x"00002e20", +2955 => x"00002e20", +2956 => x"00002e28", +2957 => x"00002e28", +2958 => x"00002e30", +2959 => x"00002e30", +2960 => x"00002e38", +2961 => x"00002e38", +2962 => x"00002e40", +2963 => x"00002e40", +2964 => x"00002e48", +2965 => x"00002e48", +2966 => x"00002e50", +2967 => x"00002e50", +2968 => x"00002e58", +2969 => x"00002e58", +2970 => x"00002e60", +2971 => x"00002e60", +2972 => x"00002e68", +2973 => x"00002e68", +2974 => x"00002e70", +2975 => x"00002e70", +2976 => x"00002e78", +2977 => x"00002e78", +2978 => x"00002e80", +2979 => x"00002e80", +2980 => x"00002e88", +2981 => x"00002e88", +2982 => x"00002e90", +2983 => x"00002e90", +2984 => x"00002e98", +2985 => x"00002e98", +2986 => x"00002ea0", +2987 => x"00002ea0", +2988 => x"00002ea8", +2989 => x"00002ea8", +2990 => x"00002eb0", +2991 => x"00002eb0", +2992 => x"00002eb8", +2993 => x"00002eb8", +2994 => x"00002ec0", +2995 => x"00002ec0", +2996 => x"00002ec8", +2997 => x"00002ec8", +2998 => x"00002ed0", +2999 => x"00002ed0", +3000 => x"00002ed8", +3001 => x"00002ed8", +3002 => x"00002ee0", +3003 => x"00002ee0", +3004 => x"00002ee8", +3005 => x"00002ee8", +3006 => x"00002ef0", +3007 => x"00002ef0", +3008 => x"00002ef8", +3009 => x"00002ef8", +3010 => x"00002f00", +3011 => x"00002f00", +3012 => x"00002f08", +3013 => x"00002f08", +3014 => x"00002f10", +3015 => x"00002f10", +3016 => x"00002f18", +3017 => x"00002f18", +3018 => x"00002f20", +3019 => x"00002f20", +3020 => x"00002f28", +3021 => x"00002f28", +3022 => x"00002f30", +3023 => x"00002f30", +3024 => x"00002f38", +3025 => x"00002f38", +3026 => x"00002f40", +3027 => x"00002f40", +3028 => x"00002f48", +3029 => x"00002f48", +3030 => x"00002f50", +3031 => x"00002f50", +3032 => x"00002f58", +3033 => x"00002f58", +3034 => x"00002f60", +3035 => x"00002f60", +3036 => x"00002f68", +3037 => x"00002f68", +3038 => x"00002f70", +3039 => x"00002f70", +3040 => x"00002f78", +3041 => x"00002f78", +3042 => x"00002f80", +3043 => x"00002f80", +3044 => x"00002f88", +3045 => x"00002f88", +3046 => x"00002f90", +3047 => x"00002f90", +3048 => x"00002f98", +3049 => x"00002f98", +3050 => x"00002fa0", +3051 => x"00002fa0", +3052 => x"00002fa8", +3053 => x"00002fa8", +3054 => x"00002fb0", +3055 => x"00002fb0", +3056 => x"00002fb8", +3057 => x"00002fb8", +3058 => x"00002fc0", +3059 => x"00002fc0", +3060 => x"00002fc8", +3061 => x"00002fc8", +3062 => x"00002fd0", +3063 => x"00002fd0", +3064 => x"00002fd8", +3065 => x"00002fd8", +3066 => x"00002fe0", +3067 => x"00002fe0", +3068 => x"00002fe8", +3069 => x"00002fe8", +3070 => x"00002ff0", +3071 => x"00002ff0", +3072 => x"00002ff8", +3073 => x"00002ff8", +3074 => x"00003000", +3075 => x"00003000", +3076 => x"00003008", +3077 => x"00003008", +3078 => x"00003010", +3079 => x"00003010", +3080 => x"00003018", +3081 => x"00003018", +3082 => x"00003020", +3083 => x"00003020", +3084 => x"00003028", +3085 => x"00003028", +3086 => x"00003030", +3087 => x"00003030", +3088 => x"00003038", +3089 => x"00003038", +3090 => x"00003040", +3091 => x"00003040", +3092 => x"00003048", +3093 => x"00003048", +3094 => x"00003050", +3095 => x"00003050", +3096 => x"00003058", +3097 => x"00003058", +3098 => x"00003060", +3099 => x"00003060", +3100 => x"00003068", +3101 => x"00003068", +3102 => x"00003070", +3103 => x"00003070", +3104 => x"00003078", +3105 => x"00003078", +3106 => x"00003080", +3107 => x"00003080", +3108 => x"00003088", +3109 => x"00003088", +3110 => x"00003090", +3111 => x"00003090", +3112 => x"00003098", +3113 => x"00003098", +3114 => x"000030a0", +3115 => x"000030a0", +3116 => x"000030a8", +3117 => x"000030a8", +3118 => x"000030b0", +3119 => x"000030b0", +3120 => x"000030b8", +3121 => x"000030b8", +3122 => x"000030c0", +3123 => x"000030c0", +3124 => x"000030c8", +3125 => x"000030c8", +3126 => x"000030d0", +3127 => x"000030d0", +3128 => x"000030d8", +3129 => x"000030d8", +3130 => x"000030e0", +3131 => x"000030e0", +3132 => x"000030e8", +3133 => x"000030e8", +3134 => x"000030f0", +3135 => x"000030f0", +3136 => x"000030f8", +3137 => x"000030f8", +3138 => x"00003100", +3139 => x"00003100", +3140 => x"00003108", +3141 => x"00003108", +3142 => x"00003110", +3143 => x"00003110", +3144 => x"00003118", +3145 => x"00003118", +3146 => x"00003120", +3147 => x"00003120", +3148 => x"00003128", +3149 => x"00003128", +3150 => x"00003130", +3151 => x"00003130", +3152 => x"00003138", +3153 => x"00003138", +3154 => x"00003140", +3155 => x"00003140", +3156 => x"00003148", +3157 => x"00003148", +3158 => x"00003150", +3159 => x"00003150", +3160 => x"00002970", +3161 => x"ffffffff", +3162 => x"00000000", +3163 => x"ffffffff", +3164 => x"00000000", + others => x"00000000" +); + +begin + +process (clk) +begin + if (clk'event and clk = '1') then + mem_busy<=mem_writeEnable or mem_readEnable; + if (mem_writeEnable = '1') then + ram(conv_integer(mem_addr(maxAddrBit downto minAddrBit))) := mem_write; + end if; + if (mem_readEnable = '1') then + mem_read <= ram(conv_integer(mem_addr(maxAddrBit downto minAddrBit))); + end if; + end if; +end process; + + + + +end dram_arch; diff --git a/zpu/hdl/zpu4/src/fastdmips.do b/zpu/hdl/zpu4/src/fastdmips.do new file mode 100644 index 0000000..504bf60 --- /dev/null +++ b/zpu/hdl/zpu4/src/fastdmips.do @@ -0,0 +1,19 @@ +set BreakOnAssertion 1 +vlib work + +vcom -93 -explicit zpu_config_fastsim.vhd +vcom -93 -explicit zpupkg.vhd +vcom -93 -explicit txt_util.vhd +vcom -93 -explicit sim_fpga_top.vhd +vcom -93 -explicit zpu_core.vhd +vcom -93 -explicit dram_dmips.vhd +vcom -93 -explicit timer.vhd +vcom -93 -explicit io.vhd +vcom -93 -explicit trace.vhd + + +vsim fpga_top +view wave + +# run ZPU +run 60000 ms diff --git a/zpu/hdl/zpu4/src/fastdmipsintstack.do b/zpu/hdl/zpu4/src/fastdmipsintstack.do new file mode 100644 index 0000000..ee9571e --- /dev/null +++ b/zpu/hdl/zpu4/src/fastdmipsintstack.do @@ -0,0 +1,19 @@ +set BreakOnAssertion 1 +vlib work + +vcom -93 -explicit zpu_config_fastsim.vhd +vcom -93 -explicit zpupkg.vhd +vcom -93 -explicit txt_util.vhd +vcom -93 -explicit sim_fpga_top.vhd +vcom -93 -explicit zpu_core_intstack.vhd +vcom -93 -explicit dram_dmips.vhd +vcom -93 -explicit timer.vhd +vcom -93 -explicit io.vhd +vcom -93 -explicit trace.vhd + + +vsim fpga_top +view wave + +# run ZPU +run 60000 ms diff --git a/zpu/hdl/zpu4/src/fastdmipssmall.do b/zpu/hdl/zpu4/src/fastdmipssmall.do new file mode 100644 index 0000000..3eaa083 --- /dev/null +++ b/zpu/hdl/zpu4/src/fastdmipssmall.do @@ -0,0 +1,21 @@ +set BreakOnAssertion 1 +vlib work + + +vcom -93 -explicit zpu_config_trace.vhd +vcom -93 -explicit zpupkg.vhd +vcom -93 -explicit txt_util.vhd +vcom -93 -explicit sim_fpga_top.vhd +vcom -93 -explicit zpu_core_small.vhd +vcom -93 -explicit bram_dmips.vhd +vcom -93 -explicit dram_dmips.vhd +vcom -93 -explicit timer.vhd +vcom -93 -explicit io.vhd +vcom -93 -explicit trace.vhd + + +vsim fpga_top +view wave + +# run ZPU +run 60000 ms diff --git a/zpu/hdl/zpu4/src/fastsimzpu.do b/zpu/hdl/zpu4/src/fastsimzpu.do new file mode 100644 index 0000000..504bf60 --- /dev/null +++ b/zpu/hdl/zpu4/src/fastsimzpu.do @@ -0,0 +1,19 @@ +set BreakOnAssertion 1 +vlib work + +vcom -93 -explicit zpu_config_fastsim.vhd +vcom -93 -explicit zpupkg.vhd +vcom -93 -explicit txt_util.vhd +vcom -93 -explicit sim_fpga_top.vhd +vcom -93 -explicit zpu_core.vhd +vcom -93 -explicit dram_dmips.vhd +vcom -93 -explicit timer.vhd +vcom -93 -explicit io.vhd +vcom -93 -explicit trace.vhd + + +vsim fpga_top +view wave + +# run ZPU +run 60000 ms diff --git a/zpu/hdl/zpu4/src/ic300.bitgen b/zpu/hdl/zpu4/src/ic300.bitgen new file mode 100644 index 0000000..1095099 --- /dev/null +++ b/zpu/hdl/zpu4/src/ic300.bitgen @@ -0,0 +1,27 @@ +-g DebugBitstream:No +-g Binary:yes +-g CRC:Enable +-g ConfigRate:50 +-g CclkPin:Pullnone +-g M0Pin:Pullnone +-g M1Pin:Pullnone +-g M2Pin:Pullnone +-g ProgPin:PullUp +-g DonePin:Pullnone +-g TckPin:Pullnone +-g TdiPin:Pullnone +-g TdoPin:Pullnone +-g TmsPin:Pullnone +-g UnusedPin:Pullnone +-g UserID:0xFFFFFFFF +-g DCMShutDown:Disable +-g DCIUpdateMode:AsRequired +-g StartUpClk:CClk +-g DONE_cycle:4 +-g GTS_cycle:5 +-g GWE_cycle:6 +-g LCK_cycle:NoWait +-g Security:Level1 +-g DonePipe:No +-g DriveDone:Yes + diff --git a/zpu/hdl/zpu4/src/ic300.lso b/zpu/hdl/zpu4/src/ic300.lso new file mode 100644 index 0000000..22de730 --- /dev/null +++ b/zpu/hdl/zpu4/src/ic300.lso @@ -0,0 +1 @@ +work diff --git a/zpu/hdl/zpu4/src/ic300.ucf b/zpu/hdl/zpu4/src/ic300.ucf new file mode 100644 index 0000000..4a141b9 --- /dev/null +++ b/zpu/hdl/zpu4/src/ic300.ucf @@ -0,0 +1,146 @@ +# clock inputs +net "cpu_clk_p" loc = "R9" | iostandard=LVTTL; + +# input pins +net "cpu_a_p(0)" loc = "N15" | iostandard=LVTTL; +net "cpu_a_p(1)" loc = "P16" | iostandard=LVTTL; +net "cpu_a_p(2)" loc = "P13" | iostandard=LVTTL; +net "cpu_a_p(3)" loc = "N16" | iostandard=LVTTL; +net "cpu_a_p(4)" loc = "P15" | iostandard=LVTTL; +net "cpu_a_p(5)" loc = "R11" | iostandard=LVTTL; +net "cpu_a_p(6)" loc = "T14" | iostandard=LVTTL; +net "cpu_a_p(7)" loc = "R16" | iostandard=LVTTL; +net "cpu_a_p(8)" loc = "P14" | iostandard=LVTTL; +net "cpu_a_p(9)" loc = "T13" | iostandard=LVTTL; +net "cpu_a_p(10)" loc = "R13" | iostandard=LVTTL; +net "cpu_a_p(11)" loc = "P7" | iostandard=LVTTL; +net "cpu_a_p(12)" loc = "N12" | iostandard=LVTTL; +net "cpu_a_p(13)" loc = "R12" | iostandard=LVTTL; +net "cpu_a_p(14)" loc = "L13" | iostandard=LVTTL; +net "cpu_a_p(15)" loc = "K12" | iostandard=LVTTL; +net "cpu_a_p(16)" loc = "K15" | iostandard=LVTTL; +net "cpu_a_p(17)" loc = "T10" | iostandard=LVTTL; +net "cpu_a_p(18)" loc = "T9" | iostandard=LVTTL; +net "cpu_a_p(19)" loc = "N10" | iostandard=LVTTL; +net "cpu_a_p(20)" loc = "T8" | iostandard=LVTTL; +net "cpu_wr_n_p(0)" loc = "L15" | iostandard=LVTTL; +net "cpu_wr_n_p(1)" loc = "N14" | iostandard=LVTTL; +net "cpu_oe_n_p" loc = "T12" | iostandard=LVTTL; +net "cpu_cs_n_p(1)" loc = "R3" | iostandard=LVTTL; +net "cpu_cs_n_p(2)" loc = "M16" | iostandard=LVTTL; +net "cpu_cs_n_p(3)" loc = "P11" | iostandard=LVTTL; + +#net "sdr_clk_fb_p" loc = "B8" | iostandard=SSTL2_I; + +# output pins +net "cpu_fiq_p" loc = "K16" | iostandard=LVTTL; +net "cpu_irq_p(0)" loc = "M14" | iostandard=LVTTL; +net "cpu_irq_p(1)" loc = "J16" | iostandard=LVTTL; +net "cpu_wait_n_p" loc = "M15" | iostandard=LVTTL; + +#net "sdr_clk_p" loc = "D8" | iostandard=SSTL2_I | FAST; +#net "sdr_clk_n_p" loc = "F5" | iostandard=SSTL2_I | FAST; +#net "cke_q_p" loc = "F4" | iostandard=SSTL2_I | FAST; +#net "cs_qn_p" loc = "M2" | iostandard=SSTL2_I | FAST | PULLUP; +#net "ras_qn_p" loc = "J2" | iostandard=SSTL2_I | FAST | PULLUP | NODELAY; +#net "cas_qn_p" loc = "M3" | iostandard=SSTL2_I | FAST | PULLUP | NODELAY; +#net "we_qn_p" loc = "K4" | iostandard=SSTL2_I | FAST | PULLUP | NODELAY; +#net "dm_q_p(0)" loc = "L4" | iostandard=SSTL2_I | FAST; +#net "dm_q_p(1)" loc = "E4" | iostandard=SSTL2_I | FAST; +#net "dqs_q_p(0)" loc = "L3" | iostandard=SSTL2_I | FAST; +#net "dqs_q_p(1)" loc = "D3" | iostandard=SSTL2_I | FAST; +#net "ba_q_p(0)" loc = "M1" | iostandard=SSTL2_I | FAST; +#net "ba_q_p(1)" loc = "J3" | iostandard=SSTL2_I | FAST; +#net "sdr_a_p(0)" loc = "J4" | iostandard=SSTL2_I | FAST; +#net "sdr_a_p(1)" loc = "N2" | iostandard=SSTL2_I | FAST; +#net "sdr_a_p(2)" loc = "H4" | iostandard=SSTL2_I | FAST; +#net "sdr_a_p(3)" loc = "P2" | iostandard=SSTL2_I | FAST; +#net "sdr_a_p(4)" loc = "E7" | iostandard=SSTL2_I | FAST; +#net "sdr_a_p(5)" loc = "G4" | iostandard=SSTL2_I | FAST; +#net "sdr_a_p(6)" loc = "D7" | iostandard=SSTL2_I | FAST; +#net "sdr_a_p(7)" loc = "G5" | iostandard=SSTL2_I | FAST; +#net "sdr_a_p(8)" loc = "C7" | iostandard=SSTL2_I | FAST; +#net "sdr_a_p(9)" loc = "F3" | iostandard=SSTL2_I | FAST; +#net "sdr_a_p(10)" loc = "N3" | iostandard=SSTL2_I | FAST; +#net "sdr_a_p(11)" loc = "E6" | iostandard=SSTL2_I | FAST; +#net "sdr_a_p(12)" loc = "D6" | iostandard=SSTL2_I | FAST; + +# bidirectional pins +net "cpu_d_p(0)" loc = "M11" | iostandard=LVTTL; +net "cpu_d_p(1)" loc = "N11" | iostandard=LVTTL; +net "cpu_d_p(2)" loc = "P10" | iostandard=LVTTL; +net "cpu_d_p(3)" loc = "R10" | iostandard=LVTTL; +net "cpu_d_p(4)" loc = "T7" | iostandard=LVTTL; +net "cpu_d_p(5)" loc = "R7" | iostandard=LVTTL; +net "cpu_d_p(6)" loc = "N6" | iostandard=LVTTL; +net "cpu_d_p(7)" loc = "M6" | iostandard=LVTTL; +net "cpu_d_p(8)" loc = "K13" | iostandard=LVTTL; +net "cpu_d_p(9)" loc = "M10" | iostandard=LVTTL; +net "cpu_d_p(10)" loc = "L12" | iostandard=LVTTL; +net "cpu_d_p(11)" loc = "M13" | iostandard=LVTTL; +net "cpu_d_p(12)" loc = "K14" | iostandard=LVTTL; +net "cpu_d_p(13)" loc = "L14" | iostandard=LVTTL; +net "cpu_d_p(14)" loc = "J13" | iostandard=LVTTL; +net "cpu_d_p(15)" loc = "J14" | iostandard=LVTTL; + +#net "sdr_d_p(0)" loc = "G1" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(1)" loc = "H3" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(2)" loc = "G3" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(3)" loc = "K2" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(4)" loc = "F2" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(5)" loc = "L2" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(6)" loc = "E1" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(7)" loc = "M4" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(8)" loc = "C6" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(9)" loc = "E2" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(10)" loc = "C2" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(11)" loc = "D1" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(12)" loc = "B7" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(13)" loc = "D2" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(14)" loc = "B6" | iostandard=SSTL2_I | NODELAY | FAST; +#net "sdr_d_p(15)" loc = "B5" | iostandard=SSTL2_I | NODELAY | FAST; + +# TIMING +# Create timing names +NET "cpu_clk_p" TNM_NET = "cpu_clk_p"; +NET "sdr_clk_fb_p" TNM_NET = "sdr_clk_fb_p"; +#NET "cpu_clk" TNM_NET = "cpu_clk"; +#NET "cpu_clk_2x" TNM_NET = "cpu_clk_2x"; +#NET "cpu_clk_4x" TNM_NET = "cpu_clk_4x"; +#NET "ddr_in_clk" TNM_NET = "ddr_in_clk"; +#NET "ddr_in_clk_2x" TNM_NET = "ddr_in_clk_2x"; + +## Create timing + +# Periode timing +TIMESPEC "TS_cpu_clk" = PERIOD "cpu_clk_p" 10 ns HIGH 50 %; +#TIMESPEC "TS_sdr_clk_fb_p" = PERIOD "sdr_clk_fb_p" 7.8 ns HIGH 50 %; + +# Clock domain crossing timing +#TIMESPEC "TS_cpu1_to_cpu2" = FROM "cpu_clk" TO "cpu_clk_2x" 7.8 ns; +#TIMESPEC "TS_cpu1_to_cpu4" = FROM "cpu_clk" TO "cpu_clk_4x" 3.9 ns; +#TIMESPEC "TS_cpu1_to_ddr2" = FROM "cpu_clk" TO "ddr_in_clk" 7.8 ns; +#TIMESPEC "TS_cpu1_to_ddr2_2x" = FROM "cpu_clk" TO "ddr_in_clk_2x" 3.9 ns; + +#TIMESPEC "TS_cpu2_to_cpu1" = FROM "cpu_clk_2x" TO "cpu_clk" 7.8 ns; +#TIMESPEC "TS_cpu2_to_cpu4" = FROM "cpu_clk_2x" TO "cpu_clk_4x" 3.9 ns; +#TIMESPEC "TS_cpu2_to_ddr2" = FROM "cpu_clk_2x" TO "ddr_in_clk" 7.8 ns; +#TIMESPEC "TS_cpu2_to_ddr_2x" = FROM "cpu_clk_2x" TO "ddr_in_clk_2x" 3.9 ns; + +#TIMESPEC "TS_cpu4_to_cpu1" = FROM "cpu_clk_4x" TO "cpu_clk" 3.9 ns; +#TIMESPEC "TS_cpu4_to_cpu2" = FROM "cpu_clk_4x" TO "cpu_clk_2x" 3.9 ns; +#TIMESPEC "TS_cpu4_to_ddr2" = FROM "cpu_clk_4x" TO "ddr_in_clk" 3.9 ns; +#TIMESPEC "TS_cpu4_to_ddr2_2x" = FROM "cpu_clk_4x" TO "ddr_in_clk_2x" 3.9 ns; + +#TIMESPEC "TS_ddr2_to_cpu1" = FROM "ddr_in_clk" TO "cpu_clk" 7.8 ns; +#TIMESPEC "TS_ddr2_to_cpu2" = FROM "ddr_in_clk" TO "cpu_clk_2x" 7.8 ns; +#TIMESPEC "TS_ddr2_to_cpu4" = FROM "ddr_in_clk" TO "cpu_clk_4x" 3.9 ns; +#TIMESPEC "TS_ddr2_to_ddr2_2x" = FROM "ddr_in_clk" TO "ddr_in_clk_2x" 3.9 ns; + +#TIMESPEC "TS_ddr2_2x_to_cpu1" = FROM "ddr_in_clk_2x" TO "cpu_clk" 3.9 ns; +#TIMESPEC "TS_ddr2_2x_to_cpu2" = FROM "ddr_in_clk_2x" TO "cpu_clk_2x" 3.9 ns; +#TIMESPEC "TS_ddr2_2x_to_cpu4" = FROM "ddr_in_clk_2x" TO "cpu_clk_4x" 3.9 ns; +#TIMESPEC "TS_ddr2_2x_to_ddr2" = FROM "ddr_in_clk_2x" TO "ddr_in_clk" 3.9 ns; + + + diff --git a/zpu/hdl/zpu4/src/ic300.vhd b/zpu/hdl/zpu4/src/ic300.vhd new file mode 100644 index 0000000..a1b4f41 --- /dev/null +++ b/zpu/hdl/zpu4/src/ic300.vhd @@ -0,0 +1,144 @@ +-------------------------------------------------------------------------------- +-- Company: Zylin AS +-- Engineer: Tore Ramsland +-- +-- Create Date: 21:47:41 07/03/05 +-- Design Name: ic300 +-- Module Name: ic300 - behave +-- Project Name: eCosBoard +-- Target Device: XC3S400400-FG256 +-- Tool versions: 7.1i +-- Description: Top level +-- +-- Dependencies: +-- +-- Revision: +-- 2005-07-11 Updated to test FPGA +-- +-------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +library UNISIM; +use UNISIM.VComponents.all; + +library zylin; +use zylin.arm7.all; + +library zylin; +use zylin.zpu_config.all; +use zylin.zpupkg.all; + +library work; +use work.phi_config.all; +use work.ic300pkg.all; + +entity ic300 is + generic( + simulate_io_time : boolean := false); + port ( -- Clock inputs + cpu_clk_p : in std_logic; + + -- CPU interface signals + cpu_a_p : in std_logic_vector(20 downto 0); + cpu_wr_n_p : in std_logic_vector(1 downto 0); + cpu_cs_n_p : in std_logic_vector(3 downto 1); + cpu_oe_n_p : in std_logic; + cpu_d_p : inout std_logic_vector(15 downto 0); + cpu_irq_p : out std_logic_vector(1 downto 0); + cpu_fiq_p : out std_logic; + cpu_wait_n_p : out std_logic; + + -- DDR SDRAM Signals + sdr_clk_p : out std_logic; -- ddr_sdram_clock + sdr_clk_n_p : out std_logic; -- /ddr_sdram_clock + cke_q_p : out std_logic; -- clock enable + cs_qn_p : out std_logic; -- /chip select + ras_qn_p : inout std_logic; -- /ras + cas_qn_p : inout std_logic; -- /cas + we_qn_p : inout std_logic; -- /write enable + dm_q_p : out std_logic_vector(1 downto 0); -- data mask bits, set to "00" + dqs_q_p : out std_logic_vector(1 downto 0); -- data strobe, only for write + ba_q_p : out std_logic_vector(1 downto 0); -- bank select + sdr_a_p : out std_logic_vector(12 downto 0); -- address bus + sdr_d_p : inout std_logic_vector(15 downto 0); -- bidir data bus + sdr_clk_fb_p : in std_logic -- DDR clock feedback + ); +end ic300; + +architecture behave of ic300 is + +signal cpu_we : std_logic_vector(1 downto 0); -- Write signal for lower(0) and upper(1) 8 data bits +signal cpu_re : std_logic; -- Read enable signal for all 16 bits +signal areset : std_logic; -- Asyncronous active high reset (for initialization) +signal areset_dummy : std_logic; + +-- Clock module signals +signal clk_status : std_logic_vector(2 downto 0); -- DLL lock status (from 3 DLL's) +signal cpu_clk : std_logic; -- 64 MHz CPU clk +signal cpu_clk_2x : std_logic; -- 128 MHz CPU clk (in phase with 64 MHz) +signal cpu_clk_4x : std_logic; -- 256 MHz CPU clk (in phase with 64 MHz) +signal ddr_in_clk : std_logic; -- 128 MHz clock from DDR SDRAM +signal ddr_in_clk_2x : std_logic; -- 256 MHz clock from DDR SDRAM + -- NOTE! Phase relation to 64 MHz clock unknown + +-- Internal CPU interface signals +signal cpu_din : std_logic_vector(15 downto 0); -- 16-bit data from CPU +signal cpu_dout : std_logic_vector(15 downto 0); -- 16-bit data to CPU +signal cpu_a : std_logic_vector(20 downto 0); -- 21-bit address from CPU + +begin + +-- areset <= '0'; + areset_dummy <= '0'; + + global_init_reset: + rocbuf port map(I=>areset_dummy,O=>areset); + + allclocks: + clocks port map( + areset => areset, + cpu_clk_p => cpu_clk_p, + cpu_clk => cpu_clk, + cpu_clk_2x => cpu_clk_2x, + cpu_clk_4x => cpu_clk_4x, + sdr_clk_fb_p => sdr_clk_fb_p, + ddr_in_clk => ddr_in_clk, + ddr_in_clk_2x => ddr_in_clk_2x, + locked => clk_status); + + arm7cpu: + arm7wb generic map (simulate_io_time => simulate_io_time) + port map( + areset => areset, + cpu_clk => cpu_clk, + cpu_clk_2x => cpu_clk_2x, + cpu_a_p => cpu_a_p, + cpu_wr_n_p => cpu_wr_n_p, + cpu_cs_n_p => cpu_cs_n_p, + cpu_oe_n_p => cpu_oe_n_p, + cpu_d_p => cpu_d_p, + cpu_irq_p => cpu_irq_p, + cpu_fiq_p => cpu_fiq_p, + cpu_wait_n_p => cpu_wait_n_p, + cpu_din => cpu_din, + cpu_a => cpu_a, + cpu_we => cpu_we, + cpu_re => cpu_re, + cpu_dout => cpu_dout); + + + cpu_fpga_regs: + zpuio port map( + areset => areset, + cpu_clk => cpu_clk, + clk_status => clk_status, + cpu_din => cpu_din, + cpu_a => cpu_a, + cpu_we => cpu_we, + cpu_re => cpu_re, + cpu_dout => cpu_dout); + + +end behave; diff --git a/zpu/hdl/zpu4/src/ic300_config.vhd b/zpu/hdl/zpu4/src/ic300_config.vhd new file mode 100644 index 0000000..b14ec79 --- /dev/null +++ b/zpu/hdl/zpu4/src/ic300_config.vhd @@ -0,0 +1,26 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; + +package phi_config is + + constant Fpga_Global_Base : std_logic_vector(19 downto 17) := "000"; -- 0x0800.... + constant Clock_Stat_Reg_Addr : std_logic_vector(5 downto 2) := "0000"; -- 0x....0000 + constant Ctrl_Reg_Addr : std_logic_vector(5 downto 2) := "0001"; -- 0x....0004 + constant output_enable : std_logic_vector(5 downto 2) := "0010"; -- 0x....0008 + constant output_disable : std_logic_vector(5 downto 2) := "0011"; -- 0x....000C + constant data_status : std_logic_vector(5 downto 2) := "0100"; -- 0x....0010 + constant set_output_data : std_logic_vector(5 downto 2) := "0101"; -- 0x....0014 + constant clear_output_data : std_logic_vector(5 downto 2) := "0110"; -- 0x....0018 + constant data_in_read : std_logic_vector(5 downto 2) := "0111"; -- 0x....001C + constant output_status : std_logic_vector(5 downto 2) := "1000"; -- 0x....0020 + constant cpu_access_address : std_logic_vector(5 downto 2) := "1001"; -- 0x....0024 + + constant Fpga_Ethernet_Reg_Base : std_logic_vector(19 downto 17) := "110"; -- 0x080C0000 + + constant Fpga_DDR_Ctrl_Base : std_logic_vector(19 downto 17) := "111"; -- 0x080E.... + constant DDR_Ctrl_Reg_Addr : std_logic_vector(3 downto 2) := "00"; -- 0x....0000 + constant DDR_Mode_Reg_Addr : std_logic_vector(3 downto 2) := "01"; -- 0x....0004 + constant DDR_Page_Select_Addr : std_logic_vector(3 downto 2) := "10"; -- 0x....0008 + + +end phi_config; diff --git a/zpu/hdl/zpu4/src/ic300pkg.vhd b/zpu/hdl/zpu4/src/ic300pkg.vhd new file mode 100644 index 0000000..13da306 --- /dev/null +++ b/zpu/hdl/zpu4/src/ic300pkg.vhd @@ -0,0 +1,88 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; + +package ic300pkg is + + component ic300 is + port ( -- Clock inputs + cpu_clk_p : in std_logic; + + -- CPU interface signals + cpu_a_p : in std_logic_vector(20 downto 0); + cpu_wr_n_p : in std_logic_vector(1 downto 0); + cpu_cs_n_p : in std_logic_vector(3 downto 1); + cpu_oe_n_p : in std_logic; + cpu_d_p : inout std_logic_vector(15 downto 0); + cpu_irq_p : out std_logic_vector(1 downto 0); + cpu_fiq_p : out std_logic; + cpu_wait_n_p : out std_logic; + + -- DDR SDRAM Signals + sdr_clk_p : out std_logic; -- ddr_sdram_clock + sdr_clk_n_p : out std_logic; -- /ddr_sdram_clock + cke_q_p : out std_logic; -- clock enable + cs_qn_p : out std_logic; -- /chip select + ras_qn_p : inout std_logic; -- /ras + cas_qn_p : inout std_logic; -- /cas + we_qn_p : inout std_logic; -- /write enable + dm_q_p : out std_logic_vector(1 downto 0); -- data mask bits, set to "00" + dqs_q_p : out std_logic_vector(1 downto 0); -- data strobe, only for write + ba_q_p : out std_logic_vector(1 downto 0); -- bank select + sdr_a_p : out std_logic_vector(12 downto 0); -- address bus + sdr_d_p : inout std_logic_vector(15 downto 0); -- bidir data bus + sdr_clk_fb_p : in std_logic -- DDR clock feedback + ); + end component; + + component clocks is + port ( areset : in std_logic; + cpu_clk_p : in std_logic; + sdr_clk_fb_p : in std_logic; + cpu_clk : out std_logic; + cpu_clk_2x : out std_logic; + cpu_clk_4x : out std_logic; + ddr_in_clk : out std_logic; + ddr_in_clk_2x : out std_logic; + locked : out std_logic_vector(2 downto 0)); + end component; + + component cpu_regs is + port ( areset : in std_logic; + cpu_clk : in std_logic; + clk_status : in std_logic_vector(2 downto 0); + cpu_din : in std_logic_vector(15 downto 0); + cpu_a : in std_logic_vector(20 downto 0); + cpu_we : in std_logic_vector(1 downto 0); + cpu_re : in std_logic; + cpu_dout : inout std_logic_vector(15 downto 0)); + end component; + + component ddr_bridge is + port ( areset : in std_logic; + cpu_clk : in std_logic; + cpu_clk_2x : in std_logic; + cpu_clk_4x : in std_logic; + ddr_in_clk : in std_logic; + ddr_in_clk_2x : in std_logic; + + cpu_we : in std_logic_vector(1 downto 0); + cpu_re : in std_logic; + cpu_din : in std_logic_vector(15 downto 0); + cpu_a : in std_logic_vector(20 downto 0); + cpu_dout : inout std_logic_vector(15 downto 0); + + sdr_clk_p : out std_logic; -- ddr_sdram_clock + sdr_clk_n_p : out std_logic; -- /ddr_sdram_clock + cke_q_p : out std_logic; -- clock enable + cs_qn_p : out std_logic; -- /chip select + ras_qn_p : inout std_logic; -- /ras + cas_qn_p : inout std_logic; -- /cas + we_qn_p : inout std_logic; -- /write enable + dm_q_p : out std_logic_vector(1 downto 0); -- data mask bits, set to "00" + dqs_q_p : out std_logic_vector(1 downto 0); -- data strobe, only for write + ba_q_p : out std_logic_vector(1 downto 0); -- bank select + sdr_a_p : out std_logic_vector(12 downto 0); -- address bus + sdr_d_p : inout std_logic_vector(15 downto 0)); -- bidir data bus + end component; + +end ic300pkg; diff --git a/zpu/hdl/zpu4/src/io.vhd b/zpu/hdl/zpu4/src/io.vhd new file mode 100644 index 0000000..b5465d1 --- /dev/null +++ b/zpu/hdl/zpu4/src/io.vhd @@ -0,0 +1,92 @@ +library ieee; +use ieee.std_logic_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +use std.textio.all; + +library work; +use work.zpu_config.all; +use work.zpupkg.all; +use work.txt_util.all; + +entity zpu_io is + generic ( + log_file: string := "log.txt" + ); + port( + clk : in std_logic; + areset : in std_logic; + busy : out std_logic; + writeEnable : in std_logic; + readEnable : in std_logic; + write : in std_logic_vector(7 downto 0); + read : out std_logic_vector(7 downto 0); + addr : in std_logic_vector(maxAddrBit downto minAddrBit) + ); +end zpu_io; + + +architecture behave of zpu_io is + + + +signal timer_read : std_logic_vector(7 downto 0); +--signal timer_write : std_logic_vector(7 downto 0); +signal timer_we : std_logic; + +signal serving : std_logic; + +file l_file : TEXT open write_mode is log_file; + +begin + + + timerinst: timer port map ( + clk => clk, + areset => areset, + we => timer_we, + din => write, + adr => addr(4 downto 2), + dout => timer_read); + + busy <= writeEnable or readEnable; + timer_we <= writeEnable and addr(12); + + process(areset, clk) + begin + if (areset = '1') then +-- timer_we <= '0'; + elsif (clk'event and clk = '1') then +-- timer_we <= '0'; + if writeEnable = '1' then + -- external interface + if addr=x"1000" then + -- Write to UART + -- report "" & character'image(conv_integer(memBint)) severity note; + print(l_file, character'val(conv_integer(write))); + elsif addr(12)='1' then +-- report "xxx" severity failure; +-- timer_we <= '1'; + else + report "Illegal IO write" severity failure; + end if; + + end if; + read <= (others => 'U'); + if (readEnable = '1') then + if addr=x"1001" then + read <= (0=>'1', others => '0'); -- recieve empty + elsif addr(12)='1' then + read <= timer_read; + elsif addr(11)='1' then + read <= ZPU_Frequency; + else + report "Illegal IO read" severity failure; + end if; + end if; + end if; + end process; + + +end behave; + diff --git a/zpu/hdl/zpu4/src/log.txt b/zpu/hdl/zpu4/src/log.txt new file mode 100644 index 0000000..af58c93 --- /dev/null +++ b/zpu/hdl/zpu4/src/log.txt @@ -0,0 +1,380 @@ +H +e +l +l +o + +w +o +r +l +d + +1 + + + + + + +H +e +l +l +o + +w +o +r +l +d + +2 + + + + + + +H +e +l +l +o + +w +o +r +l +d + +1 + + + + + + +H +e +l +l +o + +w +o +r +l +d + +2 + + + + + + +H +e +l +l +o + +w +o +r +l +d + +1 + + + + + + +H +e +l +l +o + +w +o +r +l +d + +2 + + + + + + +H +e +l +l +o + +w +o +r +l +d + +1 + + + + + + +H +e +l +l +o + +w +o +r +l +d + +2 + + + + + + +H +e +l +l +o + +w +o +r +l +d + +1 + + + + + + +H +e +l +l +o + +w +o +r +l +d + +2 + + + + + + +H +e +l +l +o + +w +o +r +l +d + +1 + + + + + + +H +e +l +l +o + +w +o +r +l +d + +2 + + + + + + +H +e +l +l +o + +w +o +r +l +d + +1 + + + + + + +H +e +l +l +o + +w +o +r +l +d + +2 + + + + + + +H +e +l +l +o + +w +o +r +l +d + +1 + + + + + + +H +e +l +l +o + +w +o +r +l +d + +2 + + + + + + +H +e +l +l +o + +w +o +r +l +d + +1 + + + + + + +H +e +l +l +o + +w +o +r +l +d + +2 + + + + + + +H +e +l +l +o + +w +o +r +l +d + +1 + + + + + + +H +e +l +l +o + +w +o +r +l +d + +2 + + + + + + diff --git a/zpu/hdl/zpu4/src/niltrace.vhd b/zpu/hdl/zpu4/src/niltrace.vhd new file mode 100644 index 0000000..40fc1ca --- /dev/null +++ b/zpu/hdl/zpu4/src/niltrace.vhd @@ -0,0 +1,26 @@ +library ieee; +use ieee.std_logic_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +use std.textio.all; +use work.zpu_config.all; + + +entity trace is + port( + clk : in std_logic; + begin_inst : in std_logic; + pc : in std_logic_vector(maxAddrBit downto 0); + opcode : in std_logic_vector(7 downto 0); + sp : in std_logic_vector(maxAddrBit downto 2); + memA : in std_logic_vector(wordSize-1 downto 0); + busy : in std_logic); +end trace; + + +architecture behave of trace is + +begin + +end behave; + diff --git a/zpu/hdl/zpu4/src/sim_fpga_top.vhd b/zpu/hdl/zpu4/src/sim_fpga_top.vhd new file mode 100644 index 0000000..2905505 --- /dev/null +++ b/zpu/hdl/zpu4/src/sim_fpga_top.vhd @@ -0,0 +1,190 @@ +-------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 20:15:31 04/14/05 +-- Design Name: +-- Module Name: fpga_top - behave +-- Project Name: +-- Target Device: +-- Tool versions: +-- Description: +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +-------------------------------------------------------------------------------- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +---- Uncomment the following library declaration if instantiating +---- any Xilinx primitives in this code. +library UNISIM; +use UNISIM.VComponents.all; + +library work; +use work.zpu_config.all; +use work.zpupkg.all; + +entity fpga_top is +end fpga_top; + +architecture behave of fpga_top is + + +signal clk : std_logic; + +signal areset : std_logic; + + +component zpu_io is + generic ( + log_file: string := "log.txt" + ); + port( + clk : in std_logic; + areset : in std_logic; + busy : out std_logic; + writeEnable : in std_logic; + readEnable : in std_logic; + write : in std_logic_vector(7 downto 0); + read : out std_logic_vector(7 downto 0); + addr : in std_logic_vector(maxAddrBit downto minAddrBit) + ); +end component; + + + + + +signal mem_busy : std_logic; +signal mem_read : std_logic_vector(wordSize-1 downto 0); +signal mem_write : std_logic_vector(wordSize-1 downto 0); +signal mem_addr : std_logic_vector(maxAddrBitIncIO downto 0); +signal mem_writeEnable : std_logic; +signal mem_readEnable : std_logic; +signal mem_writeMask: std_logic_vector(wordBytes-1 downto 0); + +signal enable : std_logic; + +signal dram_mem_busy : std_logic; +signal dram_mem_read : std_logic_vector(wordSize-1 downto 0); +signal dram_mem_write : std_logic_vector(wordSize-1 downto 0); +signal dram_mem_writeEnable : std_logic; +signal dram_mem_readEnable : std_logic; +signal dram_mem_writeMask: std_logic_vector(wordBytes-1 downto 0); + + +signal io_busy : std_logic; + +signal io_mem_read : std_logic_vector(7 downto 0); +signal io_mem_writeEnable : std_logic; +signal io_mem_readEnable : std_logic; + + +signal dram_ready : std_logic; +signal io_ready : std_logic; +signal io_reading : std_logic; + + +signal break : std_logic; + +begin + poweronreset: roc port map (O => areset); + + + + zpu: zpu_core port map ( + clk => clk , + areset => areset, + enable => enable, + in_mem_busy => mem_busy, + mem_read => mem_read, + mem_write => mem_write, + out_mem_addr => mem_addr, + out_mem_writeEnable => mem_writeEnable, + out_mem_readEnable => mem_readEnable, + mem_writeMask => mem_writeMask, + interrupt => '0', + break => break); + + dram_imp: dram port map ( + clk => clk , + areset => areset, + mem_busy => dram_mem_busy, + mem_read => dram_mem_read, + mem_write => mem_write, + mem_addr => mem_addr(maxAddrBit downto 0), + mem_writeEnable => dram_mem_writeEnable, + mem_readEnable => dram_mem_readEnable, + mem_writeMask => mem_writeMask); + + + ioMap: zpu_io port map ( + clk => clk, + areset => areset, + busy => io_busy, + writeEnable => io_mem_writeEnable, + readEnable => io_mem_readEnable, + write => mem_write(7 downto 0), + read => io_mem_read, + addr => mem_addr(maxAddrBit downto minAddrBit) + ); + + dram_mem_writeEnable <= mem_writeEnable and not mem_addr(ioBit); + dram_mem_readEnable <= mem_readEnable and not mem_addr(ioBit); + io_mem_writeEnable <= mem_writeEnable and mem_addr(ioBit); + io_mem_readEnable <= mem_readEnable and mem_addr(ioBit); + mem_busy <= io_busy or dram_mem_busy or io_busy; + + + + -- Memory reads either come from IO or DRAM. We need to pick the right one. + memorycontrol: + process(dram_mem_read, dram_ready, io_ready, io_mem_read) + begin + mem_read <= (others => 'U'); + if dram_ready='1' then + mem_read <= dram_mem_read; + end if; + + if io_ready='1' then + mem_read <= (others => '0'); + mem_read(7 downto 0) <= io_mem_read; + end if; + end process; + + + io_ready <= (io_reading or io_mem_readEnable) and not io_busy; + + memoryControlSync: + process(clk, areset) + begin + if areset = '1' then + enable <= '0'; + io_reading <= '0'; + dram_ready <= '0'; + elsif (clk'event and clk = '1') then + enable <= '1'; + io_reading <= io_busy or io_mem_readEnable; + dram_ready<=dram_mem_readEnable; + + end if; + end process; + + -- wiggle the clock @ 100MHz + clock : PROCESS + begin + clk <= '0'; + wait for 5 ns; + clk <= '1'; + wait for 5 ns; + end PROCESS clock; + + +end behave; diff --git a/zpu/hdl/zpu4/src/simzpu.do b/zpu/hdl/zpu4/src/simzpu.do new file mode 100644 index 0000000..e6e3068 --- /dev/null +++ b/zpu/hdl/zpu4/src/simzpu.do @@ -0,0 +1,23 @@ +set BreakOnAssertion 1 +vlib work + +vcom -93 -explicit zpu_config.vhd +vcom -93 -explicit zpupkg.vhd +vcom -93 -explicit txt_util.vhd +vcom -93 -explicit sim_fpga_top.vhd +vcom -93 -explicit zpu_core.vhd +vcom -93 -explicit dram.vhd +vcom -93 -explicit timer.vhd +vcom -93 -explicit io.vhd +vcom -93 -explicit trace.vhd + +# run ZPU +vsim fpga_top +view wave +add wave -recursive fpga_top/zpu/* +#add wave -recursive fpga_top/* +view structure +#view signals + +# Enough to run tiny programs +run 1000 ms diff --git a/zpu/hdl/zpu4/src/simzpu_intstack.do b/zpu/hdl/zpu4/src/simzpu_intstack.do new file mode 100644 index 0000000..cec4873 --- /dev/null +++ b/zpu/hdl/zpu4/src/simzpu_intstack.do @@ -0,0 +1,23 @@ +set BreakOnAssertion 1 +vlib work + +vcom -93 -explicit zpu_config_trace.vhd +vcom -93 -explicit zpupkg.vhd +vcom -93 -explicit txt_util.vhd +vcom -93 -explicit sim_fpga_top.vhd +vcom -93 -explicit zpu_core_intstack.vhd +vcom -93 -explicit dram_hello.vhd +vcom -93 -explicit timer.vhd +vcom -93 -explicit io.vhd +vcom -93 -explicit trace.vhd + +# run ZPU +vsim fpga_top +view wave +add wave -recursive fpga_top/zpu/* +#add wave -recursive fpga_top/* +view structure +#view signals + +# Enough to run tiny programs +run 15 ms diff --git a/zpu/hdl/zpu4/src/status.txt b/zpu/hdl/zpu4/src/status.txt new file mode 100644 index 0000000..df01caf --- /dev/null +++ b/zpu/hdl/zpu4/src/status.txt @@ -0,0 +1,109 @@ +- Before NEQBRANCH opt 4.684 DMIPS 8.0 cycles average, after +- opcode pairs + +0x6060 0.1519223038446077 75961 9.048362120309708 LOADSP + LOADSP +0x4040 0.13967027934055867 69835 11.08668042546436 STORESP + STORESP +0x8038 0.10230620461240922 51153 10.251102204408818 IM + NEQBRANCH +0x4060 0.09856219712439425 49281 9.822802471596571 STORESP + LOADSP +0x6080 0.09734219468438937 48671 6.483415478886373 LOADSP + IM +0x3860 0.08642217284434568 43211 12.616350364963504 NEQBRANCH + LOADSP +0x8080 0.060966121932243864 30483 4.275915275634731 IM + IM +0x8005 0.05317010634021268 26585 6.572311495673671 IM + ADD +0x540 0.05215210430420861 26076 9.339541547277937 ADD + STORESP +0x3d0d 0.050808101616203236 25404 12.398243045387995 +0xd04 0.0466000932001864 23300 20.0 +0x6040 0.04389608779217558 21948 9.460344827586207 +0x4080 0.043648087296174594 21824 7.630769230769231 +0xc80 0.03966807933615867 19834 11.438292964244521 +0x8010 0.0391500783001566 19575 6.1248435544430535 +0x480 0.038798077596155195 19399 10.941342357586013 + + +- zpu_core.vhd: 1500 LUTs. Xilinx ISE reports 83MHz maximum frequency after P&R + which matches what I've found w/my ic300.vhd testbench + +- zpu_core_instack.vhd + - problems w/simulation trace since storeb/loadb will run into undefined memory + during emulation. Solution: implement loadb+storeb. + - simulation needs to read cycles from ModelSim trace so as to m ake readcycles + not cause false positives. This has other interesting potentials w.r.t. + knowing which instructions take the longest. + +- Ca. 1700 LUT inc. all instructions. Removing all higher level instructions + => 1300. + +- Review memory interface + - When is mem_busy high? Will it be high on the next cycle after + I've send mem_read/writeEnable? + - Should I hold off posting a read/write until mem_busy = '0'? + - Write posting could increase performance somewhat. Should there be + a seperate write busy signal? + - Synchronous reset? The ARM7 will have to copy the program to DRAM and + then start the ZPU. + +- Current instruction set has + - 31 DMIPS single cycle performance Simulator.java + - 8 DMIPS w/single cycle RAM access in ModelSim + +112 0.06100380865858346 67215918 +56 0.04139603650830458 45611457 +129 0.0375812381475752 41408192 +5 0.03703417264799563 40805418 +113 0.03540341331682748 39008596 +128 0.0343154384313754 37809831 +83 0.03322159422742951 36604599 +114 0.03213492807203279 35407276 +132 0.03158580962697109 34802240 +12 0.03049709687915076 33602662 +8 0.029409690138646426 32404523 +115 0.026690690908727877 29408644 +46 0.025054316381406774 27605635 +82 0.023965804208719754 26406278 +84 0.023961360698074072 26401382 +116 0.023417718589457643 25802380 +81 0.02179306727026773 24012288 +117 0.021783900714401432 24002188 +4 0.01797685126990833 19807461 +6 0.016340292503890113 18004249 +85 0.016339001017850734 18002826 +255 0.016338918428089957 18002735 +86 0.016337281154151066 18000931 +11 0.011984767180825744 13205194 +51 0.0114390303780569 12603884 +38 0.010892246228211845 12001420 +118 0.010347263624247446 11400941 +131 0.009257503529350904 10200209 +7 0.008713386756504965 9600684 +22 0.008712946580307425 9600199 + + +64 0.16176824859336478 178241352 +96 0.23147927881894828 255051161 +128 0.2646966482624612 291651105 + + +- Alternate memory interface to allow more caching in memory subsystem? + +-- The memory interface allows a dual port memory to be used +-- to increase performance. +-- +-- Also it is possible to implement a zero cycle register file instead +-- of memory, though obviously that will cause problems w.r.t. max +-- frequency for the ZPU. +-- +-- mem_writeEnable - set to '1' for a single cycle to send off a write request. +-- mem_write is valid only while mem_writeEnable='1'. +-- mem_readEnable - set to '1' for a single cycle to send off a read request. +-- mem_read is a single cycle while mem_read_busy='0'. +-- +-- mem_read/write_busy - It is illegal to send off a read/write request when mem_read/write_busy='1'. +-- Set to '0' when mem_read is valid after a read request. Note that +-- the definition allows zero wait state ram. +-- mem_read/write_addr - address for read/write request +-- mem_read - read data. Valid only on the cycle after mem_busy='0' after +-- mem_readEnable='1' for a single cycle. +-- mem_write - data to write +-- mem_writeMask - set to '1' for those bits that are to be written to memory upon +-- write request +-- break - set to '1' when CPU hits break instruction +-- interrupt - set to '1' until interrupts are cleared by CPU. diff --git a/zpu/hdl/zpu4/src/testlut.vhd b/zpu/hdl/zpu4/src/testlut.vhd new file mode 100644 index 0000000..668efcc --- /dev/null +++ b/zpu/hdl/zpu4/src/testlut.vhd @@ -0,0 +1,114 @@ +-- Company: Zylin AS +-- +-- Hooks up the ZPU to physical pads to ensure that it is not optimized to +-- oblivion. This is purely to have something to measure LUT usage against. +-- +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +library work; +use work.zpu_config.all; +use work.zpupkg.all; + +entity ic300 is + port ( -- Clock inputs + cpu_clk_p : in std_logic; + + -- CPU interface signals + cpu_a_p : in std_logic_vector(20 downto 0); + cpu_wr_n_p : in std_logic_vector(1 downto 0); + cpu_cs_n_p : in std_logic_vector(3 downto 1); + cpu_oe_n_p : in std_logic; + cpu_d_p : out std_logic_vector(15 downto 0); + cpu_irq_p : out std_logic_vector(1 downto 0); + cpu_fiq_p : out std_logic; + cpu_wait_n_p : out std_logic; + + sdr_clk_fb_p : in std_logic -- DDR clock feedback + ); +end ic300; + +architecture behave of ic300 is + + +signal io_busy : std_logic; +signal io_read : std_logic_vector(7 downto 0); +signal io_write : std_logic_vector(7 downto 0); +signal io_addr : std_logic_vector(maxAddrBit downto minAddrBit); +signal io_writeEnable : std_logic; +signal io_readEnable : std_logic; + + +signal cpu_we : std_logic_vector(1 downto 0); +signal cpu_re : std_logic; +signal areset : std_logic; + +-- Clock module signals +signal clk_status : std_logic_vector(2 downto 0); +signal cpu_clk : std_logic; +signal cpu_clk_2x : std_logic; +signal cpu_clk_4x : std_logic; +signal ddr_in_clk : std_logic; + + +-- Internal CPU interface signals +signal cpu_din : std_logic_vector(15 downto 0); +signal cpu_dout : std_logic_vector(15 downto 0); +signal cpu_a : std_logic_vector(20 downto 0); + +signal dummy : std_logic_vector(maxAddrBit downto minAddrBit+5); + +signal dummy2 : std_logic_vector(wordSize-1 downto 0); +signal dummy3 : std_logic_vector(wordSize-1 downto 0); +signal dummy4 : std_logic_vector(wordSize-1 downto 0); +begin + + areset <= '0'; -- MUST BE CHANGED TO SOMETHING CORRECT + +-- cpu_d_p <= (others => '0'); + cpu_irq_p <= (others => '0'); + cpu_fiq_p <= '0'; + cpu_wait_n_p <= '0'; + + cpu_d_p(15 downto 15) <= (others => '0'); + + -- delay signals going out/in w/1 clk so the + -- ZPU does not have to drive those pins. + -- + -- these registers can be placed close to the ZPU and these + -- registers then have a full clock to drive the pins. + process(cpu_clk_p, areset) + begin + if (cpu_clk_p'event and cpu_clk_p = '1') then + cpu_d_p(0) <= io_writeEnable; + cpu_d_p(1) <= io_readEnable; + cpu_d_p(9 downto 2) <= io_write; + io_read <= cpu_a_p(7 downto 0); + -- 32 read/write registers is plenty realisitic for a minimal size + -- soft-CPU + cpu_d_p(14 downto 10) <= io_addr(minAddrBit+4 downto minAddrBit); + end if; + end process; + + + zpu: zpu_core port map ( + clk => cpu_clk_p , + areset => areset, + enable => '1', + + in_mem_busy => '0', + out_mem_writeEnable => io_writeEnable, + out_mem_readEnable => io_readEnable, + mem_write(7 downto 0) => io_write, + mem_write(wordSize-1 downto 8) => dummy3(wordSize-1 downto 8), + mem_read(7 downto 0) => io_read, + mem_read(wordSize-1 downto 8) => dummy2(wordSize-1 downto 8), + out_mem_addr(maxAddrBitIncIO) => dummy4(maxAddrBitIncIO), + out_mem_addr(minAddrBit-1 downto 0) => dummy4(minAddrBit-1 downto 0) , + out_mem_addr(maxAddrBit downto minAddrBit) => io_addr, + interrupt => '0' + ); + + +end behave; diff --git a/zpu/hdl/zpu4/src/timer.vhd b/zpu/hdl/zpu4/src/timer.vhd new file mode 100644 index 0000000..60c8fe2 --- /dev/null +++ b/zpu/hdl/zpu4/src/timer.vhd @@ -0,0 +1,61 @@ +library ieee; +use ieee.std_logic_1164.all; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +entity timer is + port( + clk : in std_logic; + areset : in std_logic; + we : in std_logic; + din : in std_logic_vector(7 downto 0); + adr : in std_logic_vector(2 downto 0); + dout : out std_logic_vector(7 downto 0)); +end timer; + + +architecture behave of timer is + +signal sample : std_logic; +signal reset : std_logic; + + +signal cnt : std_logic_vector(63 downto 0); +signal cnt_smp : std_logic_vector(63 downto 0); + +begin + + reset <= '1' when (we = '1' and din(0) = '1') else '0'; + sample <= '1' when (we = '1' and din(1) = '1') else '0'; + + process(clk, areset) -- Carry generation + begin + if areset = '1' then + cnt <= (others => '0'); + cnt_smp <= (others => '0'); + elsif (clk'event and clk = '1') then + cnt <= cnt + 1; + if sample = '1' then +-- report "sampling" severity failure; + cnt_smp <= cnt; + end if; + end if; + end process; + + + process(cnt_smp, adr) + begin + case adr is + when "000" => dout <= cnt_smp(7 downto 0); + when "001" => dout <= cnt_smp(15 downto 8); + when "010" => dout <= cnt_smp(23 downto 16); + when "011" => dout <= cnt_smp(31 downto 24); + when "100" => dout <= cnt_smp(39 downto 32); + when "101" => dout <= cnt_smp(47 downto 40); + when "110" => dout <= cnt_smp(55 downto 48); + when others => dout <= cnt_smp(63 downto 56); + end case; + end process; + + +end behave; + diff --git a/zpu/hdl/zpu4/src/trace.vhd b/zpu/hdl/zpu4/src/trace.vhd new file mode 100644 index 0000000..bc5279f --- /dev/null +++ b/zpu/hdl/zpu4/src/trace.vhd @@ -0,0 +1,84 @@ +library ieee; +use ieee.std_logic_1164.all; +--use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +use std.textio.all; + +library work; +use work.zpu_config.all; +use work.zpupkg.all; +use work.txt_util.all; + + +entity trace is + generic ( + log_file: string := "trace.txt" + ); + port( + clk : in std_logic; + begin_inst : in std_logic; + pc : in std_logic_vector(maxAddrBitIncIO downto 0); + opcode : in std_logic_vector(7 downto 0); + sp : in std_logic_vector(maxAddrBitIncIO downto 2); + memA : in std_logic_vector(wordSize-1 downto 0); + memB : in std_logic_vector(wordSize-1 downto 0); + busy : in std_logic; + intSp : in std_logic_vector(stack_bits-1 downto 0) + ); +end trace; + + +architecture behave of trace is + + +file l_file : TEXT open write_mode is log_file; + + +begin + + +-- write data and control information to a file + +receive_data: process + +variable l: line; +variable t : std_logic_vector(wordSize-1 downto 0); +variable t2 : std_logic_vector(maxAddrBitIncIO downto 0); +variable counter : std_logic_vector(63 downto 0); + + + +begin + + t:= (others => '0'); + t2:= (others => '0'); + +counter := (others => '0'); + -- print header for the logfile + print(l_file, "#pc,opcode,sp,top_of_stack "); + print(l_file, "#----------"); + print(l_file, " "); + + wait until clk = '1'; + wait until clk = '0'; + + while true loop + + counter := counter + 1; + if begin_inst = '1' then + t(maxAddrBitIncIO downto 2):=sp; + t2:=pc; + print(l_file, "0x" & hstr(t2) & " 0x" & hstr(opcode) & " 0x" & hstr(t) & " 0x" & hstr(memA) & " 0x" & hstr(memB) & " 0x" & hstr(intSp) & " 0x" & hstr(counter)); + end if; + + wait until clk = '0'; + + end loop; + + end process receive_data; + + + +end behave; + diff --git a/zpu/hdl/zpu4/src/txt_util.vhd b/zpu/hdl/zpu4/src/txt_util.vhd new file mode 100644 index 0000000..d3bf01a --- /dev/null +++ b/zpu/hdl/zpu4/src/txt_util.vhd @@ -0,0 +1,587 @@ +library ieee; +use ieee.std_logic_1164.all; +use std.textio.all; + +library work; + +package txt_util is + + -- prints a message to the screen + procedure print(text: string); + + -- prints the message when active + -- useful for debug switches + procedure print(active: boolean; text: string); + + -- converts std_logic into a character + function chr(sl: std_logic) return character; + + -- converts std_logic into a string (1 to 1) + function str(sl: std_logic) return string; + + -- converts std_logic_vector into a string (binary base) + function str(slv: std_logic_vector) return string; + + -- converts boolean into a string + function str(b: boolean) return string; + + -- converts an integer into a single character + -- (can also be used for hex conversion and other bases) + function chr(int: integer) return character; + + -- converts integer into string using specified base + function str(int: integer; base: integer) return string; + + -- converts integer to string, using base 10 + function str(int: integer) return string; + + -- convert std_logic_vector into a string in hex format + function hstr(slv: std_logic_vector) return string; + + + -- functions to manipulate strings + ----------------------------------- + + -- convert a character to upper case + function to_upper(c: character) return character; + + -- convert a character to lower case + function to_lower(c: character) return character; + + -- convert a string to upper case + function to_upper(s: string) return string; + + -- convert a string to lower case + function to_lower(s: string) return string; + + + + -- functions to convert strings into other formats + -------------------------------------------------- + + -- converts a character into std_logic + function to_std_logic(c: character) return std_logic; + + -- converts a string into std_logic_vector + function to_std_logic_vector(s: string) return std_logic_vector; + + + + -- file I/O + ----------- + + -- read variable length string from input file + procedure str_read(file in_file: TEXT; + res_string: out string); + + -- print string to a file and start new line + procedure print(file out_file: TEXT; + new_string: in string); + + -- print character to a file and start new line + procedure print(file out_file: TEXT; + char: in character); + +end txt_util; + + + + +package body txt_util is + + + + + -- prints text to the screen + + procedure print(text: string) is + variable msg_line: line; + begin + write(msg_line, text); + writeline(output, msg_line); + end print; + + + + + -- prints text to the screen when active + + procedure print(active: boolean; text: string) is + begin + if active then + print(text); + end if; + end print; + + + -- converts std_logic into a character + + function chr(sl: std_logic) return character is + variable c: character; + begin + case sl is + when 'U' => c:= 'U'; + when 'X' => c:= 'X'; + when '0' => c:= '0'; + when '1' => c:= '1'; + when 'Z' => c:= 'Z'; + when 'W' => c:= 'W'; + when 'L' => c:= 'L'; + when 'H' => c:= 'H'; + when '-' => c:= '-'; + end case; + return c; + end chr; + + + + -- converts std_logic into a string (1 to 1) + + function str(sl: std_logic) return string is + variable s: string(1 to 1); + begin + s(1) := chr(sl); + return s; + end str; + + + + -- converts std_logic_vector into a string (binary base) + -- (this also takes care of the fact that the range of + -- a string is natural while a std_logic_vector may + -- have an integer range) + + function str(slv: std_logic_vector) return string is + variable result : string (1 to slv'length); + variable r : integer; + begin + r := 1; + for i in slv'range loop + result(r) := chr(slv(i)); + r := r + 1; + end loop; + return result; + end str; + + + function str(b: boolean) return string is + + begin + if b then + return "true"; + else + return "false"; + end if; + end str; + + + -- converts an integer into a character + -- for 0 to 9 the obvious mapping is used, higher + -- values are mapped to the characters A-Z + -- (this is usefull for systems with base > 10) + -- (adapted from Steve Vogwell's posting in comp.lang.vhdl) + + function chr(int: integer) return character is + variable c: character; + begin + case int is + when 0 => c := '0'; + when 1 => c := '1'; + when 2 => c := '2'; + when 3 => c := '3'; + when 4 => c := '4'; + when 5 => c := '5'; + when 6 => c := '6'; + when 7 => c := '7'; + when 8 => c := '8'; + when 9 => c := '9'; + when 10 => c := 'A'; + when 11 => c := 'B'; + when 12 => c := 'C'; + when 13 => c := 'D'; + when 14 => c := 'E'; + when 15 => c := 'F'; + when 16 => c := 'G'; + when 17 => c := 'H'; + when 18 => c := 'I'; + when 19 => c := 'J'; + when 20 => c := 'K'; + when 21 => c := 'L'; + when 22 => c := 'M'; + when 23 => c := 'N'; + when 24 => c := 'O'; + when 25 => c := 'P'; + when 26 => c := 'Q'; + when 27 => c := 'R'; + when 28 => c := 'S'; + when 29 => c := 'T'; + when 30 => c := 'U'; + when 31 => c := 'V'; + when 32 => c := 'W'; + when 33 => c := 'X'; + when 34 => c := 'Y'; + when 35 => c := 'Z'; + when others => c := '?'; + end case; + return c; + end chr; + + + + -- convert integer to string using specified base + -- (adapted from Steve Vogwell's posting in comp.lang.vhdl) + + function str(int: integer; base: integer) return string is + + variable temp: string(1 to 10); + variable num: integer; + variable abs_int: integer; + variable len: integer := 1; + variable power: integer := 1; + + begin + + -- bug fix for negative numbers + abs_int := abs(int); + + num := abs_int; + + while num >= base loop -- Determine how many + len := len + 1; -- characters required + num := num / base; -- to represent the + end loop ; -- number. + + for i in len downto 1 loop -- Convert the number to + temp(i) := chr(abs_int/power mod base); -- a string starting + power := power * base; -- with the right hand + end loop ; -- side. + + -- return result and add sign if required + if int < 0 then + return '-'& temp(1 to len); + else + return temp(1 to len); + end if; + + end str; + + + -- convert integer to string, using base 10 + function str(int: integer) return string is + + begin + + return str(int, 10) ; + + end str; + + + + -- converts a std_logic_vector into a hex string. + function hstr(slv: std_logic_vector) return string is + variable hexlen: integer; + variable longslv : std_logic_vector(67 downto 0) := (others => '0'); + variable hex : string(1 to 16); + variable fourbit : std_logic_vector(3 downto 0); + begin + hexlen := (slv'left+1)/4; + if (slv'left+1) mod 4 /= 0 then + hexlen := hexlen + 1; + end if; + longslv(slv'left downto 0) := slv; + for i in (hexlen -1) downto 0 loop + fourbit := longslv(((i*4)+3) downto (i*4)); + case fourbit is + when "0000" => hex(hexlen -I) := '0'; + when "0001" => hex(hexlen -I) := '1'; + when "0010" => hex(hexlen -I) := '2'; + when "0011" => hex(hexlen -I) := '3'; + when "0100" => hex(hexlen -I) := '4'; + when "0101" => hex(hexlen -I) := '5'; + when "0110" => hex(hexlen -I) := '6'; + when "0111" => hex(hexlen -I) := '7'; + when "1000" => hex(hexlen -I) := '8'; + when "1001" => hex(hexlen -I) := '9'; + when "1010" => hex(hexlen -I) := 'A'; + when "1011" => hex(hexlen -I) := 'B'; + when "1100" => hex(hexlen -I) := 'C'; + when "1101" => hex(hexlen -I) := 'D'; + when "1110" => hex(hexlen -I) := 'E'; + when "1111" => hex(hexlen -I) := 'F'; + when "ZZZZ" => hex(hexlen -I) := 'z'; + when "UUUU" => hex(hexlen -I) := 'u'; + when "XXXX" => hex(hexlen -I) := 'x'; + when others => hex(hexlen -I) := '?'; + end case; + end loop; + return hex(1 to hexlen); + end hstr; + + + + -- functions to manipulate strings + ----------------------------------- + + + -- convert a character to upper case + + function to_upper(c: character) return character is + + variable u: character; + + begin + + case c is + when 'a' => u := 'A'; + when 'b' => u := 'B'; + when 'c' => u := 'C'; + when 'd' => u := 'D'; + when 'e' => u := 'E'; + when 'f' => u := 'F'; + when 'g' => u := 'G'; + when 'h' => u := 'H'; + when 'i' => u := 'I'; + when 'j' => u := 'J'; + when 'k' => u := 'K'; + when 'l' => u := 'L'; + when 'm' => u := 'M'; + when 'n' => u := 'N'; + when 'o' => u := 'O'; + when 'p' => u := 'P'; + when 'q' => u := 'Q'; + when 'r' => u := 'R'; + when 's' => u := 'S'; + when 't' => u := 'T'; + when 'u' => u := 'U'; + when 'v' => u := 'V'; + when 'w' => u := 'W'; + when 'x' => u := 'X'; + when 'y' => u := 'Y'; + when 'z' => u := 'Z'; + when others => u := c; + end case; + + return u; + + end to_upper; + + + -- convert a character to lower case + + function to_lower(c: character) return character is + + variable l: character; + + begin + + case c is + when 'A' => l := 'a'; + when 'B' => l := 'b'; + when 'C' => l := 'c'; + when 'D' => l := 'd'; + when 'E' => l := 'e'; + when 'F' => l := 'f'; + when 'G' => l := 'g'; + when 'H' => l := 'h'; + when 'I' => l := 'i'; + when 'J' => l := 'j'; + when 'K' => l := 'k'; + when 'L' => l := 'l'; + when 'M' => l := 'm'; + when 'N' => l := 'n'; + when 'O' => l := 'o'; + when 'P' => l := 'p'; + when 'Q' => l := 'q'; + when 'R' => l := 'r'; + when 'S' => l := 's'; + when 'T' => l := 't'; + when 'U' => l := 'u'; + when 'V' => l := 'v'; + when 'W' => l := 'w'; + when 'X' => l := 'x'; + when 'Y' => l := 'y'; + when 'Z' => l := 'z'; + when others => l := c; + end case; + + return l; + + end to_lower; + + + + -- convert a string to upper case + + function to_upper(s: string) return string is + + variable uppercase: string (s'range); + + begin + + for i in s'range loop + uppercase(i):= to_upper(s(i)); + end loop; + return uppercase; + + end to_upper; + + + + -- convert a string to lower case + + function to_lower(s: string) return string is + + variable lowercase: string (s'range); + + begin + + for i in s'range loop + lowercase(i):= to_lower(s(i)); + end loop; + return lowercase; + + end to_lower; + + + +-- functions to convert strings into other types + + +-- converts a character into a std_logic + +function to_std_logic(c: character) return std_logic is + variable sl: std_logic; + begin + case c is + when 'U' => + sl := 'U'; + when 'X' => + sl := 'X'; + when '0' => + sl := '0'; + when '1' => + sl := '1'; + when 'Z' => + sl := 'Z'; + when 'W' => + sl := 'W'; + when 'L' => + sl := 'L'; + when 'H' => + sl := 'H'; + when '-' => + sl := '-'; + when others => + sl := 'X'; + end case; + return sl; + end to_std_logic; + + +-- converts a string into std_logic_vector + +function to_std_logic_vector(s: string) return std_logic_vector is + variable slv: std_logic_vector(s'high-s'low downto 0); + variable k: integer; +begin + k := s'high-s'low; + for i in s'range loop + slv(k) := to_std_logic(s(i)); + k := k - 1; + end loop; + return slv; +end to_std_logic_vector; + + + + + + +---------------- +-- file I/O -- +---------------- + + + +-- read variable length string from input file + +procedure str_read(file in_file: TEXT; + res_string: out string) is + + variable l: line; + variable c: character; + variable is_string: boolean; + + begin + + readline(in_file, l); + -- clear the contents of the result string + for i in res_string'range loop + res_string(i) := ' '; + end loop; + -- read all characters of the line, up to the length + -- of the results string + for i in res_string'range loop + read(l, c, is_string); + res_string(i) := c; + if not is_string then -- found end of line + exit; + end if; + end loop; + +end str_read; + + +-- print string to a file +procedure print(file out_file: TEXT; + new_string: in string) is + + variable l: line; + + begin + + write(l, new_string); + writeline(out_file, l); + +end print; + + +-- print character to a file and start new line +procedure print(file out_file: TEXT; + char: in character) is + + variable l: line; + + begin + + write(l, char); + writeline(out_file, l); + +end print; + + + +-- appends contents of a string to a file until line feed occurs +-- (LF is considered to be the end of the string) + +procedure str_write(file out_file: TEXT; + new_string: in string) is + begin + + for i in new_string'range loop + print(out_file, new_string(i)); + if new_string(i) = LF then -- end of string + exit; + end if; + end loop; + +end str_write; + + + + +end txt_util; + + + + diff --git a/zpu/hdl/zpu4/src/xmake.filelist b/zpu/hdl/zpu4/src/xmake.filelist new file mode 100644 index 0000000..91e623f --- /dev/null +++ b/zpu/hdl/zpu4/src/xmake.filelist @@ -0,0 +1,12 @@ +vhdl work "ic300_config.vhd" +vhdl work "ic300pkg.vhd" +vhdl zylin "zpu_config.vhd" +vhdl zylin "zpupkg.vhd" +vhdl zylin "zpu_core.vhd" +vhdl work "bram.vhd" +vhdl zylin "zpuio.vhd" +vhdl zylin "..\dummyfpgalib\arm7\src\arm7pkg.vhd" +vhdl zylin "..\dummyfpgalib\arm7\src\arm7wb.vhd" +vhdl work "clocks.vhd" +vhdl work "timer.vhd" +vhdl work "ic300.vhd" \ No newline at end of file diff --git a/zpu/hdl/zpu4/src/xmake.filelist.bramsmall b/zpu/hdl/zpu4/src/xmake.filelist.bramsmall new file mode 100644 index 0000000..141633e --- /dev/null +++ b/zpu/hdl/zpu4/src/xmake.filelist.bramsmall @@ -0,0 +1,5 @@ +vhdl work "zpu_config.vhd" +vhdl work "zpupkg.vhd" +vhdl work "zpu_core_small.vhd" +vhdl work "bram_dmips.vhd" +vhdl work "testlut.vhd" diff --git a/zpu/hdl/zpu4/src/xmake.xst b/zpu/hdl/zpu4/src/xmake.xst new file mode 100644 index 0000000..bfdb23f --- /dev/null +++ b/zpu/hdl/zpu4/src/xmake.xst @@ -0,0 +1,53 @@ +set -tmpdir ../tmp +set -xsthdpdir ../xst +run +-ifn xmake.filelist +-ifmt mixed +-ofn ../syn/ic300 +-ofmt NGC +-p xc3s400-4-ft256 +-top ic300 +-opt_mode Area +-opt_level 2 +-iuc NO +-lso ic300.lso +-keep_hierarchy NO +-glob_opt AllClockNets +-rtlview Yes +-read_cores YES +-write_timing_constraints NO +-cross_clock_analysis NO +-hierarchy_separator / +-bus_delimiter <> +-case maintain +-slice_utilization_ratio 100 +-verilog2001 YES +-fsm_extract YES -fsm_encoding Auto +-safe_implementation No +-fsm_style lut +-ram_extract Yes +-ram_style Auto +-rom_extract Yes +-rom_style Auto +-mux_extract YES +-mux_style Auto +-decoder_extract YES +-priority_extract YES +-shreg_extract YES +-shift_extract YES +-xor_collapse YES +-resource_sharing YES +-mult_style auto +-iobuf YES +-max_fanout 500 +-bufg 8 +-register_duplication YES +-equivalent_register_removal NO +-register_balancing No +-slice_packing YES +-optimize_primitives NO +-use_clock_enable Yes +-use_sync_set No +-use_sync_reset No +-iob true +-slice_utilization_ratio_maxmargin 5 diff --git a/zpu/hdl/zpu4/src/zpu_config.vhd b/zpu/hdl/zpu4/src/zpu_config.vhd new file mode 100644 index 0000000..a13c0bf --- /dev/null +++ b/zpu/hdl/zpu4/src/zpu_config.vhd @@ -0,0 +1,16 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +package zpu_config is + -- generate trace output or not. + constant Generate_Trace : boolean := false; + constant wordPower : integer := 5; + -- during simulation, set this to '0' to get matching trace.txt + constant DontCareValue : std_logic := 'X'; + -- Clock frequency in MHz. + constant ZPU_Frequency : std_logic_vector(7 downto 0) := x"64"; + -- This is the msb address bit. bytes=2^(maxAddrBitIncIO+1) + constant maxAddrBitIncIO : integer := 15; + +end zpu_config; diff --git a/zpu/hdl/zpu4/src/zpu_config_fastsim.vhd b/zpu/hdl/zpu4/src/zpu_config_fastsim.vhd new file mode 100644 index 0000000..d39c9e9 --- /dev/null +++ b/zpu/hdl/zpu4/src/zpu_config_fastsim.vhd @@ -0,0 +1,15 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +package zpu_config is + + constant Generate_Trace : boolean := false; + constant wordPower : integer := 5; + -- during simulation, set this to '0' to get matching trace.txt + constant DontCareValue : std_logic := '0'; + -- Clock frequency in MHz. + constant ZPU_Frequency : std_logic_vector(7 downto 0) := x"50"; -- 80MHz + constant maxAddrBitIncIO : integer := 15; + +end zpu_config; diff --git a/zpu/hdl/zpu4/src/zpu_config_trace.vhd b/zpu/hdl/zpu4/src/zpu_config_trace.vhd new file mode 100644 index 0000000..d1bbbbb --- /dev/null +++ b/zpu/hdl/zpu4/src/zpu_config_trace.vhd @@ -0,0 +1,15 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +package zpu_config is + + constant Generate_Trace : boolean := true; + constant wordPower : integer := 5; + -- during simulation, set this to '0' to get matching trace.txt + constant DontCareValue : std_logic := '0'; + -- Clock frequency in MHz. + constant ZPU_Frequency : std_logic_vector(7 downto 0) := x"64"; + constant maxAddrBitIncIO : integer := 15; + +end zpu_config; diff --git a/zpu/hdl/zpu4/src/zpu_core.vhd b/zpu/hdl/zpu4/src/zpu_core.vhd new file mode 100644 index 0000000..c7093e2 --- /dev/null +++ b/zpu/hdl/zpu4/src/zpu_core.vhd @@ -0,0 +1,900 @@ + +-- Company: ZPU4 generic memory interface CPU +-- Engineer: Øyvind Harboe + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; +use IEEE.STD_LOGIC_arith.ALL; + +library work; +use work.zpu_config.all; +use work.zpupkg.all; + + +-- mem_writeEnable - set to '1' for a single cycle to send off a write request. +-- mem_write is valid only while mem_writeEnable='1'. +-- mem_readEnable - set to '1' for a single cycle to send off a read request. +-- +-- mem_busy - It is illegal to send off a read/write request when mem_busy='1'. +-- Set to '0' when mem_read is valid after a read request. +-- If it goes to '1'(busy), it is on the cycle after mem_read/writeEnable +-- is '1'. +-- mem_addr - address for read/write request +-- mem_read - read data. Valid only on the cycle after mem_busy='0' after +-- mem_readEnable='1' for a single cycle. +-- mem_write - data to write +-- mem_writeMask - set to '1' for those bits that are to be written to memory upon +-- write request +-- break - set to '1' when CPU hits break instruction +-- interrupt - set to '1' until interrupts are cleared by CPU. + + + + +entity zpu_core is + Port ( clk : in std_logic; + areset : in std_logic; + enable : in std_logic; + in_mem_busy : in std_logic; + mem_read : in std_logic_vector(wordSize-1 downto 0); + mem_write : out std_logic_vector(wordSize-1 downto 0); + out_mem_addr : out std_logic_vector(maxAddrBitIncIO downto 0); + out_mem_writeEnable : out std_logic; + out_mem_readEnable : out std_logic; + mem_writeMask: out std_logic_vector(wordBytes-1 downto 0); + interrupt : in std_logic; + break : out std_logic); +end zpu_core; + +architecture behave of zpu_core is + +type InsnType is +( +State_AddTop, +State_Dup, +State_DupStackB, +State_Pop, +State_Popdown, +State_Add, +State_Or, +State_And, +State_Store, +State_AddSP, +State_Shift, +State_Nop, +State_Im, +State_LoadSP, +State_StoreSP, +State_Emulate, +State_Load, +State_PushPC, +State_PushSP, +State_PopPC, +State_PopPCRel, +State_Not, +State_Flip, +State_PopSP, +State_Neqbranch, +State_Eq, +State_Loadb, +State_Mult, +State_Lessthan, +State_Lessthanorequal, +State_Ulessthanorequal, +State_Ulessthan, +State_Pushspadd, +State_Call, +State_Callpcrel, +State_Sub, +State_Break, +State_Storeb, +State_InsnFetch +); + +type StateType is +( +State_Load2, +State_Popped, +State_LoadSP2, +State_LoadSP3, +State_AddSP2, +State_Fetch, +State_Execute, +State_Decode, +State_Decode2, +State_Resync, + +State_StoreSP2, +State_Resync2, +State_Resync3, +State_Loadb2, +State_Storeb2, +State_Mult2, +State_Mult3, +State_Mult5, +State_Mult4, +State_BinaryOpResult2, +State_BinaryOpResult, +State_Idle +); + + +signal pc : std_logic_vector(maxAddrBitIncIO downto 0); +signal sp : std_logic_vector(maxAddrBitIncIO downto minAddrBit); +signal incSp : std_logic_vector(maxAddrBitIncIO downto minAddrBit); +signal incIncSp : std_logic_vector(maxAddrBitIncIO downto minAddrBit); +signal decSp : std_logic_vector(maxAddrBitIncIO downto minAddrBit); +signal stackA : std_logic_vector(wordSize-1 downto 0); +signal binaryOpResult : std_logic_vector(wordSize-1 downto 0); +signal binaryOpResult2 : std_logic_vector(wordSize-1 downto 0); +signal multResult2 : std_logic_vector(wordSize-1 downto 0); +signal multResult3 : std_logic_vector(wordSize-1 downto 0); +signal multResult : std_logic_vector(wordSize-1 downto 0); +signal multA : std_logic_vector(wordSize-1 downto 0); +signal multB : std_logic_vector(wordSize-1 downto 0); +signal stackB : std_logic_vector(wordSize-1 downto 0); +signal idim_flag : std_logic; +signal busy : std_logic; +signal mem_writeEnable : std_logic; +signal mem_readEnable : std_logic; +signal mem_addr : std_logic_vector(maxAddrBitIncIO downto minAddrBit); +signal mem_delayAddr : std_logic_vector(maxAddrBitIncIO downto minAddrBit); +signal mem_delayReadEnable : std_logic; + +signal decodeWord : std_logic_vector(wordSize-1 downto 0); + + +signal state : StateType; +signal insn : InsnType; +type InsnArray is array(0 to wordBytes-1) of InsnType; +signal decodedOpcode : InsnArray; + +type OpcodeArray is array(0 to wordBytes-1) of std_logic_vector(7 downto 0); + +signal opcode : OpcodeArray; + + + + +signal begin_inst : std_logic; +signal trace_opcode : std_logic_vector(7 downto 0); +signal trace_pc : std_logic_vector(maxAddrBitIncIO downto 0); +signal trace_sp : std_logic_vector(maxAddrBitIncIO downto minAddrBit); +signal trace_topOfStack : std_logic_vector(wordSize-1 downto 0); +signal trace_topOfStackB : std_logic_vector(wordSize-1 downto 0); + +-- state machine. + +begin + + + traceFileGenerate: + if Generate_Trace generate + trace_file: trace port map ( + clk => clk, + begin_inst => begin_inst, + pc => trace_pc, + opcode => trace_opcode, + sp => trace_sp, + memA => trace_topOfStack, + memB => trace_topOfStackB, + busy => busy, + intsp => (others => 'U') + ); + end generate; + + + -- the memory subsystem will tell us one cycle later whether or + -- not it is busy + out_mem_writeEnable <= mem_writeEnable; + out_mem_readEnable <= mem_readEnable; + out_mem_addr(maxAddrBitIncIO downto minAddrBit) <= mem_addr; + out_mem_addr(minAddrBit-1 downto 0) <= (others => '0'); + + incSp <= sp + 1; + incIncSp <= sp + 2; + decSp <= sp - 1; + + + opcodeControl: + process(clk, areset) + variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0); + variable spOffset : std_logic_vector(4 downto 0); + variable tSpOffset : std_logic_vector(4 downto 0); + variable nextPC : std_logic_vector(maxAddrBitIncIO downto 0); + variable tNextState : InsnType; + variable tDecodedOpcode : InsnArray; + variable tMultResult : std_logic_vector(wordSize*2-1 downto 0); + begin + if areset = '1' then + state <= State_Idle; + break <= '0'; + -- point to top of RAM-8 + sp <= (others => '0'); + sp(maxAddrBit downto minAddrBit+1) <= (others => '1'); + + pc <= (others => '0'); + idim_flag <= '0'; + begin_inst <= '0'; + mem_writeEnable <= '0'; + mem_readEnable <= '0'; + multA <= (others => '0'); + multB <= (others => '0'); + mem_writeMask <= (others => '1'); + elsif (clk'event and clk = '1') then + -- we must multiply unconditionally to get pipelined multiplication + tMultResult := multA * multB; + multResult3 <= multResult2; + multResult2 <= multResult; + multResult <= tMultResult(wordSize-1 downto 0); + + + binaryOpResult2 <= binaryOpResult; -- pipeline a bit. + + + multA <= (others => DontCareValue); + multB <= (others => DontCareValue); + + + mem_addr <= (others => DontCareValue); + mem_readEnable <='0'; + mem_writeEnable <='0'; + mem_write <= (others => DontCareValue); + + if (mem_writeEnable = '1') and (mem_readEnable = '1') then + report "read/write collision" severity failure; + end if; + + + + + spOffset(4):=not opcode(conv_integer(pc(byteBits-1 downto 0)))(4); + spOffset(3 downto 0):=opcode(conv_integer(pc(byteBits-1 downto 0)))(3 downto 0); + nextPC := pc + 1; + + -- prepare trace snapshot + trace_opcode <= opcode(conv_integer(pc(byteBits-1 downto 0))); + trace_pc <= pc; + trace_sp <= sp; + trace_topOfStack <= stackA; + trace_topOfStackB <= stackB; + begin_inst <= '0'; + + + case state is + when State_Idle => + if enable='1' then + state <= State_Resync; + end if; + -- Initial state of ZPU, fetch top of stack + first instruction + when State_Resync => + if in_mem_busy='0' then + mem_addr <= sp; + mem_readEnable <= '1'; + state <= State_Resync2; + end if; + when State_Resync2 => + if in_mem_busy='0' then + stackA <= mem_read; + mem_addr <= incSp; + mem_readEnable <= '1'; + state <= State_Resync3; + end if; + when State_Resync3 => + if in_mem_busy='0' then + stackB <= mem_read; + mem_addr <= pc(maxAddrBitIncIO downto minAddrBit); + mem_readEnable <= '1'; + state <= State_Decode; + end if; + when State_Decode => + if in_mem_busy='0' then + decodeWord <= mem_read; + state <= State_Decode2; + end if; + when State_Decode2 => + -- decode 4 instructions in parallel + for i in 0 to wordBytes-1 loop + tOpcode := decodeWord((wordBytes-1-i+1)*8-1 downto (wordBytes-1-i)*8); + + tSpOffset(4):=not tOpcode(4); + tSpOffset(3 downto 0):=tOpcode(3 downto 0); + + opcode(i) <= tOpcode; + if (tOpcode(7 downto 7)=OpCode_Im) then + tNextState:=State_Im; + elsif (tOpcode(7 downto 5)=OpCode_StoreSP) then + if tSpOffset = 0 then + tNextState := State_Pop; + elsif tSpOffset=1 then + tNextState := State_PopDown; + else + tNextState :=State_StoreSP; + end if; + elsif (tOpcode(7 downto 5)=OpCode_LoadSP) then + if tSpOffset = 0 then + tNextState :=State_Dup; + elsif tSpOffset = 1 then + tNextState :=State_DupStackB; + else + tNextState :=State_LoadSP; + end if; + elsif (tOpcode(7 downto 5)=OpCode_Emulate) then + tNextState :=State_Emulate; + if tOpcode(5 downto 0)=OpCode_Neqbranch then + tNextState :=State_Neqbranch; + elsif tOpcode(5 downto 0)=OpCode_Eq then + tNextState :=State_Eq; + elsif tOpcode(5 downto 0)=OpCode_Lessthan then + tNextState :=State_Lessthan; + elsif tOpcode(5 downto 0)=OpCode_Lessthanorequal then + --tNextState :=State_Lessthanorequal; + elsif tOpcode(5 downto 0)=OpCode_Ulessthan then + tNextState :=State_Ulessthan; + elsif tOpcode(5 downto 0)=OpCode_Ulessthanorequal then + --tNextState :=State_Ulessthanorequal; + elsif tOpcode(5 downto 0)=OpCode_Loadb then + tNextState :=State_Loadb; + elsif tOpcode(5 downto 0)=OpCode_Mult then + tNextState :=State_Mult; + elsif tOpcode(5 downto 0)=OpCode_Storeb then + tNextState :=State_Storeb; + elsif tOpcode(5 downto 0)=OpCode_Pushspadd then + tNextState :=State_Pushspadd; + elsif tOpcode(5 downto 0)=OpCode_Callpcrel then + tNextState :=State_Callpcrel; + elsif tOpcode(5 downto 0)=OpCode_Call then + --tNextState :=State_Call; + elsif tOpcode(5 downto 0)=OpCode_Sub then + tNextState :=State_Sub; + elsif tOpcode(5 downto 0)=OpCode_PopPCRel then + --tNextState :=State_PopPCRel; + end if; + elsif (tOpcode(7 downto 4)=OpCode_AddSP) then + if tSpOffset = 0 then + tNextState := State_Shift; + elsif tSpOffset = 1 then + tNextState := State_AddTop; + else + tNextState :=State_AddSP; + end if; + else + case tOpcode(3 downto 0) is + when OpCode_Nop => + tNextState :=State_Nop; + when OpCode_PushSP => + tNextState :=State_PushSP; + when OpCode_PopPC => + tNextState :=State_PopPC; + when OpCode_Add => + tNextState :=State_Add; + when OpCode_Or => + tNextState :=State_Or; + when OpCode_And => + tNextState :=State_And; + when OpCode_Load => + tNextState :=State_Load; + when OpCode_Not => + tNextState :=State_Not; + when OpCode_Flip => + tNextState :=State_Flip; + when OpCode_Store => + tNextState :=State_Store; + when OpCode_PopSP => + tNextState :=State_PopSP; + when others => + tNextState := State_Break; + + end case; + end if; + tDecodedOpcode(i) := tNextState; + + end loop; + + insn <= tDecodedOpcode(conv_integer(pc(byteBits-1 downto 0))); + + -- once we wrap, we need to fetch + tDecodedOpcode(0) := State_InsnFetch; + + decodedOpcode <= tDecodedOpcode; + state <= State_Execute; + + + + -- Each instruction must: + -- + -- 1. set idim_flag + -- 2. increase pc if applicable + -- 3. set next state if appliable + -- 4. do it's operation + + when State_Execute => + insn <= decodedOpcode(conv_integer(nextPC(byteBits-1 downto 0))); + + case insn is + when State_InsnFetch => + state <= State_Fetch; + when State_Im => + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '1'; + pc <= pc + 1; + + if idim_flag='1' then + stackA(wordSize-1 downto 7) <= stackA(wordSize-8 downto 0); + stackA(6 downto 0) <= opcode(conv_integer(pc(byteBits-1 downto 0)))(6 downto 0); + else + mem_writeEnable <= '1'; + mem_addr <= incSp; + mem_write <= stackB; + stackB <= stackA; + sp <= decSp; + for i in wordSize-1 downto 7 loop + stackA(i) <= opcode(conv_integer(pc(byteBits-1 downto 0)))(6); + end loop; + stackA(6 downto 0) <= opcode(conv_integer(pc(byteBits-1 downto 0)))(6 downto 0); + end if; + end if; + when State_StoreSP => + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + state <= State_StoreSP2; + + mem_writeEnable <= '1'; + mem_addr <= sp+spOffset; + mem_write <= stackA; + stackA <= stackB; + sp <= incSp; + end if; + + + when State_LoadSP => + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + state <= State_LoadSP2; + + sp <= decSp; + mem_writeEnable <= '1'; + mem_addr <= incSp; + mem_write <= stackB; + end if; + when State_Emulate => + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + sp <= decSp; + mem_writeEnable <= '1'; + mem_addr <= incSp; + mem_write <= stackB; + stackA <= (others => DontCareValue); + stackA(maxAddrBitIncIO downto 0) <= pc + 1; + stackB <= stackA; + + -- The emulate address is: + -- 98 7654 3210 + -- 0000 00aa aaa0 0000 + pc <= (others => '0'); + pc(9 downto 5) <= opcode(conv_integer(pc(byteBits-1 downto 0)))(4 downto 0); + state <= State_Fetch; + end if; + when State_Callpcrel => + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + stackA <= (others => DontCareValue); + stackA(maxAddrBitIncIO downto 0) <= pc + 1; + + pc <= pc + stackA(maxAddrBitIncIO downto 0); + state <= State_Fetch; + end if; + when State_Call => + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + stackA <= (others => DontCareValue); + stackA(maxAddrBitIncIO downto 0) <= pc + 1; + pc <= stackA(maxAddrBitIncIO downto 0); + state <= State_Fetch; + end if; + when State_AddSP => + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + state <= State_AddSP2; + + mem_readEnable <= '1'; + mem_addr <= sp+spOffset; + end if; + when State_PushSP => + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + pc <= pc + 1; + + sp <= decSp; + stackA <= (others => '0'); + stackA(maxAddrBitIncIO downto minAddrBit) <= sp; + stackB <= stackA; + mem_writeEnable <= '1'; + mem_addr <= incSp; + mem_write <= stackB; + end if; + when State_PopPC => + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + pc <= stackA(maxAddrBitIncIO downto 0); + sp <= incSp; + + mem_writeEnable <= '1'; + mem_addr <= incSp; + mem_write <= stackB; + state <= State_Resync; + end if; + when State_PopPCRel => + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + pc <= stackA(maxAddrBitIncIO downto 0) + pc; + sp <= incSp; + + mem_writeEnable <= '1'; + mem_addr <= incSp; + mem_write <= stackB; + state <= State_Resync; + end if; + when State_Add => + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + stackA <= stackA + stackB; + + mem_readEnable <= '1'; + mem_addr <= incIncSp; + sp <= incSp; + state <= State_Popped; + end if; + when State_Sub => + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + binaryOpResult <= stackB - stackA; + state <= State_BinaryOpResult; + end if; + when State_Pop => + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + mem_addr <= incIncSp; + mem_readEnable <= '1'; + sp <= incSp; + stackA <= stackB; + state <= State_Popped; + end if; + when State_PopDown => + if in_mem_busy='0' then + -- PopDown leaves top of stack unchanged + begin_inst <= '1'; + idim_flag <= '0'; + mem_addr <= incIncSp; + mem_readEnable <= '1'; + sp <= incSp; + state <= State_Popped; + end if; + when State_Or => + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + stackA <= stackA or stackB; + mem_readEnable <= '1'; + mem_addr <= incIncSp; + sp <= incSp; + state <= State_Popped; + end if; + when State_And => + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + + stackA <= stackA and stackB; + mem_readEnable <= '1'; + mem_addr <= incIncSp; + sp <= incSp; + state <= State_Popped; + end if; + when State_Eq => + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + + binaryOpResult <= (others => '0'); + if (stackA=stackB) then + binaryOpResult(0) <= '1'; + end if; + state <= State_BinaryOpResult; + end if; + when State_Ulessthan => + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + + binaryOpResult <= (others => '0'); + if (stackA + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + + binaryOpResult <= (others => '0'); + if (stackA<=stackB) then + binaryOpResult(0) <= '1'; + end if; + state <= State_BinaryOpResult; + end if; + when State_Lessthan => + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + + binaryOpResult <= (others => '0'); + if (signed(stackA) + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + + binaryOpResult <= (others => '0'); + if (signed(stackA)<=signed(stackB)) then + binaryOpResult(0) <= '1'; + end if; + state <= State_BinaryOpResult; + end if; + when State_Load => + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + state <= State_Load2; + + mem_addr <= stackA(maxAddrBitIncIO downto minAddrBit); + mem_readEnable <= '1'; + end if; + + when State_Dup => + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + pc <= pc + 1; + + sp <= decSp; + stackB <= stackA; + mem_write <= stackB; + mem_addr <= incSp; + mem_writeEnable <= '1'; + end if; + when State_DupStackB => + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + pc <= pc + 1; + + sp <= decSp; + stackA <= stackB; + stackB <= stackA; + mem_write <= stackB; + mem_addr <= incSp; + mem_writeEnable <= '1'; + end if; + when State_Store => + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + pc <= pc + 1; + mem_addr <= stackA(maxAddrBitIncIO downto minAddrBit); + mem_write <= stackB; + mem_writeEnable <= '1'; + sp <= incIncSp; + state <= State_Resync; + end if; + when State_PopSP => + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + pc <= pc + 1; + + mem_write <= stackB; + mem_addr <= incSp; + mem_writeEnable <= '1'; + sp <= stackA(maxAddrBitIncIO downto minAddrBit); + state <= State_Resync; + end if; + when State_Nop => + begin_inst <= '1'; + idim_flag <= '0'; + pc <= pc + 1; + when State_Not => + begin_inst <= '1'; + idim_flag <= '0'; + pc <= pc + 1; + + stackA <= not stackA; + when State_Flip => + begin_inst <= '1'; + idim_flag <= '0'; + pc <= pc + 1; + + for i in 0 to wordSize-1 loop + stackA(i) <= stackA(wordSize-1-i); + end loop; + when State_AddTop => + begin_inst <= '1'; + idim_flag <= '0'; + pc <= pc + 1; + + stackA <= stackA + stackB; + when State_Shift => + begin_inst <= '1'; + idim_flag <= '0'; + pc <= pc + 1; + + stackA(wordSize-1 downto 1) <= stackA(wordSize-2 downto 0); + stackA(0) <= '0'; + when State_Pushspadd => + begin_inst <= '1'; + idim_flag <= '0'; + pc <= pc + 1; + + stackA <= (others => '0'); + stackA(maxAddrBitIncIO downto minAddrBit) <= stackA(maxAddrBitIncIO-minAddrBit downto 0)+sp; + when State_Neqbranch => + -- branches are almost always taken as they form loops + begin_inst <= '1'; + idim_flag <= '0'; + sp <= incIncSp; + if (stackB/=0) then + pc <= stackA(maxAddrBitIncIO downto 0) + pc; + else + pc <= pc + 1; + end if; + -- need to fetch stack again. + state <= State_Resync; + when State_Mult => + begin_inst <= '1'; + idim_flag <= '0'; + + multA <= stackA; + multB <= stackB; + state <= State_Mult2; + when State_Break => + report "Break instruction encountered" severity failure; + break <= '1'; + + when State_Loadb => + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + state <= State_Loadb2; + + mem_addr <= stackA(maxAddrBitIncIO downto minAddrBit); + mem_readEnable <= '1'; + end if; + when State_Storeb => + if in_mem_busy='0' then + begin_inst <= '1'; + idim_flag <= '0'; + state <= State_Storeb2; + + mem_addr <= stackA(maxAddrBitIncIO downto minAddrBit); + mem_readEnable <= '1'; + end if; + + when others => + sp <= (others => DontCareValue); + report "Illegal instruction" severity failure; + break <= '1'; + end case; + + + when State_StoreSP2 => + if in_mem_busy='0' then + mem_addr <= incSp; + mem_readEnable <= '1'; + state <= State_Popped; + end if; + when State_LoadSP2 => + if in_mem_busy='0' then + state <= State_LoadSP3; + mem_readEnable <= '1'; + mem_addr <= sp+spOffset+1; + end if; + when State_LoadSP3 => + if in_mem_busy='0' then + pc <= pc + 1; + state <= State_Execute; + stackB <= stackA; + stackA <= mem_read; + end if; + when State_AddSP2 => + if in_mem_busy='0' then + pc <= pc + 1; + state <= State_Execute; + stackA <= stackA + mem_read; + end if; + when State_Load2 => + if in_mem_busy='0' then + stackA <= mem_read; + pc <= pc + 1; + state <= State_Execute; + end if; + when State_Loadb2 => + if in_mem_busy='0' then + stackA <= (others => '0'); + stackA(7 downto 0) <= mem_read(((wordBytes-1-conv_integer(stackA(byteBits-1 downto 0)))*8+7) downto (wordBytes-1-conv_integer(stackA(byteBits-1 downto 0)))*8); + pc <= pc + 1; + state <= State_Execute; + end if; + when State_Storeb2 => + if in_mem_busy='0' then + mem_addr <= stackA(maxAddrBitIncIO downto minAddrBit); + mem_write <= mem_read; + mem_write(((wordBytes-1-conv_integer(stackA(byteBits-1 downto 0)))*8+7) downto (wordBytes-1-conv_integer(stackA(byteBits-1 downto 0)))*8) <= stackB(7 downto 0) ; + mem_writeEnable <= '1'; + pc <= pc + 1; + sp <= incIncSp; + state <= State_Resync; + end if; + when State_Fetch => + if in_mem_busy='0' then + mem_addr <= pc(maxAddrBitIncIO downto minAddrBit); + mem_readEnable <= '1'; + state <= State_Decode; + end if; + when State_Mult2 => + state <= State_Mult3; + when State_Mult3 => + state <= State_Mult4; + when State_Mult4 => + state <= State_Mult5; + when State_Mult5 => + if in_mem_busy='0' then + stackA <= multResult3; + mem_readEnable <= '1'; + mem_addr <= incIncSp; + sp <= incSp; + state <= State_Popped; + end if; + when State_BinaryOpResult => + state <= State_BinaryOpResult2; + when State_BinaryOpResult2 => + mem_readEnable <= '1'; + mem_addr <= incIncSp; + sp <= incSp; + stackA <= binaryOpResult2; + state <= State_Popped; + when State_Popped => + if in_mem_busy='0' then + pc <= pc + 1; + stackB <= mem_read; + state <= State_Execute; + end if; + when others => + sp <= (others => DontCareValue); + report "Illegal state" severity failure; + break <= '1'; + end case; + end if; + end process; + + + +end behave; diff --git a/zpu/hdl/zpu4/src/zpu_core_small.vhd b/zpu/hdl/zpu4/src/zpu_core_small.vhd new file mode 100644 index 0000000..4d73f88 --- /dev/null +++ b/zpu/hdl/zpu4/src/zpu_core_small.vhd @@ -0,0 +1,433 @@ +-- Company: ZPU3 +-- Engineer: Øyvind Harboe + +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +library work; +use work.zpu_config.all; +use work.zpupkg.all; + + +entity zpu_core is + Port ( clk : in std_logic; + areset : in std_logic; + enable : in std_logic; + in_mem_busy : in std_logic; + mem_read : in std_logic_vector(wordSize-1 downto 0); + mem_write : out std_logic_vector(wordSize-1 downto 0); + out_mem_addr : out std_logic_vector(maxAddrBitIncIO downto 0); + out_mem_writeEnable : out std_logic; + out_mem_readEnable : out std_logic; + mem_writeMask: out std_logic_vector(wordBytes-1 downto 0); + interrupt : in std_logic; + break : out std_logic); +end zpu_core; + +architecture behave of zpu_core is + +signal readIO : std_logic; + + + +signal memAWriteEnable : std_logic; +signal memAAddr : std_logic_vector(maxAddrBit downto minAddrBit); +signal memAWrite : std_logic_vector(wordSize-1 downto 0); +signal memARead : std_logic_vector(wordSize-1 downto 0); +signal memBWriteEnable : std_logic; +signal memBAddr : std_logic_vector(maxAddrBit downto minAddrBit); +signal memBWrite : std_logic_vector(wordSize-1 downto 0); +signal memBRead : std_logic_vector(wordSize-1 downto 0); + + + +signal pc : std_logic_vector(maxAddrBit downto 0); +signal sp : std_logic_vector(maxAddrBit downto minAddrBit); + +signal idim_flag : std_logic; + +--signal storeToStack : std_logic; +--signal fetchNextInstruction : std_logic; +--signal extraCycle : std_logic; +signal busy : std_logic; +--signal fetching : std_logic; + +signal begin_inst : std_logic; + + + +signal trace_opcode : std_logic_vector(7 downto 0); +signal trace_pc : std_logic_vector(maxAddrBitIncIO downto 0); +signal trace_sp : std_logic_vector(maxAddrBitIncIO downto minAddrBit); +signal trace_topOfStack : std_logic_vector(wordSize-1 downto 0); +signal trace_topOfStackB : std_logic_vector(wordSize-1 downto 0); + +-- state machine. +type State_Type is +( +State_Fetch, +State_WriteIODone, +State_Execute, +State_StoreToStack, +State_Add, +State_Or, +State_And, +State_Store, +State_ReadIO, +State_WriteIO, +State_Load, +State_FetchNext, +State_AddSP, +State_ReadIODone, +State_Decode, +State_Resync +); + +type DecodedOpcodeType is +( +Decoded_Nop, +Decoded_Im, +Decoded_ImShift, +Decoded_LoadSP, +Decoded_StoreSP , +Decoded_AddSP, +Decoded_Emulate, +Decoded_Break, +Decoded_PushSP, +Decoded_PopPC, +Decoded_Add, +Decoded_Or, +Decoded_And, +Decoded_Load, +Decoded_Not, +Decoded_Flip, +Decoded_Store, +Decoded_PopSP +); + + + +signal sampledOpcode : std_logic_vector(OpCode_Size-1 downto 0); +signal opcode : std_logic_vector(OpCode_Size-1 downto 0); + +signal decodedOpcode : DecodedOpcodeType; +signal sampledDecodedOpcode : DecodedOpcodeType; + + +signal state : State_Type; + +begin + traceFileGenerate: + if Generate_Trace generate + trace_file: trace port map ( + clk => clk, + begin_inst => begin_inst, + pc => trace_pc, + opcode => trace_opcode, + sp => trace_sp, + memA => trace_topOfStack, + memB => trace_topOfStackB, + busy => busy, + intsp => (others => 'U') + ); + end generate; + + + memory: dualport_ram port map ( + clk => clk, + memAWriteEnable => memAWriteEnable, + memAAddr => memAAddr(maxAddrBitBRAM downto minAddrBit), + memAWrite => memAWrite, + memARead => memARead, + memBWriteEnable => memBWriteEnable, + memBAddr => memBAddr(maxAddrBitBRAM downto minAddrBit), + memBWrite => memBWrite, + memBRead => memBRead + ); + + + + decodeControl: + process(memBRead, pc) + variable tOpcode : std_logic_vector(OpCode_Size-1 downto 0); + begin + tOpcode := memBRead((wordBytes-1-conv_integer(pc(minAddrBit-1 downto 0))+1)*8-1 downto (wordBytes-1-conv_integer(pc(minAddrBit-1 downto 0)))*8); + + sampledOpcode <= tOpcode; + + if (tOpcode(7 downto 7)=OpCode_Im) then + sampledDecodedOpcode<=Decoded_Im; + elsif (tOpcode(7 downto 5)=OpCode_StoreSP) then + sampledDecodedOpcode<=Decoded_StoreSP; + elsif (tOpcode(7 downto 5)=OpCode_LoadSP) then + sampledDecodedOpcode<=Decoded_LoadSP; + elsif (tOpcode(7 downto 5)=OpCode_Emulate) then + sampledDecodedOpcode<=Decoded_Emulate; + elsif (tOpcode(7 downto 4)=OpCode_AddSP) then + sampledDecodedOpcode<=Decoded_AddSP; + else + case tOpcode(3 downto 0) is + when OpCode_Break => + sampledDecodedOpcode<=Decoded_Break; + when OpCode_PushSP => + sampledDecodedOpcode<=Decoded_PushSP; + when OpCode_PopPC => + sampledDecodedOpcode<=Decoded_PopPC; + when OpCode_Add => + sampledDecodedOpcode<=Decoded_Add; + when OpCode_Or => + sampledDecodedOpcode<=Decoded_Or; + when OpCode_And => + sampledDecodedOpcode<=Decoded_And; + when OpCode_Load => + sampledDecodedOpcode<=Decoded_Load; + when OpCode_Not => + sampledDecodedOpcode<=Decoded_Not; + when OpCode_Flip => + sampledDecodedOpcode<=Decoded_Flip; + when OpCode_Store => + sampledDecodedOpcode<=Decoded_Store; + when OpCode_PopSP => + sampledDecodedOpcode<=Decoded_PopSP; + when others => + sampledDecodedOpcode<=Decoded_Nop; + end case; + end if; + end process; + + + opcodeControl: + process(clk, areset) + variable spOffset : std_logic_vector(4 downto 0); + begin + if areset = '1' then + state <= State_Resync; + break <= '0'; + sp <= spStart(maxAddrBit downto minAddrBit); + pc <= (others => '0'); + idim_flag <= '0'; + begin_inst <= '0'; + memAAddr <= (others => '0'); + memBAddr <= (others => '0'); + memAWriteEnable <= '0'; + memBWriteEnable <= '0'; + out_mem_writeEnable <= '0'; + out_mem_readEnable <= '0'; + memAWrite <= (others => '0'); + memBWrite <= (others => '0'); + mem_writeMask <= (others => '1'); + elsif (clk'event and clk = '1') then + memAWriteEnable <= '0'; + memBWriteEnable <= '0'; + -- This saves ca. 100 LUT's, by explicitly declaring that the + -- memAWrite can be left at whatever value if memAWriteEnable is + -- not set. + memAWrite <= (others => DontCareValue); + memBWrite <= (others => DontCareValue); +-- out_mem_addr <= (others => DontCareValue); +-- mem_write <= (others => DontCareValue); + spOffset := (others => DontCareValue); + memAAddr <= (others => DontCareValue); + memBAddr <= (others => DontCareValue); + + out_mem_writeEnable <= '0'; + out_mem_readEnable <= '0'; + begin_inst <= '0'; + out_mem_addr <= memARead(maxAddrBitIncIO downto 0); + mem_write <= memBRead; + + decodedOpcode <= sampledDecodedOpcode; + opcode <= sampledOpcode; + + case state is + when State_Execute => + state <= State_Fetch; + -- at this point: + -- memBRead contains opcode word + -- memARead contains top of stack + pc <= pc + 1; + + -- trace + begin_inst <= '1'; + trace_pc <= (others => '0'); + trace_pc(maxAddrBit downto 0) <= pc; + trace_opcode <= opcode; + trace_sp <= (others => '0'); + trace_sp(maxAddrBit downto minAddrBit) <= sp; + trace_topOfStack <= memARead; + trace_topOfStackB <= memBRead; + + -- during the next cycle we'll be reading the next opcode + spOffset(4):=not opcode(4); + spOffset(3 downto 0):=opcode(3 downto 0); + + idim_flag <= '0'; + case decodedOpcode is + when Decoded_Im => + idim_flag <= '1'; + memAWriteEnable <= '1'; + if (idim_flag='0') then + sp <= sp - 1; + memAAddr <= sp-1; + for i in wordSize-1 downto 7 loop + memAWrite(i) <= opcode(6); + end loop; + memAWrite(6 downto 0) <= opcode(6 downto 0); + else + memAAddr <= sp; + memAWrite(wordSize-1 downto 7) <= memARead(wordSize-8 downto 0); + memAWrite(6 downto 0) <= opcode(6 downto 0); + end if; + when Decoded_StoreSP => + memBWriteEnable <= '1'; + memBAddr <= sp+spOffset; + memBWrite <= memARead; + sp <= sp + 1; + state <= State_Resync; + when Decoded_LoadSP => + sp <= sp - 1; + memAAddr <= sp+spOffset; + when Decoded_Emulate => + sp <= sp - 1; + memAWriteEnable <= '1'; + memAAddr <= sp - 1; + memAWrite <= (others => DontCareValue); + memAWrite(maxAddrBit downto 0) <= pc + 1; + -- The emulate address is: + -- 98 7654 3210 + -- 0000 00aa aaa0 0000 + pc <= (others => '0'); + pc(9 downto 5) <= opcode(4 downto 0); + when Decoded_AddSP => + memAAddr <= sp; + memBAddr <= sp+spOffset; + state <= State_AddSP; + when Decoded_Break => + report "Break instruction encountered" severity failure; + break <= '1'; + when Decoded_PushSP => + memAWriteEnable <= '1'; + memAAddr <= sp - 1; + sp <= sp - 1; + memAWrite <= (others => DontCareValue); + memAWrite(maxAddrBit downto minAddrBit) <= sp; + when Decoded_PopPC => + pc <= memARead(maxAddrBit downto 0); + sp <= sp + 1; + state <= State_Resync; + when Decoded_Add => + sp <= sp + 1; + state <= State_Add; + when Decoded_Or => + sp <= sp + 1; + state <= State_Or; + when Decoded_And => + sp <= sp + 1; + state <= State_And; + when Decoded_Load => + if (memARead(ioBit)='1') then + out_mem_addr <= memARead(maxAddrBitIncIO downto 0); + out_mem_readEnable <= '1'; + state <= State_ReadIO; + else + memAAddr <= memARead(maxAddrBit downto minAddrBit); + end if; + when Decoded_Not => + memAAddr <= sp(maxAddrBit downto minAddrBit); + memAWriteEnable <= '1'; + memAWrite <= not memARead; + when Decoded_Flip => + memAAddr <= sp(maxAddrBit downto minAddrBit); + memAWriteEnable <= '1'; + for i in 0 to wordSize-1 loop + memAWrite(i) <= memARead(wordSize-1-i); + end loop; + when Decoded_Store => + memBAddr <= sp + 1; + sp <= sp + 1; + if (memARead(ioBit)='1') then + state <= State_WriteIO; + else + state <= State_Store; + end if; + when Decoded_PopSP => + sp <= memARead(maxAddrBit downto minAddrBit); + state <= State_Resync; + when Decoded_Nop => + memAAddr <= sp; + when others => + null; + end case; + when State_ReadIO => + if (in_mem_busy = '0') then + state <= State_Fetch; + memAWriteEnable <= '1'; + memAWrite <= mem_read; + end if; + when State_WriteIO => + sp <= sp + 1; + out_mem_writeEnable <= '1'; + out_mem_addr <= memARead(maxAddrBitIncIO downto 0); + mem_write <= memBRead; + state <= State_WriteIODone; + when State_WriteIODone => + if (in_mem_busy = '0') then + state <= State_Resync; + end if; + when State_Fetch => + -- We need to resync. During the *next* cycle + -- we'll fetch the opcode @ pc and thus it will + -- be available for State_Execute the cycle after + -- next + memBAddr <= pc(maxAddrBit downto minAddrBit); + state <= State_FetchNext; + when State_FetchNext => + -- at this point memARead contains the value that is either + -- from the top of stack or should be copied to the top of the stack + memAWriteEnable <= '1'; + memAWrite <= memARead; + memAAddr <= sp; + memBAddr <= sp + 1; + state <= State_Decode; + when State_Decode => + -- during the State_Execute cycle we'll be fetching SP+1 + memAAddr <= sp; + memBAddr <= sp + 1; + state <= State_Execute; + when State_Store => + sp <= sp + 1; + memAWriteEnable <= '1'; + memAAddr <= memARead(maxAddrBit downto minAddrBit); + memAWrite <= memBRead; + state <= State_Resync; + when State_AddSP => + state <= State_Add; + when State_Add => + memAAddr <= sp; + memAWriteEnable <= '1'; + memAWrite <= memARead + memBRead; + state <= State_Fetch; + when State_Or => + memAAddr <= sp; + memAWriteEnable <= '1'; + memAWrite <= memARead or memBRead; + state <= State_Fetch; + when State_Resync => + memAAddr <= sp; + state <= State_Fetch; + when State_And => + memAAddr <= sp; + memAWriteEnable <= '1'; + memAWrite <= memARead and memBRead; + state <= State_Fetch; + when others => + null; + end case; + + end if; + end process; + + + +end behave; diff --git a/zpu/hdl/zpu4/src/zpuio.vhd b/zpu/hdl/zpu4/src/zpuio.vhd new file mode 100644 index 0000000..d14629e --- /dev/null +++ b/zpu/hdl/zpu4/src/zpuio.vhd @@ -0,0 +1,256 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +library work; +use work.zpu_config.all; +use work.zpupkg.all; + +entity zpuio is + port ( areset : in std_logic; + cpu_clk : in std_logic; + clk_status : in std_logic_vector(2 downto 0); + cpu_din : in std_logic_vector(15 downto 0); + cpu_a : in std_logic_vector(20 downto 0); + cpu_we : in std_logic_vector(1 downto 0); + cpu_re : in std_logic; + cpu_dout : inout std_logic_vector(15 downto 0)); +end zpuio; + +architecture behave of zpuio is + +signal timer_read : std_logic_vector(7 downto 0); +--signal timer_write : std_logic_vector(7 downto 0); +signal timer_we : std_logic; + + +signal io_busy : std_logic; +signal io_read : std_logic_vector(7 downto 0); +--signal io_write : std_logic_vector(7 downto 0); +signal io_addr : std_logic_vector(maxAddrBit downto minAddrBit); +signal io_writeEnable : std_logic; +signal Enable : std_logic; + +signal din : std_logic_vector(7 downto 0); +signal dout : std_logic_vector(7 downto 0); +signal adr : std_logic_vector(15 downto 0); +signal break : std_logic; +signal we : std_logic; +signal re : std_logic; + + +-- uart forwarding... + +signal uartTXPending : std_logic; +signal uartTXCleared : std_logic; +signal uartData : std_logic_vector(7 downto 0); + +signal readingTimer : std_logic; + + + + +signal mem_busy : std_logic; +signal mem_read : std_logic_vector(wordSize-1 downto 0); +signal mem_write : std_logic_vector(wordSize-1 downto 0); +signal mem_addr : std_logic_vector(maxAddrBitIncIO downto 0); +signal mem_writeEnable : std_logic; +signal mem_readEnable : std_logic; +signal mem_writeMask: std_logic_vector(wordBytes-1 downto 0); + +signal dram_mem_busy : std_logic; +signal dram_mem_read : std_logic_vector(wordSize-1 downto 0); +signal dram_mem_write : std_logic_vector(wordSize-1 downto 0); +signal dram_mem_writeEnable : std_logic; +signal dram_mem_readEnable : std_logic; +signal dram_mem_writeMask: std_logic_vector(wordBytes-1 downto 0); + + + +--signal io_mem_read : std_logic_vector(7 downto 0); +--signal io_mem_writeEnable : std_logic; +--signal io_mem_readEnable : std_logic; +signal io_readEnable : std_logic; + + +signal dram_read : std_logic; + + + +begin + + io_addr <= mem_addr(maxAddrBit downto minAddrBit); + + timerinst: timer port map ( + clk => cpu_clk, + areset => areset, + we => timer_we, + din => mem_write(7 downto 0), + adr => io_addr(4 downto 2), + dout => timer_read); + + zpu: zpu_core port map ( + clk => cpu_clk , + areset => areset, + in_mem_busy => mem_busy, + mem_read => mem_read, + mem_write => mem_write, + out_mem_addr => mem_addr, + out_mem_writeEnable => mem_writeEnable, + out_mem_readEnable => mem_readEnable, + mem_writeMask => mem_writeMask, + interrupt => '0', + break => break); + + +ram_imp: dram port map ( + clk => cpu_clk , + areset => areset, + mem_busy => dram_mem_busy, + mem_read => dram_mem_read, + mem_write => mem_write, + mem_addr => mem_addr(maxAddrBit downto 0), + mem_writeEnable => dram_mem_writeEnable, + mem_readEnable => dram_mem_readEnable, + mem_writeMask => mem_writeMask); + + + -- Read/write are on different addresses + -- The registers are 8 bits and mapped to bit[7:0] + -- + -- 0xC000 Write: Writes to UART TX FIFO (4 byte FIFO) + -- Read : Reads from UART RX FIFO (4 byte FIFO) + -- 0xC004 Read : UART status register + -- Bit 0 = RX FIFO empty + -- Bit 1 = TX FIFO full + -- 0xA000 Skrive: LED's (8 stk.) + + -- 0x9000 Write: bit 0: 1= reset counter + -- 0= counter running + -- bit 1: 1= sample counter (when set to 1) + -- 0=not used + -- Read : counter bit[7:0] + -- 0x9004 Read: counter bit [15:8] + -- 0x9008 Read: counter bit [23:16] + -- 0x900C Read: counter bit [31:24] + -- 0x9010 Read: counter bit [39:32] + -- 0x9014 Read: counter bit [47:40] + -- 0x9018 Read: counter bit [55:48] + -- 0x901C Read: counter bit [63:56] + -- + -- 0x8800 Read: unsigned 8-bit integer with FPGA frequency (in MHz) + + fauxUart: + process(cpu_clk, areset) + begin + if areset = '1' then + io_busy <= '0'; + uartTXPending <= '0'; + timer_we <= '0'; + io_busy <= '0'; + uartData <= x"58"; -- 'X' + readingTimer <= '0'; + elsif (cpu_clk'event and cpu_clk = '1') then + timer_we <= '0'; + io_busy <= '0'; + if uartTXCleared = '1' then + uartTXPending <= '0'; + end if; + + if io_writeEnable = '1' then + if io_addr=x"1000" then + -- Write to UART + uartData <= mem_write(7 downto 0); + uartTXPending <= '1'; + io_busy <= '1'; + elsif io_addr(12)='1' then + timer_we <= '1'; + io_busy <= '1'; + else + report "Illegal IO write" severity failure; + end if; + end if; + if (io_readEnable = '1') then + if io_addr=x"1001" then + io_read <= (0=>'1', -- recieve empty + 1 => uartTXPending, -- tx full + others => '0'); + io_busy <= '1'; + elsif io_addr(12)='1' then + readingTimer <= '1'; + io_busy <= '1'; + elsif io_addr(11)='1' then + io_read <= ZPU_Frequency; + io_busy <= '1'; + else + report "Illegal IO read" severity failure; + end if; + + else + if (readingTimer = '1') then + readingTimer <= '0'; + io_read <= timer_read; + io_busy <= '0'; + else + io_read <= (others => '1'); + end if; + end if; + end if; + end process; + + + forwardUARTOutputToARM: + process(cpu_clk, areset) + begin + if areset = '1' then + uartTXCleared <= '0'; + elsif (cpu_clk = '1' and cpu_clk'event) then + if cpu_we(0) = '1' and cpu_a(3 downto 1) = "000" then + uartTXCleared <= cpu_din(0); + else + uartTXCleared <= uartTXCleared; + end if; + end if; + end process; + + cpu_dout(7 downto 0) <= uartData when (cpu_re = '1' and cpu_a(3 downto 1) = "001") else (others => 'Z'); + cpu_dout <= (0 => uartTXPending, others => '0') when (cpu_re = '1' and cpu_a(3 downto 1) = "000") else (others => 'Z'); + + dram_mem_writeEnable <= mem_writeEnable and not mem_addr(ioBit); + dram_mem_readEnable <= mem_readEnable and not mem_addr(ioBit); + io_writeEnable <= mem_writeEnable and mem_addr(ioBit); +-- io_readEnable <= mem_readEnable and mem_addr(ioBit); + mem_busy <= io_busy or dram_mem_busy or dram_read or io_readEnable; + + -- Memory reads either come from IO or DRAM. We need to pick the right one. + memorycontrol: + process(cpu_clk, areset) + begin + if areset = '1' then + dram_read <= '0'; + io_readEnable <= '0'; + + + elsif (cpu_clk'event and cpu_clk = '1') then + mem_read <= (others => '0'); + if mem_addr(ioBit)='0' and mem_readEnable='1' then + dram_read <= '1'; + end if; + if dram_read='1' and dram_mem_busy='0' then + dram_read <= '0'; + mem_read <= dram_mem_read; + end if; + + if mem_addr(ioBit)='1' and mem_readEnable='1' then + io_readEnable <= '1'; + end if; + if io_readEnable='1' and io_busy='0' then + io_readEnable <= '0'; + mem_read(7 downto 0) <= io_read; + end if; + + end if; + end process; + + +end behave; diff --git a/zpu/hdl/zpu4/src/zpuio_bram.vhd b/zpu/hdl/zpu4/src/zpuio_bram.vhd new file mode 100644 index 0000000..5d3f409 --- /dev/null +++ b/zpu/hdl/zpu4/src/zpuio_bram.vhd @@ -0,0 +1,229 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +library work; +use work.zpu_config.all; +use work.zpupkg.all; + +entity zpuio is + port ( areset : in std_logic; + cpu_clk : in std_logic; + clk_status : in std_logic_vector(2 downto 0); + cpu_din : in std_logic_vector(15 downto 0); + cpu_a : in std_logic_vector(20 downto 0); + cpu_we : in std_logic_vector(1 downto 0); + cpu_re : in std_logic; + cpu_dout : inout std_logic_vector(15 downto 0)); +end zpuio; + +architecture behave of zpuio is + +signal timer_read : std_logic_vector(7 downto 0); +--signal timer_write : std_logic_vector(7 downto 0); +signal timer_we : std_logic; + + +signal io_busy : std_logic; +signal io_read : std_logic_vector(7 downto 0); +--signal io_write : std_logic_vector(7 downto 0); +signal io_addr : std_logic_vector(maxAddrBit downto minAddrBit); +signal io_writeEnable : std_logic; +signal Enable : std_logic; + +signal din : std_logic_vector(7 downto 0); +signal dout : std_logic_vector(7 downto 0); +signal adr : std_logic_vector(15 downto 0); +signal break : std_logic; +signal we : std_logic; +signal re : std_logic; + + +-- uart forwarding... + +signal uartTXPending : std_logic; +signal uartTXCleared : std_logic; +signal uartData : std_logic_vector(7 downto 0); + +signal readingTimer : std_logic; + + + + +signal mem_busy : std_logic; +signal mem_read : std_logic_vector(wordSize-1 downto 0); +signal mem_write : std_logic_vector(wordSize-1 downto 0); +signal mem_addr : std_logic_vector(maxAddrBitIncIO downto 0); +signal mem_writeEnable : std_logic; +signal mem_readEnable : std_logic; +signal mem_writeMask: std_logic_vector(wordBytes-1 downto 0); + + + + +--signal io_mem_read : std_logic_vector(7 downto 0); +--signal io_mem_writeEnable : std_logic; +--signal io_mem_readEnable : std_logic; +signal io_readEnable : std_logic; + + + + + +begin + + io_addr <= mem_addr(maxAddrBit downto minAddrBit); + + timerinst: timer port map ( + clk => cpu_clk, + areset => areset, + we => timer_we, + din => mem_write(7 downto 0), + adr => io_addr(4 downto 2), + dout => timer_read); + + zpu: zpu_core port map ( + clk => cpu_clk , + areset => areset, + in_mem_busy => mem_busy, + mem_read => mem_read, + mem_write => mem_write, + out_mem_addr => mem_addr, + out_mem_writeEnable => mem_writeEnable, + out_mem_readEnable => mem_readEnable, + mem_writeMask => mem_writeMask, + interrupt => '0', + break => break); + + + + + -- Read/write are on different addresses + -- The registers are 8 bits and mapped to bit[7:0] + -- + -- 0xC000 Write: Writes to UART TX FIFO (4 byte FIFO) + -- Read : Reads from UART RX FIFO (4 byte FIFO) + -- 0xC004 Read : UART status register + -- Bit 0 = RX FIFO empty + -- Bit 1 = TX FIFO full + -- 0xA000 Skrive: LED's (8 stk.) + + -- 0x9000 Write: bit 0: 1= reset counter + -- 0= counter running + -- bit 1: 1= sample counter (when set to 1) + -- 0=not used + -- Read : counter bit[7:0] + -- 0x9004 Read: counter bit [15:8] + -- 0x9008 Read: counter bit [23:16] + -- 0x900C Read: counter bit [31:24] + -- 0x9010 Read: counter bit [39:32] + -- 0x9014 Read: counter bit [47:40] + -- 0x9018 Read: counter bit [55:48] + -- 0x901C Read: counter bit [63:56] + -- + -- 0x8800 Read: unsigned 8-bit integer with FPGA frequency (in MHz) + + fauxUart: + process(cpu_clk, areset) + begin + if areset = '1' then + io_busy <= '0'; + uartTXPending <= '0'; + timer_we <= '0'; + io_busy <= '0'; + uartData <= x"58"; -- 'X' + readingTimer <= '0'; + elsif (cpu_clk'event and cpu_clk = '1') then + timer_we <= '0'; + io_busy <= '0'; + if uartTXCleared = '1' then + uartTXPending <= '0'; + end if; + + if io_writeEnable = '1' then + if io_addr=x"1000" then + -- Write to UART + uartData <= mem_write(7 downto 0); + uartTXPending <= '1'; + io_busy <= '1'; + elsif io_addr(12)='1' then + timer_we <= '1'; + io_busy <= '1'; + else + report "Illegal IO write" severity failure; + end if; + end if; + if (io_readEnable = '1') then + if io_addr=x"1001" then + io_read <= (0=>'1', -- recieve empty + 1 => uartTXPending, -- tx full + others => '0'); + io_busy <= '1'; + elsif io_addr(12)='1' then + readingTimer <= '1'; + io_busy <= '1'; + elsif io_addr(11)='1' then + io_read <= ZPU_Frequency; + io_busy <= '1'; + else + report "Illegal IO read" severity failure; + end if; + + else + if (readingTimer = '1') then + readingTimer <= '0'; + io_read <= timer_read; + io_busy <= '0'; + else + io_read <= (others => '1'); + end if; + end if; + end if; + end process; + + + forwardUARTOutputToARM: + process(cpu_clk, areset) + begin + if areset = '1' then + uartTXCleared <= '0'; + elsif (cpu_clk = '1' and cpu_clk'event) then + if cpu_we(0) = '1' and cpu_a(3 downto 1) = "000" then + uartTXCleared <= cpu_din(0); + else + uartTXCleared <= uartTXCleared; + end if; + end if; + end process; + + cpu_dout(7 downto 0) <= uartData when (cpu_re = '1' and cpu_a(3 downto 1) = "001") else (others => 'Z'); + cpu_dout <= (0 => uartTXPending, others => '0') when (cpu_re = '1' and cpu_a(3 downto 1) = "000") else (others => 'Z'); + + io_writeEnable <= mem_writeEnable and mem_addr(ioBit); +-- io_readEnable <= mem_readEnable and mem_addr(ioBit); + mem_busy <= io_busy or io_readEnable; + + -- Memory reads either come from IO or DRAM. We need to pick the right one. + memorycontrol: + process(cpu_clk, areset) + begin + if areset = '1' then + io_readEnable <= '0'; + + + elsif (cpu_clk'event and cpu_clk = '1') then + mem_read <= (others => '0'); + + if mem_addr(ioBit)='1' and mem_readEnable='1' then + io_readEnable <= '1'; + end if; + if io_readEnable='1' and io_busy='0' then + io_readEnable <= '0'; + mem_read(7 downto 0) <= io_read; + end if; + + end if; + end process; + + +end behave; diff --git a/zpu/hdl/zpu4/src/zpupkg.vhd b/zpu/hdl/zpu4/src/zpupkg.vhd new file mode 100644 index 0000000..30c3e46 --- /dev/null +++ b/zpu/hdl/zpu4/src/zpupkg.vhd @@ -0,0 +1,168 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.all; +use IEEE.STD_LOGIC_ARITH.all; + +library work; +use work.zpu_config.all; + +package zpupkg is + + -- This bit is set for read/writes to IO + -- FIX!!! eventually this should be set to wordSize-1 so as to + -- to make the address of IO independent of amount of memory + -- reserved for CPU. Requires trivial tweaks in toolchain/runtime + -- libraries. + + constant byteBits : integer := wordPower-3; -- # of bits in a word that addresses bytes + constant maxAddrBit : integer := maxAddrBitIncIO-1; + constant ioBit : integer := maxAddrBit+1; + constant wordSize : integer := 2**wordPower; + constant wordBytes : integer := wordSize/8; + constant minAddrBit : integer := byteBits; + -- configurable internal stack size. Probably going to be 16 after toolchain is done + constant stack_bits : integer := 5; + constant stack_size : integer := 2**stack_bits; + + component dualport_ram is + port (clk : in std_logic; + memAWriteEnable : in std_logic; + memAAddr : in std_logic_vector(maxAddrBitBRAM downto minAddrBit); + memAWrite : in std_logic_vector(wordSize-1 downto 0); + memARead : out std_logic_vector(wordSize-1 downto 0); + memBWriteEnable : in std_logic; + memBAddr : in std_logic_vector(maxAddrBitBRAM downto minAddrBit); + memBWrite : in std_logic_vector(wordSize-1 downto 0); + memBRead : out std_logic_vector(wordSize-1 downto 0)); + end component; + + component dram is + port (clk : in std_logic; + areset : in std_logic; + mem_writeEnable : in std_logic; + mem_readEnable : in std_logic; + mem_addr : in std_logic_vector(maxAddrBit downto 0); + mem_write : in std_logic_vector(wordSize-1 downto 0); + mem_read : out std_logic_vector(wordSize-1 downto 0); + mem_busy : out std_logic; + mem_writeMask : in std_logic_vector(wordBytes-1 downto 0)); + end component; + + + component trace is + port( + clk : in std_logic; + begin_inst : in std_logic; + pc : in std_logic_vector(maxAddrBitIncIO downto 0); + opcode : in std_logic_vector(7 downto 0); + sp : in std_logic_vector(maxAddrBitIncIO downto minAddrBit); + memA : in std_logic_vector(wordSize-1 downto 0); + memB : in std_logic_vector(wordSize-1 downto 0); + busy : in std_logic; + intSp : in std_logic_vector(stack_bits-1 downto 0) + ); + end component; + + component zpu_core is + port ( clk : in std_logic; + areset : in std_logic; + enable : in std_logic; + in_mem_busy : in std_logic; + mem_read : in std_logic_vector(wordSize-1 downto 0); + mem_write : out std_logic_vector(wordSize-1 downto 0); + out_mem_addr : out std_logic_vector(maxAddrBitIncIO downto 0); + out_mem_writeEnable : out std_logic; + out_mem_readEnable : out std_logic; + mem_writeMask: out std_logic_vector(wordBytes-1 downto 0); + interrupt : in std_logic; + break : out std_logic); + end component; + + + + component timer is + port( + clk : in std_logic; + areset : in std_logic; + we : in std_logic; + din : in std_logic_vector(7 downto 0); + adr : in std_logic_vector(2 downto 0); + dout : out std_logic_vector(7 downto 0)); + end component; + + component zpuio is + port ( areset : in std_logic; + cpu_clk : in std_logic; + clk_status : in std_logic_vector(2 downto 0); + cpu_din : in std_logic_vector(15 downto 0); + cpu_a : in std_logic_vector(20 downto 0); + cpu_we : in std_logic_vector(1 downto 0); + cpu_re : in std_logic; + cpu_dout : inout std_logic_vector(15 downto 0)); + end component; + + + + + -- opcode decode constants + constant OpCode_Im : std_logic_vector(7 downto 7) := "1"; + constant OpCode_StoreSP : std_logic_vector(7 downto 5) := "010"; + constant OpCode_LoadSP : std_logic_vector(7 downto 5) := "011"; + constant OpCode_Emulate : std_logic_vector(7 downto 5) := "001"; + constant OpCode_AddSP : std_logic_vector(7 downto 4) := "0001"; + constant OpCode_Short : std_logic_vector(7 downto 4) := "0000"; + + constant OpCode_Break : std_logic_vector(3 downto 0) := "0000"; + constant OpCode_Shiftleft: std_logic_vector(3 downto 0) := "0001"; + constant OpCode_PushSP : std_logic_vector(3 downto 0) := "0010"; + constant OpCode_PushInt : std_logic_vector(3 downto 0) := "0011"; + + constant OpCode_PopPC : std_logic_vector(3 downto 0) := "0100"; + constant OpCode_Add : std_logic_vector(3 downto 0) := "0101"; + constant OpCode_And : std_logic_vector(3 downto 0) := "0110"; + constant OpCode_Or : std_logic_vector(3 downto 0) := "0111"; + + constant OpCode_Load : std_logic_vector(3 downto 0) := "1000"; + constant OpCode_Not : std_logic_vector(3 downto 0) := "1001"; + constant OpCode_Flip : std_logic_vector(3 downto 0) := "1010"; + constant OpCode_Nop : std_logic_vector(3 downto 0) := "1011"; + + constant OpCode_Store : std_logic_vector(3 downto 0) := "1100"; + constant OpCode_PopSP : std_logic_vector(3 downto 0) := "1101"; + constant OpCode_Compare : std_logic_vector(3 downto 0) := "1110"; + constant OpCode_PopInt : std_logic_vector(3 downto 0) := "1111"; + + constant OpCode_Lessthan : std_logic_vector(5 downto 0) := conv_std_logic_vector(36, 6); + constant OpCode_Lessthanorequal : std_logic_vector(5 downto 0) := conv_std_logic_vector(37, 6); + constant OpCode_Ulessthan : std_logic_vector(5 downto 0) := conv_std_logic_vector(38, 6); + constant OpCode_Ulessthanorequal : std_logic_vector(5 downto 0) := conv_std_logic_vector(39, 6); + + constant OpCode_Swap : std_logic_vector(5 downto 0) := conv_std_logic_vector(40, 6); + constant OpCode_Mult : std_logic_vector(5 downto 0) := conv_std_logic_vector(41, 6); + + constant OpCode_Lshiftright : std_logic_vector(5 downto 0) := conv_std_logic_vector(42, 6); + constant OpCode_Ashiftleft : std_logic_vector(5 downto 0) := conv_std_logic_vector(43, 6); + constant OpCode_Ashiftright : std_logic_vector(5 downto 0) := conv_std_logic_vector(44, 6); + constant OpCode_Call : std_logic_vector(5 downto 0) := conv_std_logic_vector(45, 6); + + constant OpCode_Eq : std_logic_vector(5 downto 0) := conv_std_logic_vector(46, 6); + constant OpCode_Neq : std_logic_vector(5 downto 0) := conv_std_logic_vector(47, 6); + + constant OpCode_Sub : std_logic_vector(5 downto 0) := conv_std_logic_vector(49, 6); + constant OpCode_Loadb : std_logic_vector(5 downto 0) := conv_std_logic_vector(51, 6); + constant OpCode_Storeb : std_logic_vector(5 downto 0) := conv_std_logic_vector(52, 6); + + constant OpCode_Eqbranch : std_logic_vector(5 downto 0) := conv_std_logic_vector(55, 6); + constant OpCode_Neqbranch : std_logic_vector(5 downto 0) := conv_std_logic_vector(56, 6); + constant OpCode_Poppcrel : std_logic_vector(5 downto 0) := conv_std_logic_vector(57, 6); + + constant OpCode_Pushspadd : std_logic_vector(5 downto 0) := conv_std_logic_vector(61, 6); + constant OpCode_Mult16x16 : std_logic_vector(5 downto 0) := conv_std_logic_vector(62, 6); + constant OpCode_Callpcrel : std_logic_vector(5 downto 0) := conv_std_logic_vector(63, 6); + + + + constant OpCode_Size : integer := 8; + + + +end zpupkg; diff --git a/zpu/hdl/zpu4/test/dmips/build.sh b/zpu/hdl/zpu4/test/dmips/build.sh new file mode 100644 index 0000000..51ff3de --- /dev/null +++ b/zpu/hdl/zpu4/test/dmips/build.sh @@ -0,0 +1,3 @@ +zpu-elf-gcc -DTIME $ZPUDIR/dhrystone/dhry_*.c -O3 -Wl,--gc-sections -Wl,--relax -abel -o dmips.elf +zpu-elf-objdump --disassemble-all >dmips.dis dmips.elf +zpu-elf-objcopy -O binary dmips.elf dmips.bin diff --git a/zpu/hdl/zpu4/test/dmips/dmips.bin b/zpu/hdl/zpu4/test/dmips/dmips.bin new file mode 100644 index 0000000..1330fe3 Binary files /dev/null and b/zpu/hdl/zpu4/test/dmips/dmips.bin differ diff --git a/zpu/hdl/zpu4/test/dmips/dmips.elf b/zpu/hdl/zpu4/test/dmips/dmips.elf new file mode 100644 index 0000000..7254a5d Binary files /dev/null and b/zpu/hdl/zpu4/test/dmips/dmips.elf differ diff --git a/zpu/hdl/zpu4/test/dmips/dmips.ram b/zpu/hdl/zpu4/test/dmips/dmips.ram new file mode 100644 index 0000000..27b991d --- /dev/null +++ b/zpu/hdl/zpu4/test/dmips/dmips.ram @@ -0,0 +1,3507 @@ +0 => x"0b0b0b0b", +1 => x"80700b0b", +2 => x"80dde00c", +3 => x"3a0b0b0b", +4 => x"b9990400", +5 => x"00000000", +6 => x"00000000", +7 => x"00000000", +8 => x"80088408", +9 => x"88080b0b", +10 => x"0bb9e02d", +11 => x"880c840c", +12 => x"800c0400", +13 => x"00000000", +14 => x"00000000", +15 => x"00000000", +16 => x"71fd0608", +17 => x"72830609", +18 => x"81058205", +19 => x"832b2a83", +20 => x"ffff0652", +21 => x"04000000", +22 => x"00000000", +23 => x"00000000", +24 => x"71fd0608", +25 => x"83ffff73", +26 => x"83060981", +27 => x"05820583", +28 => x"2b2b0906", +29 => x"7383ffff", +30 => x"0b0b0b0b", +31 => x"83a70400", +32 => x"72098105", +33 => x"72057373", +34 => x"09060906", +35 => x"73097306", +36 => x"070a8106", +37 => x"53510400", +38 => x"00000000", +39 => x"00000000", +40 => x"72722473", +41 => x"732e0753", +42 => x"51040000", +43 => x"00000000", +44 => x"00000000", +45 => x"00000000", +46 => x"00000000", +47 => x"00000000", +48 => x"71737109", +49 => x"71068106", +50 => x"30720a10", +51 => x"0a720a10", +52 => x"0a31050a", +53 => x"81065151", +54 => x"53510400", +55 => x"00000000", +56 => x"72722673", +57 => x"732e0753", +58 => x"51040000", +59 => x"00000000", +60 => x"00000000", +61 => x"00000000", +62 => x"00000000", +63 => x"00000000", +64 => x"00000000", +65 => x"00000000", +66 => x"00000000", +67 => x"00000000", +68 => x"00000000", +69 => x"00000000", +70 => x"00000000", +71 => x"00000000", +72 => x"0b0b0b88", +73 => x"c4040000", +74 => x"00000000", +75 => x"00000000", +76 => x"00000000", +77 => x"00000000", +78 => x"00000000", +79 => x"00000000", +80 => x"720a722b", +81 => x"0a535104", +82 => x"00000000", +83 => x"00000000", +84 => x"00000000", +85 => x"00000000", +86 => x"00000000", +87 => x"00000000", +88 => x"72729f06", +89 => x"0981050b", +90 => x"0b0b88a7", +91 => x"05040000", +92 => x"00000000", +93 => x"00000000", +94 => x"00000000", +95 => x"00000000", +96 => x"72722aff", +97 => x"739f062a", +98 => x"0974090a", +99 => x"8106ff05", +100 => x"06075351", +101 => x"04000000", +102 => x"00000000", +103 => x"00000000", +104 => x"71715351", +105 => x"020d0406", +106 => x"73830609", +107 => x"81058205", +108 => x"832b0b2b", +109 => x"0772fc06", +110 => x"0c515104", +111 => x"00000000", +112 => x"72098105", +113 => x"72050970", +114 => x"81050906", +115 => x"0a810653", +116 => x"51040000", +117 => x"00000000", +118 => x"00000000", +119 => x"00000000", +120 => x"72098105", +121 => x"72050970", +122 => x"81050906", +123 => x"0a098106", +124 => x"53510400", +125 => x"00000000", +126 => x"00000000", +127 => x"00000000", +128 => x"71098105", +129 => x"52040000", +130 => x"00000000", +131 => x"00000000", +132 => x"00000000", +133 => x"00000000", +134 => x"00000000", +135 => x"00000000", +136 => x"72720981", +137 => x"05055351", +138 => x"04000000", +139 => x"00000000", +140 => x"00000000", +141 => x"00000000", +142 => x"00000000", +143 => x"00000000", +144 => x"72097206", +145 => x"73730906", +146 => x"07535104", +147 => x"00000000", +148 => x"00000000", +149 => x"00000000", +150 => x"00000000", +151 => x"00000000", +152 => x"71fc0608", +153 => x"72830609", +154 => x"81058305", +155 => x"1010102a", +156 => x"81ff0652", +157 => x"04000000", +158 => x"00000000", +159 => x"00000000", +160 => x"71fc0608", +161 => x"0b0b80dd", +162 => x"cc738306", +163 => x"10100508", +164 => x"060b0b0b", +165 => x"88aa0400", +166 => x"00000000", +167 => x"00000000", +168 => x"80088408", +169 => x"88087575", +170 => x"0b0b0ba1", +171 => x"c92d5050", +172 => x"80085688", +173 => x"0c840c80", +174 => x"0c510400", +175 => x"00000000", +176 => x"80088408", +177 => x"88087575", +178 => x"0b0b0ba2", +179 => x"8d2d5050", +180 => x"80085688", +181 => x"0c840c80", +182 => x"0c510400", +183 => x"00000000", +184 => x"72097081", +185 => x"0509060a", +186 => x"8106ff05", +187 => x"70547106", +188 => x"73097274", +189 => x"05ff0506", +190 => x"07515151", +191 => x"04000000", +192 => x"72097081", +193 => x"0509060a", +194 => x"098106ff", +195 => x"05705471", +196 => x"06730972", +197 => x"7405ff05", +198 => x"06075151", +199 => x"51040000", +200 => x"05ff0504", +201 => x"00000000", +202 => x"00000000", +203 => x"00000000", +204 => x"00000000", +205 => x"00000000", +206 => x"00000000", +207 => x"00000000", +208 => x"810b0b0b", +209 => x"80dddc0c", +210 => x"51040000", +211 => x"00000000", +212 => x"00000000", +213 => x"00000000", +214 => x"00000000", +215 => x"00000000", +216 => x"71810552", +217 => x"04000000", +218 => x"00000000", +219 => x"00000000", +220 => x"00000000", +221 => x"00000000", +222 => x"00000000", +223 => x"00000000", +224 => x"00000000", +225 => x"00000000", +226 => x"00000000", +227 => x"00000000", +228 => x"00000000", +229 => x"00000000", +230 => x"00000000", +231 => x"00000000", +232 => x"02840572", +233 => x"10100552", +234 => x"04000000", +235 => x"00000000", +236 => x"00000000", +237 => x"00000000", +238 => x"00000000", +239 => x"00000000", +240 => x"00000000", +241 => x"00000000", +242 => x"00000000", +243 => x"00000000", +244 => x"00000000", +245 => x"00000000", +246 => x"00000000", +247 => x"00000000", +248 => x"717105ff", +249 => x"05715351", +250 => x"020d0400", +251 => x"00000000", +252 => x"00000000", +253 => x"00000000", +254 => x"00000000", +255 => x"00000000", +256 => x"83d93f80", +257 => x"c78e3f04", +258 => x"10101010", +259 => x"10101010", +260 => x"10101010", +261 => x"10101010", +262 => x"10101010", +263 => x"10101010", +264 => x"10101010", +265 => x"10101053", +266 => x"51047381", +267 => x"ff067383", +268 => x"06098105", +269 => x"83051010", +270 => x"102b0772", +271 => x"fc060c51", +272 => x"51043c04", +273 => x"72728072", +274 => x"8106ff05", +275 => x"09720605", +276 => x"71105272", +277 => x"0a100a53", +278 => x"72ed3851", +279 => x"51535104", +280 => x"ff3d0d0b", +281 => x"0b80edd0", +282 => x"08528412", +283 => x"08708106", +284 => x"515170f6", +285 => x"38710881", +286 => x"ff06800c", +287 => x"833d0d04", +288 => x"ff3d0d0b", +289 => x"0b80edd0", +290 => x"08528412", +291 => x"08700a10", +292 => x"0a708106", +293 => x"51515170", +294 => x"f1387372", +295 => x"0c833d0d", +296 => x"0480dddc", +297 => x"08802ea8", +298 => x"38838080", +299 => x"0b0b0b80", +300 => x"edd00c82", +301 => x"a0800b0b", +302 => x"0b80edd4", +303 => x"0c829080", +304 => x"0b80ede4", +305 => x"0c0b0b80", +306 => x"edd80b80", +307 => x"ede80c04", +308 => x"f8808080", +309 => x"a40b0b0b", +310 => x"80edd00c", +311 => x"f8808082", +312 => x"800b0b0b", +313 => x"80edd40c", +314 => x"f8808084", +315 => x"800b80ed", +316 => x"e40cf880", +317 => x"8080940b", +318 => x"80ede80c", +319 => x"f8808080", +320 => x"9c0b80ed", +321 => x"e00cf880", +322 => x"8080a00b", +323 => x"80edec0c", +324 => x"04f23d0d", +325 => x"600b0b80", +326 => x"edd40856", +327 => x"5d82750c", +328 => x"8059805a", +329 => x"800b8f3d", +330 => x"71101017", +331 => x"70085957", +332 => x"5d5b8076", +333 => x"81ff067c", +334 => x"832b5658", +335 => x"5276537b", +336 => x"5196bc3f", +337 => x"7d7f7a72", +338 => x"077c7207", +339 => x"71716081", +340 => x"05415f5d", +341 => x"5b595755", +342 => x"7a8724bb", +343 => x"380b0b80", +344 => x"edd4087b", +345 => x"10101170", +346 => x"08585155", +347 => x"807681ff", +348 => x"067c832b", +349 => x"56585276", +350 => x"537b5196", +351 => x"823f7d7f", +352 => x"7a72077c", +353 => x"72077171", +354 => x"60810541", +355 => x"5f5d5b59", +356 => x"5755877b", +357 => x"25c73876", +358 => x"7d0c7784", +359 => x"1e0c7c80", +360 => x"0c903d0d", +361 => x"04ff3d0d", +362 => x"80eddc33", +363 => x"5170a738", +364 => x"80dde808", +365 => x"70085252", +366 => x"70802e94", +367 => x"38841280", +368 => x"dde80c70", +369 => x"2d80dde8", +370 => x"08700852", +371 => x"5270ee38", +372 => x"810b80ed", +373 => x"dc34833d", +374 => x"0d040480", +375 => x"3d0d0b0b", +376 => x"80edcc08", +377 => x"802e8e38", +378 => x"0b0b0b0b", +379 => x"800b802e", +380 => x"09810685", +381 => x"38823d0d", +382 => x"040b0b80", +383 => x"edcc510b", +384 => x"0b0bf3fc", +385 => x"3f823d0d", +386 => x"0404ff3d", +387 => x"0d028f05", +388 => x"3352718a", +389 => x"2e8a3871", +390 => x"51fce53f", +391 => x"833d0d04", +392 => x"8d51fcdc", +393 => x"3f7151fc", +394 => x"d73f833d", +395 => x"0d04ce3d", +396 => x"0db53d70", +397 => x"70840552", +398 => x"088c8a5c", +399 => x"56a53d5e", +400 => x"5c807570", +401 => x"81055733", +402 => x"765b5558", +403 => x"73782e80", +404 => x"c1388e3d", +405 => x"5b73a52e", +406 => x"09810680", +407 => x"c5387870", +408 => x"81055a33", +409 => x"547380e4", +410 => x"2e81b638", +411 => x"7380e424", +412 => x"80c63873", +413 => x"80e32ea1", +414 => x"388052a5", +415 => x"51792d80", +416 => x"52735179", +417 => x"2d821858", +418 => x"78708105", +419 => x"5a335473", +420 => x"c4387780", +421 => x"0cb43d0d", +422 => x"047b841d", +423 => x"83123356", +424 => x"5d578052", +425 => x"7351792d", +426 => x"81187970", +427 => x"81055b33", +428 => x"555873ff", +429 => x"a038db39", +430 => x"7380f32e", +431 => x"098106ff", +432 => x"b8387b84", +433 => x"1d710859", +434 => x"5d568077", +435 => x"33555673", +436 => x"762e8d38", +437 => x"81167018", +438 => x"70335755", +439 => x"5674f538", +440 => x"ff165580", +441 => x"7625ffa0", +442 => x"38767081", +443 => x"05583354", +444 => x"80527351", +445 => x"792d8118", +446 => x"75ff1757", +447 => x"57588076", +448 => x"25ff8538", +449 => x"76708105", +450 => x"58335480", +451 => x"52735179", +452 => x"2d811875", +453 => x"ff175757", +454 => x"58758024", +455 => x"cc38fee8", +456 => x"397b841d", +457 => x"71087071", +458 => x"9f2c5953", +459 => x"595d5680", +460 => x"75248195", +461 => x"38757d7c", +462 => x"58565480", +463 => x"5773772e", +464 => x"098106b6", +465 => x"38b07b34", +466 => x"02b50556", +467 => x"7a762e97", +468 => x"38ff1656", +469 => x"75337570", +470 => x"81055734", +471 => x"8117577a", +472 => x"762e0981", +473 => x"06eb3880", +474 => x"7534767d", +475 => x"ff125758", +476 => x"56758024", +477 => x"fef338fe", +478 => x"8f398a52", +479 => x"7351938d", +480 => x"3f80080b", +481 => x"0b80cfc0", +482 => x"05337670", +483 => x"81055834", +484 => x"8a527351", +485 => x"92b33f80", +486 => x"08548008", +487 => x"802effac", +488 => x"388a5273", +489 => x"5192e63f", +490 => x"80080b0b", +491 => x"80cfc005", +492 => x"33767081", +493 => x"0558348a", +494 => x"52735192", +495 => x"8c3f8008", +496 => x"548008ff", +497 => x"b538ff84", +498 => x"39745276", +499 => x"53b43dff", +500 => x"b8055190", +501 => x"ff3fa33d", +502 => x"0856fed9", +503 => x"39803d0d", +504 => x"80c10b81", +505 => x"bc9c3480", +506 => x"0b81bdf4", +507 => x"0c70800c", +508 => x"823d0d04", +509 => x"ff3d0d80", +510 => x"0b81bc9c", +511 => x"33525270", +512 => x"80c12e99", +513 => x"387181bd", +514 => x"f4080781", +515 => x"bdf40c80", +516 => x"c20b81bc", +517 => x"a0347080", +518 => x"0c833d0d", +519 => x"04810b81", +520 => x"bdf40807", +521 => x"81bdf40c", +522 => x"80c20b81", +523 => x"bca03470", +524 => x"800c833d", +525 => x"0d04fd3d", +526 => x"0d757008", +527 => x"8a055353", +528 => x"81bc9c33", +529 => x"517080c1", +530 => x"2e8b3873", +531 => x"f3387080", +532 => x"0c853d0d", +533 => x"04ff1270", +534 => x"81bc9808", +535 => x"31740c80", +536 => x"0c853d0d", +537 => x"04fc3d0d", +538 => x"81bca408", +539 => x"5574802e", +540 => x"8c387675", +541 => x"08710c81", +542 => x"bca40856", +543 => x"548c1553", +544 => x"81bc9808", +545 => x"528a518d", +546 => x"b83f7380", +547 => x"0c863d0d", +548 => x"04fb3d0d", +549 => x"77700856", +550 => x"56b05381", +551 => x"bca40852", +552 => x"74519ed1", +553 => x"3f850b8c", +554 => x"170c850b", +555 => x"8c160c75", +556 => x"08750c81", +557 => x"bca40854", +558 => x"73802e8a", +559 => x"38730875", +560 => x"0c81bca4", +561 => x"08548c14", +562 => x"5381bc98", +563 => x"08528a51", +564 => x"8cef3f84", +565 => x"1508ad38", +566 => x"860b8c16", +567 => x"0c881552", +568 => x"88160851", +569 => x"8bfb3f81", +570 => x"bca40870", +571 => x"08760c54", +572 => x"8c157054", +573 => x"548a5273", +574 => x"08518cc5", +575 => x"3f73800c", +576 => x"873d0d04", +577 => x"750854b0", +578 => x"53735275", +579 => x"519de63f", +580 => x"73800c87", +581 => x"3d0d04e1", +582 => x"3d0db051", +583 => x"91883f80", +584 => x"0881bc94", +585 => x"0cb05190", +586 => x"fd3f8008", +587 => x"81bca40c", +588 => x"81bc9408", +589 => x"80080c80", +590 => x"0b800884", +591 => x"050c820b", +592 => x"80088805", +593 => x"0ca80b80", +594 => x"088c050c", +595 => x"9f530b0b", +596 => x"80cfcc52", +597 => x"80089005", +598 => x"519d9a3f", +599 => x"993d5c9f", +600 => x"530b0b80", +601 => x"cfec527b", +602 => x"519d8a3f", +603 => x"8a0b80fa", +604 => x"dc0c0b0b", +605 => x"80da9051", +606 => x"f9b43f0b", +607 => x"0b80d08c", +608 => x"51f9ab3f", +609 => x"0b0b80da", +610 => x"9051f9a2", +611 => x"3f80ddf0", +612 => x"08802e89", +613 => x"aa380b0b", +614 => x"80d0bc51", +615 => x"f9903f0b", +616 => x"0b80da90", +617 => x"51f9873f", +618 => x"80ddec08", +619 => x"520b0b80", +620 => x"d0e851f8", +621 => x"f93f8051", +622 => x"aecb3f80", +623 => x"0880edfc", +624 => x"0c810b92", +625 => x"3d5c5880", +626 => x"0b80ddec", +627 => x"082582d5", +628 => x"388e3d5d", +629 => x"80c10b81", +630 => x"bc9c3481", +631 => x"0b81bdf4", +632 => x"0c80c20b", +633 => x"81bca034", +634 => x"825e835a", +635 => x"9f530b0b", +636 => x"80d19852", +637 => x"7a519bfd", +638 => x"3f815f80", +639 => x"7b537c52", +640 => x"558be23f", +641 => x"8008752e", +642 => x"09810683", +643 => x"38815574", +644 => x"81bdf40c", +645 => x"7d705755", +646 => x"748325a1", +647 => x"38741010", +648 => x"15fd0540", +649 => x"a13dffbc", +650 => x"05538352", +651 => x"75518a91", +652 => x"3f811e70", +653 => x"5f705755", +654 => x"837524e1", +655 => x"387f5474", +656 => x"5380ee80", +657 => x"5281bcac", +658 => x"518a863f", +659 => x"81bca408", +660 => x"70085757", +661 => x"b0537652", +662 => x"75519b99", +663 => x"3f850b8c", +664 => x"180c850b", +665 => x"8c170c76", +666 => x"08760c81", +667 => x"bca40855", +668 => x"74802e8a", +669 => x"38740876", +670 => x"0c81bca4", +671 => x"08558c15", +672 => x"5381bc98", +673 => x"08528a51", +674 => x"89b73f84", +675 => x"160887b8", +676 => x"38860b8c", +677 => x"170c8816", +678 => x"52881708", +679 => x"5188c23f", +680 => x"81bca408", +681 => x"7008770c", +682 => x"578c1670", +683 => x"54558a52", +684 => x"74085189", +685 => x"8c3f80c1", +686 => x"0b81bca0", +687 => x"33565675", +688 => x"7526a238", +689 => x"80c35275", +690 => x"5189f03f", +691 => x"80087f2e", +692 => x"87b13881", +693 => x"167081ff", +694 => x"0681bca0", +695 => x"33525755", +696 => x"747627e0", +697 => x"38797e29", +698 => x"60705471", +699 => x"5358558b", +700 => x"d83f8008", +701 => x"5e747731", +702 => x"70872980", +703 => x"08318008", +704 => x"8a0581bc", +705 => x"9c3381bc", +706 => x"98085a5a", +707 => x"525b5576", +708 => x"80c12e87", +709 => x"9d3878f7", +710 => x"38811858", +711 => x"80ddec08", +712 => x"7825fdb0", +713 => x"388051ab", +714 => x"dc3f8008", +715 => x"81bc900c", +716 => x"0b0b80d1", +717 => x"b851f5f6", +718 => x"3f0b0b80", +719 => x"da9051f5", +720 => x"ed3f0b0b", +721 => x"80d1c851", +722 => x"f5e43f0b", +723 => x"0b80da90", +724 => x"51f5db3f", +725 => x"81bc9808", +726 => x"520b0b80", +727 => x"d28051f5", +728 => x"cd3f8552", +729 => x"0b0b80d2", +730 => x"9c51f5c2", +731 => x"3f81bdf4", +732 => x"08520b0b", +733 => x"80d2b851", +734 => x"f5b43f81", +735 => x"520b0b80", +736 => x"d29c51f5", +737 => x"a93f81bc", +738 => x"9c33520b", +739 => x"0b80d2d4", +740 => x"51f59b3f", +741 => x"80c1520b", +742 => x"0b80d2f0", +743 => x"51f58f3f", +744 => x"81bca033", +745 => x"520b0b80", +746 => x"d38c51f5", +747 => x"813f80c2", +748 => x"520b0b80", +749 => x"d2f051f4", +750 => x"f53f81bc", +751 => x"cc08520b", +752 => x"0b80d3a8", +753 => x"51f4e73f", +754 => x"87520b0b", +755 => x"80d29c51", +756 => x"f4dc3f80", +757 => x"fadc0852", +758 => x"0b0b80d3", +759 => x"c451f4ce", +760 => x"3f0b0b80", +761 => x"d3e051f4", +762 => x"c53f0b0b", +763 => x"80d48c51", +764 => x"f4bc3f81", +765 => x"bca40870", +766 => x"0853560b", +767 => x"0b80d498", +768 => x"51f4ab3f", +769 => x"0b0b80d4", +770 => x"b451f4a2", +771 => x"3f81bca4", +772 => x"08841108", +773 => x"535d0b0b", +774 => x"80d4e851", +775 => x"f4903f80", +776 => x"520b0b80", +777 => x"d29c51f4", +778 => x"853f81bc", +779 => x"a4088811", +780 => x"0853580b", +781 => x"0b80d584", +782 => x"51f3f33f", +783 => x"82520b0b", +784 => x"80d29c51", +785 => x"f3e83f81", +786 => x"bca4088c", +787 => x"11085359", +788 => x"0b0b80d5", +789 => x"a051f3d6", +790 => x"3f91520b", +791 => x"0b80d29c", +792 => x"51f3cb3f", +793 => x"81bca408", +794 => x"9005520b", +795 => x"0b80d5bc", +796 => x"51f3bb3f", +797 => x"0b0b80d5", +798 => x"d851f3b2", +799 => x"3f0b0b80", +800 => x"d69051f3", +801 => x"a93f81bc", +802 => x"94087008", +803 => x"53570b0b", +804 => x"80d49851", +805 => x"f3983f0b", +806 => x"0b80d6a4", +807 => x"51f38f3f", +808 => x"81bc9408", +809 => x"84110853", +810 => x"550b0b80", +811 => x"d4e851f2", +812 => x"fd3f8052", +813 => x"0b0b80d2", +814 => x"9c51f2f2", +815 => x"3f81bc94", +816 => x"08881108", +817 => x"53560b0b", +818 => x"80d58451", +819 => x"f2e03f81", +820 => x"520b0b80", +821 => x"d29c51f2", +822 => x"d53f81bc", +823 => x"94088c11", +824 => x"08535d0b", +825 => x"0b80d5a0", +826 => x"51f2c33f", +827 => x"92520b0b", +828 => x"80d29c51", +829 => x"f2b83f81", +830 => x"bc940890", +831 => x"05520b0b", +832 => x"80d5bc51", +833 => x"f2a83f0b", +834 => x"0b80d5d8", +835 => x"51f29f3f", +836 => x"7d520b0b", +837 => x"80d6e451", +838 => x"f2943f85", +839 => x"520b0b80", +840 => x"d29c51f2", +841 => x"893f7952", +842 => x"0b0b80d7", +843 => x"8051f1fe", +844 => x"3f8d520b", +845 => x"0b80d29c", +846 => x"51f1f33f", +847 => x"7f520b0b", +848 => x"80d79c51", +849 => x"f1e83f87", +850 => x"520b0b80", +851 => x"d29c51f1", +852 => x"dd3f7e52", +853 => x"0b0b80d7", +854 => x"b851f1d2", +855 => x"3f81520b", +856 => x"0b80d29c", +857 => x"51f1c73f", +858 => x"7b520b0b", +859 => x"80d7d451", +860 => x"f1bc3f0b", +861 => x"0b80d7f0", +862 => x"51f1b33f", +863 => x"7a520b0b", +864 => x"80d8a851", +865 => x"f1a83f0b", +866 => x"0b80d8c4", +867 => x"51f19f3f", +868 => x"0b0b80da", +869 => x"9051f196", +870 => x"3f81bc90", +871 => x"0880edfc", +872 => x"08317080", +873 => x"edf80c52", +874 => x"0b0b80d8", +875 => x"fc51f0fe", +876 => x"3f80edf8", +877 => x"08568176", +878 => x"2581a538", +879 => x"80ddec08", +880 => x"705376bd", +881 => x"84c02952", +882 => x"5b85fe3f", +883 => x"800880ed", +884 => x"f00c7552", +885 => x"7a5185f1", +886 => x"3f800880", +887 => x"edf40c75", +888 => x"8ddd2952", +889 => x"7a87e829", +890 => x"5185de3f", +891 => x"800881bc", +892 => x"a80c0b0b", +893 => x"80d98c51", +894 => x"f0b43f80", +895 => x"edf00852", +896 => x"0b0b80d9", +897 => x"bc51f0a6", +898 => x"3f0b0b80", +899 => x"d9c451f0", +900 => x"9d3f80ed", +901 => x"f408520b", +902 => x"0b80d9bc", +903 => x"51f08f3f", +904 => x"81bca808", +905 => x"520b0b80", +906 => x"d9f451f0", +907 => x"813f0b0b", +908 => x"80da9051", +909 => x"eff83f80", +910 => x"0b800ca1", +911 => x"3d0d040b", +912 => x"0b80da94", +913 => x"51f6d539", +914 => x"760856b0", +915 => x"53755276", +916 => x"5193a23f", +917 => x"80c10b81", +918 => x"bca03356", +919 => x"56f8e039", +920 => x"0b0b80da", +921 => x"c451efc6", +922 => x"3f0b0b80", +923 => x"dafc51ef", +924 => x"bd3f0b0b", +925 => x"80da9051", +926 => x"efb43f80", +927 => x"0b800ca1", +928 => x"3d0d04a1", +929 => x"3dffb805", +930 => x"52805180", +931 => x"d43f9f53", +932 => x"0b0b80db", +933 => x"9c527a51", +934 => x"92db3f77", +935 => x"7881bc98", +936 => x"0c811770", +937 => x"81ff0681", +938 => x"bca03352", +939 => x"58565af8", +940 => x"af39ff15", +941 => x"7077317e", +942 => x"0c59800b", +943 => x"81195959", +944 => x"80ddec08", +945 => x"7825f68c", +946 => x"38f8da39", +947 => x"ff3d0d73", +948 => x"82327030", +949 => x"70720780", +950 => x"25800c52", +951 => x"52833d0d", +952 => x"04fe3d0d", +953 => x"74767153", +954 => x"54527182", +955 => x"2e833883", +956 => x"5171812e", +957 => x"9a388172", +958 => x"269f3871", +959 => x"822eb838", +960 => x"71842ea9", +961 => x"3870730c", +962 => x"70800c84", +963 => x"3d0d0480", +964 => x"e40b81bc", +965 => x"9808258b", +966 => x"3880730c", +967 => x"70800c84", +968 => x"3d0d0483", +969 => x"730c7080", +970 => x"0c843d0d", +971 => x"0482730c", +972 => x"70800c84", +973 => x"3d0d0481", +974 => x"730c7080", +975 => x"0c843d0d", +976 => x"04803d0d", +977 => x"74741482", +978 => x"05710c80", +979 => x"0c823d0d", +980 => x"04f73d0d", +981 => x"7b7d7f61", +982 => x"85127082", +983 => x"2b751170", +984 => x"74717084", +985 => x"05530c5a", +986 => x"5a5d5b76", +987 => x"0c7980f8", +988 => x"180c7986", +989 => x"12525758", +990 => x"5a5a7676", +991 => x"24993876", +992 => x"b329822b", +993 => x"79115153", +994 => x"76737084", +995 => x"05550c81", +996 => x"14547574", +997 => x"25f23876", +998 => x"81cc2919", +999 => x"fc110881", +1000 => x"05fc120c", +1001 => x"7a197008", +1002 => x"9fa0130c", +1003 => x"5856850b", +1004 => x"81bc980c", +1005 => x"75800c8b", +1006 => x"3d0d04fe", +1007 => x"3d0d0293", +1008 => x"05335180", +1009 => x"02840597", +1010 => x"05335452", +1011 => x"70732e88", +1012 => x"3871800c", +1013 => x"843d0d04", +1014 => x"7081bc9c", +1015 => x"34810b80", +1016 => x"0c843d0d", +1017 => x"04f83d0d", +1018 => x"7a7c5956", +1019 => x"820b8319", +1020 => x"55557416", +1021 => x"70337533", +1022 => x"5b515372", +1023 => x"792e80c6", +1024 => x"3880c10b", +1025 => x"81168116", +1026 => x"56565782", +1027 => x"7525e338", +1028 => x"ffa91770", +1029 => x"81ff0655", +1030 => x"59738226", +1031 => x"83388755", +1032 => x"81537680", +1033 => x"d22e9838", +1034 => x"77527551", +1035 => x"91993f80", +1036 => x"53728008", +1037 => x"25893887", +1038 => x"1581bc98", +1039 => x"0c815372", +1040 => x"800c8a3d", +1041 => x"0d047281", +1042 => x"bc9c3482", +1043 => x"7525ffa2", +1044 => x"38ffbd39", +1045 => x"f93d0d79", +1046 => x"7b7d5458", +1047 => x"72597730", +1048 => x"79703070", +1049 => x"72079f2a", +1050 => x"7371315a", +1051 => x"52597779", +1052 => x"56730c53", +1053 => x"7384130c", +1054 => x"54800c89", +1055 => x"3d0d04f9", +1056 => x"3d0d797b", +1057 => x"7d7f5654", +1058 => x"52547280", +1059 => x"2ea03870", +1060 => x"577158a0", +1061 => x"73315280", +1062 => x"7225a138", +1063 => x"7770742b", +1064 => x"5770732a", +1065 => x"78752b07", +1066 => x"56517476", +1067 => x"53517074", +1068 => x"0c718415", +1069 => x"0c73800c", +1070 => x"893d0d04", +1071 => x"80567772", +1072 => x"302b5574", +1073 => x"765351e6", +1074 => x"39fb3d0d", +1075 => x"77795555", +1076 => x"80567575", +1077 => x"24ab3880", +1078 => x"74249d38", +1079 => x"80537352", +1080 => x"745180e1", +1081 => x"3f800854", +1082 => x"75802e85", +1083 => x"38800830", +1084 => x"5473800c", +1085 => x"873d0d04", +1086 => x"73307681", +1087 => x"325754dc", +1088 => x"39743055", +1089 => x"81567380", +1090 => x"25d238ec", +1091 => x"39fa3d0d", +1092 => x"787a5755", +1093 => x"80577675", +1094 => x"24a43875", +1095 => x"9f2c5481", +1096 => x"53757432", +1097 => x"74315274", +1098 => x"519b3f80", +1099 => x"08547680", +1100 => x"2e853880", +1101 => x"08305473", +1102 => x"800c883d", +1103 => x"0d047430", +1104 => x"558157d7", +1105 => x"39fc3d0d", +1106 => x"76785354", +1107 => x"81538074", +1108 => x"73265255", +1109 => x"72802e98", +1110 => x"3870802e", +1111 => x"ab388072", +1112 => x"24a63871", +1113 => x"10731075", +1114 => x"72265354", +1115 => x"5272ea38", +1116 => x"73517883", +1117 => x"38745170", +1118 => x"800c863d", +1119 => x"0d04720a", +1120 => x"100a720a", +1121 => x"100a5353", +1122 => x"72802ee4", +1123 => x"38717426", +1124 => x"ed387372", +1125 => x"31757407", +1126 => x"740a100a", +1127 => x"740a100a", +1128 => x"55555654", +1129 => x"e339ff3d", +1130 => x"0d735280", +1131 => x"e6b80851", +1132 => x"963f833d", +1133 => x"0d04ff3d", +1134 => x"0d735280", +1135 => x"e6b80851", +1136 => x"90cc3f83", +1137 => x"3d0d04f4", +1138 => x"3d0d7e60", +1139 => x"8b1170f8", +1140 => x"065b5555", +1141 => x"5d729626", +1142 => x"83389058", +1143 => x"80782474", +1144 => x"79260755", +1145 => x"80547474", +1146 => x"2e098106", +1147 => x"80ca387c", +1148 => x"518d9e3f", +1149 => x"7783f726", +1150 => x"80c53877", +1151 => x"832a7010", +1152 => x"101080de", +1153 => x"b0058c11", +1154 => x"08585854", +1155 => x"75772e81", +1156 => x"f0388416", +1157 => x"08fc068c", +1158 => x"17088818", +1159 => x"08718c12", +1160 => x"0c88120c", +1161 => x"5b760584", +1162 => x"11088107", +1163 => x"84120c53", +1164 => x"7c518cde", +1165 => x"3f881654", +1166 => x"73800c8e", +1167 => x"3d0d0477", +1168 => x"892a7883", +1169 => x"2a585473", +1170 => x"802ebf38", +1171 => x"77862ab8", +1172 => x"05578474", +1173 => x"27b43880", +1174 => x"db145794", +1175 => x"7427ab38", +1176 => x"778c2a80", +1177 => x"ee055780", +1178 => x"d474279e", +1179 => x"38778f2a", +1180 => x"80f70557", +1181 => x"82d47427", +1182 => x"91387792", +1183 => x"2a80fc05", +1184 => x"578ad474", +1185 => x"27843880", +1186 => x"fe577610", +1187 => x"101080de", +1188 => x"b0058c11", +1189 => x"08565374", +1190 => x"732ea338", +1191 => x"841508fc", +1192 => x"06707931", +1193 => x"5556738f", +1194 => x"2488e438", +1195 => x"73802588", +1196 => x"e6388c15", +1197 => x"08557473", +1198 => x"2e098106", +1199 => x"df388117", +1200 => x"5980dec0", +1201 => x"08567580", +1202 => x"deb82e82", +1203 => x"cc388416", +1204 => x"08fc0670", +1205 => x"79315555", +1206 => x"738f24bb", +1207 => x"3880deb8", +1208 => x"0b80dec4", +1209 => x"0c80deb8", +1210 => x"0b80dec0", +1211 => x"0c807424", +1212 => x"80db3874", +1213 => x"16841108", +1214 => x"81078412", +1215 => x"0c53feb0", +1216 => x"3988168c", +1217 => x"11085759", +1218 => x"75792e09", +1219 => x"8106fe82", +1220 => x"38821459", +1221 => x"ffab3977", +1222 => x"16788107", +1223 => x"84180c70", +1224 => x"80dec40c", +1225 => x"7080dec0", +1226 => x"0c80deb8", +1227 => x"0b8c120c", +1228 => x"8c110888", +1229 => x"120c7481", +1230 => x"0784120c", +1231 => x"74057471", +1232 => x"0c5b7c51", +1233 => x"8acc3f88", +1234 => x"1654fdec", +1235 => x"3983ff75", +1236 => x"27839138", +1237 => x"74892a75", +1238 => x"832a5454", +1239 => x"73802ebf", +1240 => x"3874862a", +1241 => x"b8055384", +1242 => x"7427b438", +1243 => x"80db1453", +1244 => x"947427ab", +1245 => x"38748c2a", +1246 => x"80ee0553", +1247 => x"80d47427", +1248 => x"9e38748f", +1249 => x"2a80f705", +1250 => x"5382d474", +1251 => x"27913874", +1252 => x"922a80fc", +1253 => x"05538ad4", +1254 => x"74278438", +1255 => x"80fe5372", +1256 => x"10101080", +1257 => x"deb00588", +1258 => x"11085557", +1259 => x"73772e86", +1260 => x"8b388414", +1261 => x"08fc065b", +1262 => x"747b278d", +1263 => x"38881408", +1264 => x"5473772e", +1265 => x"098106ea", +1266 => x"388c1408", +1267 => x"80deb00b", +1268 => x"84050871", +1269 => x"8c190c75", +1270 => x"88190c77", +1271 => x"88130c5c", +1272 => x"57758c15", +1273 => x"0c785380", +1274 => x"79248398", +1275 => x"3872822c", +1276 => x"81712b56", +1277 => x"56747b26", +1278 => x"80ca387a", +1279 => x"75065776", +1280 => x"82a33878", +1281 => x"fc068405", +1282 => x"59741070", +1283 => x"7c065555", +1284 => x"73829238", +1285 => x"841959f1", +1286 => x"3980deb0", +1287 => x"0b840508", +1288 => x"79545b78", +1289 => x"8025c638", +1290 => x"82da3974", +1291 => x"097b0670", +1292 => x"80deb00b", +1293 => x"84050c5b", +1294 => x"74105574", +1295 => x"7b268538", +1296 => x"7485bc38", +1297 => x"80deb00b", +1298 => x"88050870", +1299 => x"841208fc", +1300 => x"06707b31", +1301 => x"7b72268f", +1302 => x"7225075d", +1303 => x"575c5c55", +1304 => x"78802e80", +1305 => x"d9387915", +1306 => x"80dea808", +1307 => x"19901159", +1308 => x"545680de", +1309 => x"a408ff2e", +1310 => x"8838a08f", +1311 => x"13e08006", +1312 => x"5776527c", +1313 => x"51888c3f", +1314 => x"80085480", +1315 => x"08ff2e90", +1316 => x"38800876", +1317 => x"2782a738", +1318 => x"7480deb0", +1319 => x"2e829f38", +1320 => x"80deb00b", +1321 => x"88050855", +1322 => x"841508fc", +1323 => x"06707931", +1324 => x"7972268f", +1325 => x"7225075d", +1326 => x"555a7a83", +1327 => x"f2387781", +1328 => x"0784160c", +1329 => x"77157080", +1330 => x"deb00b88", +1331 => x"050c7481", +1332 => x"0784120c", +1333 => x"567c5187", +1334 => x"b93f8815", +1335 => x"5473800c", +1336 => x"8e3d0d04", +1337 => x"74832a70", +1338 => x"54548074", +1339 => x"24819b38", +1340 => x"72822c81", +1341 => x"712b80de", +1342 => x"b4080770", +1343 => x"80deb00b", +1344 => x"84050c75", +1345 => x"10101080", +1346 => x"deb00588", +1347 => x"1108718c", +1348 => x"1b0c7088", +1349 => x"1b0c7988", +1350 => x"130c5755", +1351 => x"5c55758c", +1352 => x"150cfdc1", +1353 => x"39787910", +1354 => x"101080de", +1355 => x"b0057056", +1356 => x"5b5c8c14", +1357 => x"08567574", +1358 => x"2ea33884", +1359 => x"1608fc06", +1360 => x"70793158", +1361 => x"53768f24", +1362 => x"83f13876", +1363 => x"802584af", +1364 => x"388c1608", +1365 => x"5675742e", +1366 => x"098106df", +1367 => x"38881481", +1368 => x"1a708306", +1369 => x"555a5472", +1370 => x"c9387b83", +1371 => x"06567580", +1372 => x"2efdb838", +1373 => x"ff1cf81b", +1374 => x"5b5c881a", +1375 => x"087a2eea", +1376 => x"38fdb539", +1377 => x"831953fc", +1378 => x"e4398314", +1379 => x"70822c81", +1380 => x"712b80de", +1381 => x"b4080770", +1382 => x"80deb00b", +1383 => x"84050c76", +1384 => x"10101080", +1385 => x"deb00588", +1386 => x"1108718c", +1387 => x"1c0c7088", +1388 => x"1c0c7a88", +1389 => x"130c5853", +1390 => x"5d5653fe", +1391 => x"e13980dd", +1392 => x"f4081759", +1393 => x"8008762e", +1394 => x"818b3880", +1395 => x"dea408ff", +1396 => x"2e848e38", +1397 => x"73763119", +1398 => x"80ddf40c", +1399 => x"73870670", +1400 => x"56537280", +1401 => x"2e883888", +1402 => x"73317015", +1403 => x"55557614", +1404 => x"9fff06a0", +1405 => x"80713116", +1406 => x"70547e53", +1407 => x"51538593", +1408 => x"3f800856", +1409 => x"8008ff2e", +1410 => x"819e3880", +1411 => x"ddf40813", +1412 => x"7080ddf4", +1413 => x"0c747580", +1414 => x"deb00b88", +1415 => x"050c7776", +1416 => x"31158107", +1417 => x"5556597a", +1418 => x"80deb02e", +1419 => x"83c03879", +1420 => x"8f2682ef", +1421 => x"38810b84", +1422 => x"150c8415", +1423 => x"08fc0670", +1424 => x"79317972", +1425 => x"268f7225", +1426 => x"075d555a", +1427 => x"7a802efc", +1428 => x"ed3880db", +1429 => x"3980089f", +1430 => x"ff065574", +1431 => x"feed3878", +1432 => x"80ddf40c", +1433 => x"80deb00b", +1434 => x"8805087a", +1435 => x"18810784", +1436 => x"120c5580", +1437 => x"dea00879", +1438 => x"27863878", +1439 => x"80dea00c", +1440 => x"80de9c08", +1441 => x"7927fca0", +1442 => x"387880de", +1443 => x"9c0c8415", +1444 => x"08fc0670", +1445 => x"79317972", +1446 => x"268f7225", +1447 => x"075d555a", +1448 => x"7a802efc", +1449 => x"99388839", +1450 => x"80745753", +1451 => x"fedd397c", +1452 => x"5183df3f", +1453 => x"800b800c", +1454 => x"8e3d0d04", +1455 => x"807324a5", +1456 => x"3872822c", +1457 => x"81712b80", +1458 => x"deb40807", +1459 => x"7080deb0", +1460 => x"0b84050c", +1461 => x"5c5a768c", +1462 => x"170c7388", +1463 => x"170c7588", +1464 => x"180cf9fd", +1465 => x"39831370", +1466 => x"822c8171", +1467 => x"2b80deb4", +1468 => x"08077080", +1469 => x"deb00b84", +1470 => x"050c5d5b", +1471 => x"53d8397a", +1472 => x"75065c7b", +1473 => x"fc9f3884", +1474 => x"19751056", +1475 => x"59f139ff", +1476 => x"17810559", +1477 => x"f7ab398c", +1478 => x"15088816", +1479 => x"08718c12", +1480 => x"0c88120c", +1481 => x"59751584", +1482 => x"11088107", +1483 => x"84120c58", +1484 => x"7c5182de", +1485 => x"3f881554", +1486 => x"fba33977", +1487 => x"16788107", +1488 => x"84180c8c", +1489 => x"17088818", +1490 => x"08718c12", +1491 => x"0c88120c", +1492 => x"5c7080de", +1493 => x"c40c7080", +1494 => x"dec00c80", +1495 => x"deb80b8c", +1496 => x"120c8c11", +1497 => x"0888120c", +1498 => x"77810784", +1499 => x"120c7705", +1500 => x"77710c55", +1501 => x"7c51829a", +1502 => x"3f881654", +1503 => x"f5ba3972", +1504 => x"16841108", +1505 => x"81078412", +1506 => x"0c588c16", +1507 => x"08881708", +1508 => x"718c120c", +1509 => x"88120c57", +1510 => x"7c5181f6", +1511 => x"3f881654", +1512 => x"f5963972", +1513 => x"84150cf4", +1514 => x"1af80670", +1515 => x"841d0881", +1516 => x"0607841d", +1517 => x"0c701c55", +1518 => x"56850b84", +1519 => x"150c850b", +1520 => x"88150c8f", +1521 => x"7627fdab", +1522 => x"38881b52", +1523 => x"7c5184be", +1524 => x"3f80deb0", +1525 => x"0b880508", +1526 => x"80ddf408", +1527 => x"5a55fd93", +1528 => x"397880dd", +1529 => x"f40c7380", +1530 => x"dea40cfb", +1531 => x"ef397284", +1532 => x"150cfcff", +1533 => x"39fb3d0d", +1534 => x"77707a7c", +1535 => x"58555356", +1536 => x"8f752780", +1537 => x"e6387276", +1538 => x"07830651", +1539 => x"7080dc38", +1540 => x"75735254", +1541 => x"70708405", +1542 => x"52087470", +1543 => x"8405560c", +1544 => x"73717084", +1545 => x"05530871", +1546 => x"70840553", +1547 => x"0c717084", +1548 => x"05530871", +1549 => x"70840553", +1550 => x"0c717084", +1551 => x"05530871", +1552 => x"70840553", +1553 => x"0cf01656", +1554 => x"54748f26", +1555 => x"c7388375", +1556 => x"27953870", +1557 => x"70840552", +1558 => x"08747084", +1559 => x"05560cfc", +1560 => x"15557483", +1561 => x"26ed3873", +1562 => x"715452ff", +1563 => x"155170ff", +1564 => x"2e983872", +1565 => x"70810554", +1566 => x"33727081", +1567 => x"055434ff", +1568 => x"115170ff", +1569 => x"2e098106", +1570 => x"ea387580", +1571 => x"0c873d0d", +1572 => x"040404fd", +1573 => x"3d0d800b", +1574 => x"81bdf80c", +1575 => x"765187ca", +1576 => x"3f800853", +1577 => x"8008ff2e", +1578 => x"88387280", +1579 => x"0c853d0d", +1580 => x"0481bdf8", +1581 => x"08547380", +1582 => x"2ef03875", +1583 => x"74710c52", +1584 => x"72800c85", +1585 => x"3d0d04fb", +1586 => x"3d0d7779", +1587 => x"70720783", +1588 => x"06535452", +1589 => x"70933871", +1590 => x"73730854", +1591 => x"56547173", +1592 => x"082e80c4", +1593 => x"38737554", +1594 => x"52713370", +1595 => x"81ff0652", +1596 => x"5470802e", +1597 => x"9d387233", +1598 => x"5570752e", +1599 => x"09810695", +1600 => x"38811281", +1601 => x"14713370", +1602 => x"81ff0654", +1603 => x"56545270", +1604 => x"e5387233", +1605 => x"557381ff", +1606 => x"067581ff", +1607 => x"06717131", +1608 => x"800c5552", +1609 => x"873d0d04", +1610 => x"7109f7fb", +1611 => x"fdff1306", +1612 => x"f8848281", +1613 => x"80065271", +1614 => x"97388414", +1615 => x"84167108", +1616 => x"54565471", +1617 => x"75082ee0", +1618 => x"38737554", +1619 => x"52ff9a39", +1620 => x"800b800c", +1621 => x"873d0d04", +1622 => x"fb3d0d77", +1623 => x"705256fe", +1624 => x"b03f80de", +1625 => x"b00b8805", +1626 => x"08841108", +1627 => x"fc06707b", +1628 => x"319fef05", +1629 => x"e08006e0", +1630 => x"80055255", +1631 => x"55a08075", +1632 => x"24943880", +1633 => x"527551fe", +1634 => x"8a3f80de", +1635 => x"b8081453", +1636 => x"7280082e", +1637 => x"8f387551", +1638 => x"fdf83f80", +1639 => x"5372800c", +1640 => x"873d0d04", +1641 => x"74305275", +1642 => x"51fde83f", +1643 => x"8008ff2e", +1644 => x"a83880de", +1645 => x"b00b8805", +1646 => x"08747631", +1647 => x"81078412", +1648 => x"0c5380dd", +1649 => x"f4087531", +1650 => x"80ddf40c", +1651 => x"7551fdc2", +1652 => x"3f810b80", +1653 => x"0c873d0d", +1654 => x"04805275", +1655 => x"51fdb43f", +1656 => x"80deb00b", +1657 => x"88050880", +1658 => x"08713154", +1659 => x"548f7325", +1660 => x"ffa43880", +1661 => x"0880dea4", +1662 => x"083180dd", +1663 => x"f40c7281", +1664 => x"0784150c", +1665 => x"7551fd8a", +1666 => x"3f8053ff", +1667 => x"9039f73d", +1668 => x"0d7b7d54", +1669 => x"5a72802e", +1670 => x"82833879", +1671 => x"51fcf23f", +1672 => x"f8138411", +1673 => x"0870fe06", +1674 => x"70138411", +1675 => x"08fc065c", +1676 => x"57585457", +1677 => x"80deb808", +1678 => x"742e82de", +1679 => x"38778415", +1680 => x"0c807381", +1681 => x"06565974", +1682 => x"792e81d5", +1683 => x"38771484", +1684 => x"11088106", +1685 => x"565374a0", +1686 => x"38771656", +1687 => x"7881e638", +1688 => x"88140855", +1689 => x"7480deb8", +1690 => x"2e82f938", +1691 => x"8c140870", +1692 => x"8c170c75", +1693 => x"88120c58", +1694 => x"75810784", +1695 => x"180c7517", +1696 => x"76710c54", +1697 => x"78819138", +1698 => x"83ff7627", +1699 => x"81c83875", +1700 => x"892a7683", +1701 => x"2a545473", +1702 => x"802ebf38", +1703 => x"75862ab8", +1704 => x"05538474", +1705 => x"27b43880", +1706 => x"db145394", +1707 => x"7427ab38", +1708 => x"758c2a80", +1709 => x"ee055380", +1710 => x"d474279e", +1711 => x"38758f2a", +1712 => x"80f70553", +1713 => x"82d47427", +1714 => x"91387592", +1715 => x"2a80fc05", +1716 => x"538ad474", +1717 => x"27843880", +1718 => x"fe537210", +1719 => x"101080de", +1720 => x"b0058811", +1721 => x"08555573", +1722 => x"752e82bf", +1723 => x"38841408", +1724 => x"fc065975", +1725 => x"79278d38", +1726 => x"88140854", +1727 => x"73752e09", +1728 => x"8106ea38", +1729 => x"8c140870", +1730 => x"8c190c74", +1731 => x"88190c77", +1732 => x"88120c55", +1733 => x"768c150c", +1734 => x"7951faf6", +1735 => x"3f8b3d0d", +1736 => x"04760877", +1737 => x"71315876", +1738 => x"05881808", +1739 => x"56567480", +1740 => x"deb82e80", +1741 => x"e0388c17", +1742 => x"08708c17", +1743 => x"0c758812", +1744 => x"0c53fe89", +1745 => x"39881408", +1746 => x"8c150870", +1747 => x"8c130c59", +1748 => x"88190cfe", +1749 => x"a3397583", +1750 => x"2a705454", +1751 => x"80742481", +1752 => x"98387282", +1753 => x"2c81712b", +1754 => x"80deb408", +1755 => x"0780deb0", +1756 => x"0b84050c", +1757 => x"74101010", +1758 => x"80deb005", +1759 => x"88110871", +1760 => x"8c1b0c70", +1761 => x"881b0c79", +1762 => x"88130c56", +1763 => x"5a55768c", +1764 => x"150cff84", +1765 => x"398159fd", +1766 => x"b4397716", +1767 => x"73810654", +1768 => x"55729838", +1769 => x"76087771", +1770 => x"31587505", +1771 => x"8c180888", +1772 => x"1908718c", +1773 => x"120c8812", +1774 => x"0c555574", +1775 => x"81078418", +1776 => x"0c7680de", +1777 => x"b00b8805", +1778 => x"0c80deac", +1779 => x"087526fe", +1780 => x"c73880de", +1781 => x"a8085279", +1782 => x"51fafd3f", +1783 => x"7951f9b2", +1784 => x"3ffeba39", +1785 => x"81778c17", +1786 => x"0c778817", +1787 => x"0c758c19", +1788 => x"0c758819", +1789 => x"0c59fd80", +1790 => x"39831470", +1791 => x"822c8171", +1792 => x"2b80deb4", +1793 => x"080780de", +1794 => x"b00b8405", +1795 => x"0c751010", +1796 => x"1080deb0", +1797 => x"05881108", +1798 => x"718c1c0c", +1799 => x"70881c0c", +1800 => x"7a88130c", +1801 => x"575b5653", +1802 => x"fee43980", +1803 => x"7324a338", +1804 => x"72822c81", +1805 => x"712b80de", +1806 => x"b4080780", +1807 => x"deb00b84", +1808 => x"050c5874", +1809 => x"8c180c73", +1810 => x"88180c76", +1811 => x"88160cfd", +1812 => x"c3398313", +1813 => x"70822c81", +1814 => x"712b80de", +1815 => x"b4080780", +1816 => x"deb00b84", +1817 => x"050c5953", +1818 => x"da39fe3d", +1819 => x"0d81bdfc", +1820 => x"0851708a", +1821 => x"3881be84", +1822 => x"7081bdfc", +1823 => x"0c517411", +1824 => x"52ff5371", +1825 => x"87fb8080", +1826 => x"26883871", +1827 => x"81bdfc0c", +1828 => x"70537280", +1829 => x"0c843d0d", +1830 => x"04fd3d0d", +1831 => x"800b80dd", +1832 => x"e0085454", +1833 => x"72812e9b", +1834 => x"387381be", +1835 => x"800ccff1", +1836 => x"3fcecd3f", +1837 => x"80edb852", +1838 => x"8151d8db", +1839 => x"3f800851", +1840 => x"899d3f72", +1841 => x"81be800c", +1842 => x"cfd73fce", +1843 => x"b33f80ed", +1844 => x"b8528151", +1845 => x"d8c13f80", +1846 => x"08518983", +1847 => x"3f00ff39", +1848 => x"00ff39f5", +1849 => x"3d0d7e60", +1850 => x"81be8008", +1851 => x"705b585b", +1852 => x"5b7580c2", +1853 => x"38777a25", +1854 => x"a138771b", +1855 => x"70337081", +1856 => x"ff065858", +1857 => x"59758a2e", +1858 => x"98387681", +1859 => x"ff0651ce", +1860 => x"ef3f8118", +1861 => x"58797824", +1862 => x"e1387980", +1863 => x"0c8d3d0d", +1864 => x"048d51ce", +1865 => x"db3f7833", +1866 => x"7081ff06", +1867 => x"5257ced0", +1868 => x"3f811858", +1869 => x"e0397955", +1870 => x"7a547d53", +1871 => x"85528d3d", +1872 => x"fc0551cd", +1873 => x"fd3f8008", +1874 => x"56888d3f", +1875 => x"7b80080c", +1876 => x"75800c8d", +1877 => x"3d0d04f6", +1878 => x"3d0d7d7f", +1879 => x"81be8008", +1880 => x"705a585a", +1881 => x"5a7580c3", +1882 => x"38767925", +1883 => x"b138761a", +1884 => x"58cded3f", +1885 => x"80087834", +1886 => x"800b8008", +1887 => x"81ff0657", +1888 => x"58758a2e", +1889 => x"a238758d", +1890 => x"32703070", +1891 => x"80257a07", +1892 => x"51515675", +1893 => x"b7388117", +1894 => x"57787724", +1895 => x"d1387656", +1896 => x"75800c8c", +1897 => x"3d0d0481", +1898 => x"58dc3978", +1899 => x"5579547c", +1900 => x"5384528c", +1901 => x"3dfc0551", +1902 => x"cd883f80", +1903 => x"08568798", +1904 => x"3f7a8008", +1905 => x"0c75800c", +1906 => x"8c3d0d04", +1907 => x"811756d0", +1908 => x"39f93d0d", +1909 => x"795781be", +1910 => x"8008802e", +1911 => x"ac387651", +1912 => x"89ab3f7b", +1913 => x"567a5580", +1914 => x"08810554", +1915 => x"76538252", +1916 => x"893dfc05", +1917 => x"51cccb3f", +1918 => x"80085786", +1919 => x"db3f7780", +1920 => x"080c7680", +1921 => x"0c893d0d", +1922 => x"0486cd3f", +1923 => x"850b8008", +1924 => x"0cff0b80", +1925 => x"0c893d0d", +1926 => x"04fb3d0d", +1927 => x"81be8008", +1928 => x"70565473", +1929 => x"88387480", +1930 => x"0c873d0d", +1931 => x"04775383", +1932 => x"52873dfc", +1933 => x"0551cc8a", +1934 => x"3f800854", +1935 => x"869a3f75", +1936 => x"80080c73", +1937 => x"800c873d", +1938 => x"0d04ff0b", +1939 => x"800c04fb", +1940 => x"3d0d7755", +1941 => x"81be8008", +1942 => x"802ea838", +1943 => x"745188ad", +1944 => x"3f800881", +1945 => x"05547453", +1946 => x"8752873d", +1947 => x"fc0551cb", +1948 => x"d13f8008", +1949 => x"5585e13f", +1950 => x"7580080c", +1951 => x"74800c87", +1952 => x"3d0d0485", +1953 => x"d33f850b", +1954 => x"80080cff", +1955 => x"0b800c87", +1956 => x"3d0d04fa", +1957 => x"3d0d81be", +1958 => x"8008802e", +1959 => x"a2387a55", +1960 => x"79547853", +1961 => x"8652883d", +1962 => x"fc0551cb", +1963 => x"953f8008", +1964 => x"5685a53f", +1965 => x"7680080c", +1966 => x"75800c88", +1967 => x"3d0d0485", +1968 => x"973f9d0b", +1969 => x"80080cff", +1970 => x"0b800c88", +1971 => x"3d0d04f7", +1972 => x"3d0d7b7d", +1973 => x"5b59bc53", +1974 => x"80527951", +1975 => x"86a53f80", +1976 => x"70565798", +1977 => x"56741970", +1978 => x"3370782b", +1979 => x"79078118", +1980 => x"f81a5a58", +1981 => x"59555884", +1982 => x"7524ea38", +1983 => x"767a2384", +1984 => x"19588070", +1985 => x"56579856", +1986 => x"74187033", +1987 => x"70782b79", +1988 => x"078118f8", +1989 => x"1a5a5859", +1990 => x"51548475", +1991 => x"24ea3876", +1992 => x"821b2388", +1993 => x"19588070", +1994 => x"56579856", +1995 => x"74187033", +1996 => x"70782b79", +1997 => x"078118f8", +1998 => x"1a5a5859", +1999 => x"51548475", +2000 => x"24ea3876", +2001 => x"841b0c8c", +2002 => x"19588070", +2003 => x"56579856", +2004 => x"74187033", +2005 => x"70782b79", +2006 => x"078118f8", +2007 => x"1a5a5859", +2008 => x"51548475", +2009 => x"24ea3876", +2010 => x"881b2390", +2011 => x"19588070", +2012 => x"56579856", +2013 => x"74187033", +2014 => x"70782b79", +2015 => x"078118f8", +2016 => x"1a5a5859", +2017 => x"51548475", +2018 => x"24ea3876", +2019 => x"8a1b2394", +2020 => x"19588070", +2021 => x"56579856", +2022 => x"74187033", +2023 => x"70782b79", +2024 => x"078118f8", +2025 => x"1a5a5859", +2026 => x"51548475", +2027 => x"24ea3876", +2028 => x"8c1b2398", +2029 => x"19588070", +2030 => x"56579856", +2031 => x"74187033", +2032 => x"70782b79", +2033 => x"078118f8", +2034 => x"1a5a5859", +2035 => x"51548475", +2036 => x"24ea3876", +2037 => x"8e1b239c", +2038 => x"19588070", +2039 => x"5657b856", +2040 => x"74187033", +2041 => x"70782b79", +2042 => x"078118f8", +2043 => x"1a5a5859", +2044 => x"5a548875", +2045 => x"24ea3876", +2046 => x"901b0c8b", +2047 => x"3d0d04e9", +2048 => x"3d0d6a81", +2049 => x"be800857", +2050 => x"57759338", +2051 => x"80c0800b", +2052 => x"84180c75", +2053 => x"ac180c75", +2054 => x"800c993d", +2055 => x"0d04893d", +2056 => x"70556a54", +2057 => x"558a5299", +2058 => x"3dffbc05", +2059 => x"51c8933f", +2060 => x"80087753", +2061 => x"755256fd", +2062 => x"963f829c", +2063 => x"3f778008", +2064 => x"0c75800c", +2065 => x"993d0d04", +2066 => x"e93d0d69", +2067 => x"5781be80", +2068 => x"08802eb5", +2069 => x"38765184", +2070 => x"b43f893d", +2071 => x"70568008", +2072 => x"81055577", +2073 => x"54568f52", +2074 => x"993dffbc", +2075 => x"0551c7d2", +2076 => x"3f80086b", +2077 => x"53765257", +2078 => x"fcd53f81", +2079 => x"db3f7780", +2080 => x"080c7680", +2081 => x"0c993d0d", +2082 => x"0481cd3f", +2083 => x"850b8008", +2084 => x"0cff0b80", +2085 => x"0c993d0d", +2086 => x"04fc3d0d", +2087 => x"815481be", +2088 => x"80088838", +2089 => x"73800c86", +2090 => x"3d0d0476", +2091 => x"5397b952", +2092 => x"863dfc05", +2093 => x"51c78b3f", +2094 => x"80085481", +2095 => x"9b3f7480", +2096 => x"080c7380", +2097 => x"0c863d0d", +2098 => x"04f43d0d", +2099 => x"7e80ede4", +2100 => x"08700881", +2101 => x"ff06913d", +2102 => x"f8055451", +2103 => x"5959c8b1", +2104 => x"3f775780", +2105 => x"5476557b", +2106 => x"7d585276", +2107 => x"538e3df0", +2108 => x"055183f4", +2109 => x"3f797b58", +2110 => x"790c7684", +2111 => x"1a0c7880", +2112 => x"0c8e3d0d", +2113 => x"04f43d0d", +2114 => x"7e80ede4", +2115 => x"08700870", +2116 => x"81ff0692", +2117 => x"3df80555", +2118 => x"515a5759", +2119 => x"c7f33f77", +2120 => x"57800b8b", +2121 => x"3d595476", +2122 => x"557b7d58", +2123 => x"52765377", +2124 => x"5183b53f", +2125 => x"8056bd84", +2126 => x"c0765555", +2127 => x"797b5852", +2128 => x"76537751", +2129 => x"83a23f7a", +2130 => x"5778802e", +2131 => x"84387679", +2132 => x"0c76800c", +2133 => x"8e3d0d04", +2134 => x"80e6b808", +2135 => x"800c04f7", +2136 => x"3d0d7b80", +2137 => x"e6b80882", +2138 => x"c811085a", +2139 => x"545a7780", +2140 => x"2e80da38", +2141 => x"81881884", +2142 => x"1908ff05", +2143 => x"81712b59", +2144 => x"55598074", +2145 => x"2480ea38", +2146 => x"807424b5", +2147 => x"3873822b", +2148 => x"78118805", +2149 => x"56568180", +2150 => x"19087706", +2151 => x"5372802e", +2152 => x"b6387816", +2153 => x"70085353", +2154 => x"79517408", +2155 => x"53722dff", +2156 => x"14fc17fc", +2157 => x"1779812c", +2158 => x"5a575754", +2159 => x"738025d6", +2160 => x"38770858", +2161 => x"77ffad38", +2162 => x"80e6b808", +2163 => x"53bc1308", +2164 => x"a5387951", +2165 => x"f6873f74", +2166 => x"0853722d", +2167 => x"ff14fc17", +2168 => x"fc177981", +2169 => x"2c5a5757", +2170 => x"54738025", +2171 => x"ffa838d1", +2172 => x"398057ff", +2173 => x"93397251", +2174 => x"bc130854", +2175 => x"732d7951", +2176 => x"f5db3ffb", +2177 => x"3d0d777a", +2178 => x"71028c05", +2179 => x"a3053358", +2180 => x"54545683", +2181 => x"732780d4", +2182 => x"38758306", +2183 => x"517080cc", +2184 => x"3874882b", +2185 => x"75077071", +2186 => x"902b0755", +2187 => x"518f7327", +2188 => x"a7387372", +2189 => x"70840554", +2190 => x"0c717471", +2191 => x"70840553", +2192 => x"0c747170", +2193 => x"8405530c", +2194 => x"74717084", +2195 => x"05530cf0", +2196 => x"14545272", +2197 => x"8f26db38", +2198 => x"83732790", +2199 => x"38737270", +2200 => x"8405540c", +2201 => x"fc135372", +2202 => x"8326f238", +2203 => x"ff135170", +2204 => x"ff2e9338", +2205 => x"74727081", +2206 => x"055434ff", +2207 => x"115170ff", +2208 => x"2e098106", +2209 => x"ef387580", +2210 => x"0c873d0d", +2211 => x"04fd3d0d", +2212 => x"75707183", +2213 => x"06535552", +2214 => x"70b43871", +2215 => x"70087009", +2216 => x"f7fbfdff", +2217 => x"1206f884", +2218 => x"82818006", +2219 => x"54525371", +2220 => x"9b388413", +2221 => x"70087009", +2222 => x"f7fbfdff", +2223 => x"1206f884", +2224 => x"82818006", +2225 => x"54525371", +2226 => x"802ee738", +2227 => x"72527133", +2228 => x"5372802e", +2229 => x"8a388112", +2230 => x"70335452", +2231 => x"72f83871", +2232 => x"7431800c", +2233 => x"853d0d04", +2234 => x"e43d0d6e", +2235 => x"a13d08a3", +2236 => x"3d085957", +2237 => x"5f80764d", +2238 => x"774ea33d", +2239 => x"08a53d08", +2240 => x"574b754c", +2241 => x"5e7d6c24", +2242 => x"86fb3880", +2243 => x"6a24878f", +2244 => x"38696b58", +2245 => x"566b6d5d", +2246 => x"467b4775", +2247 => x"44764564", +2248 => x"6468685c", +2249 => x"5c565674", +2250 => x"81e73878", +2251 => x"762782c7", +2252 => x"387581ff", +2253 => x"26832b55", +2254 => x"83ffff76", +2255 => x"278c3890", +2256 => x"55fe800a", +2257 => x"76278338", +2258 => x"98557575", +2259 => x"2a80dbcc", +2260 => x"057033a0", +2261 => x"77317131", +2262 => x"57555774", +2263 => x"802e9538", +2264 => x"75752ba0", +2265 => x"76317a77", +2266 => x"2b7c722a", +2267 => x"077c782b", +2268 => x"5d5b5956", +2269 => x"75902a76", +2270 => x"83ffff06", +2271 => x"71547a53", +2272 => x"59578880", +2273 => x"3f80085b", +2274 => x"87ea3f80", +2275 => x"08800879", +2276 => x"297c902b", +2277 => x"7c902a07", +2278 => x"56565973", +2279 => x"75279438", +2280 => x"8008ff05", +2281 => x"76155559", +2282 => x"75742687", +2283 => x"38747426", +2284 => x"87b93876", +2285 => x"52737531", +2286 => x"5187c93f", +2287 => x"80085587", +2288 => x"b33f8008", +2289 => x"80087929", +2290 => x"7b83ffff", +2291 => x"0677902b", +2292 => x"07565957", +2293 => x"73782796", +2294 => x"388008ff", +2295 => x"05761555", +2296 => x"57757426", +2297 => x"89387774", +2298 => x"26777131", +2299 => x"58567890", +2300 => x"2b770758", +2301 => x"805b7a40", +2302 => x"77417f61", +2303 => x"56547d80", +2304 => x"d938737f", +2305 => x"0c747f84", +2306 => x"050c7e80", +2307 => x"0c9e3d0d", +2308 => x"0480705c", +2309 => x"58747926", +2310 => x"dd387481", +2311 => x"ff26832b", +2312 => x"577483ff", +2313 => x"ff2682a5", +2314 => x"3874772a", +2315 => x"80dbcc05", +2316 => x"7033a079", +2317 => x"31713159", +2318 => x"5c5d7682", +2319 => x"b3387654", +2320 => x"74792783", +2321 => x"38815479", +2322 => x"76277407", +2323 => x"59815878", +2324 => x"ffa23876", +2325 => x"58805bff", +2326 => x"9d397352", +2327 => x"74539e3d", +2328 => x"e80551d7", +2329 => x"ef3f6769", +2330 => x"567f0c74", +2331 => x"7f84050c", +2332 => x"7e800c9e", +2333 => x"3d0d0475", +2334 => x"802e81c4", +2335 => x"387581ff", +2336 => x"26832b55", +2337 => x"83ffff76", +2338 => x"278c3890", +2339 => x"55fe800a", +2340 => x"76278338", +2341 => x"98557575", +2342 => x"2a80dbcc", +2343 => x"057033a0", +2344 => x"77317131", +2345 => x"575e5474", +2346 => x"84913878", +2347 => x"76315481", +2348 => x"76902a77", +2349 => x"83ffff06", +2350 => x"5f5d5b7b", +2351 => x"52735185", +2352 => x"c33f8008", +2353 => x"5785ad3f", +2354 => x"80088008", +2355 => x"7e297890", +2356 => x"2b7c902a", +2357 => x"07565659", +2358 => x"73752794", +2359 => x"388008ff", +2360 => x"05761555", +2361 => x"59757426", +2362 => x"87387474", +2363 => x"2684f338", +2364 => x"7b527375", +2365 => x"3151858c", +2366 => x"3f800855", +2367 => x"84f63f80", +2368 => x"0880087e", +2369 => x"297b83ff", +2370 => x"ff067790", +2371 => x"2b075659", +2372 => x"57737827", +2373 => x"96388008", +2374 => x"ff057615", +2375 => x"55577574", +2376 => x"26893877", +2377 => x"74267771", +2378 => x"31585a78", +2379 => x"902b7707", +2380 => x"7b41417f", +2381 => x"6156547d", +2382 => x"802efdc6", +2383 => x"38fe9b39", +2384 => x"75528151", +2385 => x"84ae3f80", +2386 => x"0856feb1", +2387 => x"399057fe", +2388 => x"800a7527", +2389 => x"fdd33898", +2390 => x"75712a80", +2391 => x"dbcc0570", +2392 => x"33a07331", +2393 => x"7131535d", +2394 => x"5e577680", +2395 => x"2efdcf38", +2396 => x"a0773175", +2397 => x"782b7772", +2398 => x"2a077779", +2399 => x"2b7b7a2b", +2400 => x"7d742a07", +2401 => x"7d7b2b73", +2402 => x"902a7483", +2403 => x"ffff0671", +2404 => x"597f772a", +2405 => x"585e5c41", +2406 => x"5f585c54", +2407 => x"83e63f80", +2408 => x"085483d0", +2409 => x"3f800880", +2410 => x"08792975", +2411 => x"902b7e90", +2412 => x"2a075656", +2413 => x"59737527", +2414 => x"99388008", +2415 => x"ff057b15", +2416 => x"55597a74", +2417 => x"268c3873", +2418 => x"75278738", +2419 => x"ff197b15", +2420 => x"55597652", +2421 => x"73753151", +2422 => x"83aa3f80", +2423 => x"08558394", +2424 => x"3f800880", +2425 => x"0879297d", +2426 => x"83ffff06", +2427 => x"77902b07", +2428 => x"56595773", +2429 => x"78279938", +2430 => x"8008ff05", +2431 => x"7b155557", +2432 => x"7a74268c", +2433 => x"38737827", +2434 => x"8738ff17", +2435 => x"7b155557", +2436 => x"73783179", +2437 => x"902b7807", +2438 => x"7083ffff", +2439 => x"0671902a", +2440 => x"7983ffff", +2441 => x"067a902a", +2442 => x"73722973", +2443 => x"73297473", +2444 => x"29767429", +2445 => x"73902a05", +2446 => x"72055755", +2447 => x"435f5b58", +2448 => x"5a57595a", +2449 => x"747c2786", +2450 => x"38848080", +2451 => x"17577490", +2452 => x"2a177983", +2453 => x"ffff0676", +2454 => x"84808029", +2455 => x"05575776", +2456 => x"7a269a38", +2457 => x"767a3270", +2458 => x"30707207", +2459 => x"8025565a", +2460 => x"5b7c7627", +2461 => x"fafe3873", +2462 => x"802efaf8", +2463 => x"38ff1858", +2464 => x"805bfaf2", +2465 => x"39ff7653", +2466 => x"77549f3d", +2467 => x"e805525e", +2468 => x"d3c23f67", +2469 => x"69574c75", +2470 => x"4d698025", +2471 => x"f8f3387d", +2472 => x"096a6c5c", +2473 => x"537a549f", +2474 => x"3de80552", +2475 => x"5ed3a53f", +2476 => x"6769714c", +2477 => x"704d5856", +2478 => x"f8db39a0", +2479 => x"75317676", +2480 => x"2b7a772b", +2481 => x"7c732a07", +2482 => x"7c782b72", +2483 => x"902a7383", +2484 => x"ffff0671", +2485 => x"587e762a", +2486 => x"5742405d", +2487 => x"5d575881", +2488 => x"a33f8008", +2489 => x"57818d3f", +2490 => x"80088008", +2491 => x"7e297890", +2492 => x"2b7d902a", +2493 => x"07565659", +2494 => x"73752799", +2495 => x"388008ff", +2496 => x"05761555", +2497 => x"59757426", +2498 => x"8c387375", +2499 => x"278738ff", +2500 => x"19761555", +2501 => x"597b5273", +2502 => x"75315180", +2503 => x"e73f8008", +2504 => x"5580d13f", +2505 => x"80088008", +2506 => x"7e297c83", +2507 => x"ffff0670", +2508 => x"78902b07", +2509 => x"51565858", +2510 => x"73772799", +2511 => x"388008ff", +2512 => x"05761555", +2513 => x"58757426", +2514 => x"8c387377", +2515 => x"278738ff", +2516 => x"18761555", +2517 => x"5878902b", +2518 => x"78077478", +2519 => x"31555bfa", +2520 => x"da39ff19", +2521 => x"76155559", +2522 => x"fb8639ff", +2523 => x"19761555", +2524 => x"59f8c039", +2525 => x"fe3d0d80", +2526 => x"53755274", +2527 => x"51d3c63f", +2528 => x"843d0d04", +2529 => x"fe3d0d81", +2530 => x"53755274", +2531 => x"51d3b63f", +2532 => x"843d0d04", +2533 => x"ff3d0d80", +2534 => x"edc00bfc", +2535 => x"05700852", +2536 => x"5270ff2e", +2537 => x"9138702d", +2538 => x"fc127008", +2539 => x"525270ff", +2540 => x"2e098106", +2541 => x"f138833d", +2542 => x"0d0404ff", +2543 => x"bbe73f04", +2544 => x"30313233", +2545 => x"34353637", +2546 => x"38390000", +2547 => x"44485259", +2548 => x"53544f4e", +2549 => x"45205052", +2550 => x"4f475241", +2551 => x"4d2c2053", +2552 => x"4f4d4520", +2553 => x"53545249", +2554 => x"4e470000", +2555 => x"44485259", +2556 => x"53544f4e", +2557 => x"45205052", +2558 => x"4f475241", +2559 => x"4d2c2031", +2560 => x"27535420", +2561 => x"53545249", +2562 => x"4e470000", +2563 => x"44687279", +2564 => x"73746f6e", +2565 => x"65204265", +2566 => x"6e63686d", +2567 => x"61726b2c", +2568 => x"20566572", +2569 => x"73696f6e", +2570 => x"20322e31", +2571 => x"20284c61", +2572 => x"6e677561", +2573 => x"67653a20", +2574 => x"43290a00", +2575 => x"50726f67", +2576 => x"72616d20", +2577 => x"636f6d70", +2578 => x"696c6564", +2579 => x"20776974", +2580 => x"68202772", +2581 => x"65676973", +2582 => x"74657227", +2583 => x"20617474", +2584 => x"72696275", +2585 => x"74650a00", +2586 => x"45786563", +2587 => x"7574696f", +2588 => x"6e207374", +2589 => x"61727473", +2590 => x"2c202564", +2591 => x"2072756e", +2592 => x"73207468", +2593 => x"726f7567", +2594 => x"68204468", +2595 => x"72797374", +2596 => x"6f6e650a", +2597 => x"00000000", +2598 => x"44485259", +2599 => x"53544f4e", +2600 => x"45205052", +2601 => x"4f475241", +2602 => x"4d2c2032", +2603 => x"274e4420", +2604 => x"53545249", +2605 => x"4e470000", +2606 => x"45786563", +2607 => x"7574696f", +2608 => x"6e20656e", +2609 => x"64730a00", +2610 => x"46696e61", +2611 => x"6c207661", +2612 => x"6c756573", +2613 => x"206f6620", +2614 => x"74686520", +2615 => x"76617269", +2616 => x"61626c65", +2617 => x"73207573", +2618 => x"65642069", +2619 => x"6e207468", +2620 => x"65206265", +2621 => x"6e63686d", +2622 => x"61726b3a", +2623 => x"0a000000", +2624 => x"496e745f", +2625 => x"476c6f62", +2626 => x"3a202020", +2627 => x"20202020", +2628 => x"20202020", +2629 => x"2025640a", +2630 => x"00000000", +2631 => x"20202020", +2632 => x"20202020", +2633 => x"73686f75", +2634 => x"6c642062", +2635 => x"653a2020", +2636 => x"2025640a", +2637 => x"00000000", +2638 => x"426f6f6c", +2639 => x"5f476c6f", +2640 => x"623a2020", +2641 => x"20202020", +2642 => x"20202020", +2643 => x"2025640a", +2644 => x"00000000", +2645 => x"43685f31", +2646 => x"5f476c6f", +2647 => x"623a2020", +2648 => x"20202020", +2649 => x"20202020", +2650 => x"2025630a", +2651 => x"00000000", +2652 => x"20202020", +2653 => x"20202020", +2654 => x"73686f75", +2655 => x"6c642062", +2656 => x"653a2020", +2657 => x"2025630a", +2658 => x"00000000", +2659 => x"43685f32", +2660 => x"5f476c6f", +2661 => x"623a2020", +2662 => x"20202020", +2663 => x"20202020", +2664 => x"2025630a", +2665 => x"00000000", +2666 => x"4172725f", +2667 => x"315f476c", +2668 => x"6f625b38", +2669 => x"5d3a2020", +2670 => x"20202020", +2671 => x"2025640a", +2672 => x"00000000", +2673 => x"4172725f", +2674 => x"325f476c", +2675 => x"6f625b38", +2676 => x"5d5b375d", +2677 => x"3a202020", +2678 => x"2025640a", +2679 => x"00000000", +2680 => x"20202020", +2681 => x"20202020", +2682 => x"73686f75", +2683 => x"6c642062", +2684 => x"653a2020", +2685 => x"204e756d", +2686 => x"6265725f", +2687 => x"4f665f52", +2688 => x"756e7320", +2689 => x"2b203130", +2690 => x"0a000000", +2691 => x"5074725f", +2692 => x"476c6f62", +2693 => x"2d3e0a00", +2694 => x"20205074", +2695 => x"725f436f", +2696 => x"6d703a20", +2697 => x"20202020", +2698 => x"20202020", +2699 => x"2025640a", +2700 => x"00000000", +2701 => x"20202020", +2702 => x"20202020", +2703 => x"73686f75", +2704 => x"6c642062", +2705 => x"653a2020", +2706 => x"2028696d", +2707 => x"706c656d", +2708 => x"656e7461", +2709 => x"74696f6e", +2710 => x"2d646570", +2711 => x"656e6465", +2712 => x"6e74290a", +2713 => x"00000000", +2714 => x"20204469", +2715 => x"7363723a", +2716 => x"20202020", +2717 => x"20202020", +2718 => x"20202020", +2719 => x"2025640a", +2720 => x"00000000", +2721 => x"2020456e", +2722 => x"756d5f43", +2723 => x"6f6d703a", +2724 => x"20202020", +2725 => x"20202020", +2726 => x"2025640a", +2727 => x"00000000", +2728 => x"2020496e", +2729 => x"745f436f", +2730 => x"6d703a20", +2731 => x"20202020", +2732 => x"20202020", +2733 => x"2025640a", +2734 => x"00000000", +2735 => x"20205374", +2736 => x"725f436f", +2737 => x"6d703a20", +2738 => x"20202020", +2739 => x"20202020", +2740 => x"2025730a", +2741 => x"00000000", +2742 => x"20202020", +2743 => x"20202020", +2744 => x"73686f75", +2745 => x"6c642062", +2746 => x"653a2020", +2747 => x"20444852", +2748 => x"5953544f", +2749 => x"4e452050", +2750 => x"524f4752", +2751 => x"414d2c20", +2752 => x"534f4d45", +2753 => x"20535452", +2754 => x"494e470a", +2755 => x"00000000", +2756 => x"4e657874", +2757 => x"5f507472", +2758 => x"5f476c6f", +2759 => x"622d3e0a", +2760 => x"00000000", +2761 => x"20202020", +2762 => x"20202020", +2763 => x"73686f75", +2764 => x"6c642062", +2765 => x"653a2020", +2766 => x"2028696d", +2767 => x"706c656d", +2768 => x"656e7461", +2769 => x"74696f6e", +2770 => x"2d646570", +2771 => x"656e6465", +2772 => x"6e74292c", +2773 => x"2073616d", +2774 => x"65206173", +2775 => x"2061626f", +2776 => x"76650a00", +2777 => x"496e745f", +2778 => x"315f4c6f", +2779 => x"633a2020", +2780 => x"20202020", +2781 => x"20202020", +2782 => x"2025640a", +2783 => x"00000000", +2784 => x"496e745f", +2785 => x"325f4c6f", +2786 => x"633a2020", +2787 => x"20202020", +2788 => x"20202020", +2789 => x"2025640a", +2790 => x"00000000", +2791 => x"496e745f", +2792 => x"335f4c6f", +2793 => x"633a2020", +2794 => x"20202020", +2795 => x"20202020", +2796 => x"2025640a", +2797 => x"00000000", +2798 => x"456e756d", +2799 => x"5f4c6f63", +2800 => x"3a202020", +2801 => x"20202020", +2802 => x"20202020", +2803 => x"2025640a", +2804 => x"00000000", +2805 => x"5374725f", +2806 => x"315f4c6f", +2807 => x"633a2020", +2808 => x"20202020", +2809 => x"20202020", +2810 => x"2025730a", +2811 => x"00000000", +2812 => x"20202020", +2813 => x"20202020", +2814 => x"73686f75", +2815 => x"6c642062", +2816 => x"653a2020", +2817 => x"20444852", +2818 => x"5953544f", +2819 => x"4e452050", +2820 => x"524f4752", +2821 => x"414d2c20", +2822 => x"31275354", +2823 => x"20535452", +2824 => x"494e470a", +2825 => x"00000000", +2826 => x"5374725f", +2827 => x"325f4c6f", +2828 => x"633a2020", +2829 => x"20202020", +2830 => x"20202020", +2831 => x"2025730a", +2832 => x"00000000", +2833 => x"20202020", +2834 => x"20202020", +2835 => x"73686f75", +2836 => x"6c642062", +2837 => x"653a2020", +2838 => x"20444852", +2839 => x"5953544f", +2840 => x"4e452050", +2841 => x"524f4752", +2842 => x"414d2c20", +2843 => x"32274e44", +2844 => x"20535452", +2845 => x"494e470a", +2846 => x"00000000", +2847 => x"55736572", +2848 => x"2074696d", +2849 => x"653a2025", +2850 => x"640a0000", +2851 => x"4d696372", +2852 => x"6f736563", +2853 => x"6f6e6473", +2854 => x"20666f72", +2855 => x"206f6e65", +2856 => x"2072756e", +2857 => x"20746872", +2858 => x"6f756768", +2859 => x"20446872", +2860 => x"7973746f", +2861 => x"6e653a20", +2862 => x"00000000", +2863 => x"2564200a", +2864 => x"00000000", +2865 => x"44687279", +2866 => x"73746f6e", +2867 => x"65732070", +2868 => x"65722053", +2869 => x"65636f6e", +2870 => x"643a2020", +2871 => x"20202020", +2872 => x"20202020", +2873 => x"20202020", +2874 => x"20202020", +2875 => x"20202020", +2876 => x"00000000", +2877 => x"56415820", +2878 => x"4d495053", +2879 => x"20726174", +2880 => x"696e6720", +2881 => x"2a203130", +2882 => x"3030203d", +2883 => x"20256420", +2884 => x"0a000000", +2885 => x"50726f67", +2886 => x"72616d20", +2887 => x"636f6d70", +2888 => x"696c6564", +2889 => x"20776974", +2890 => x"686f7574", +2891 => x"20277265", +2892 => x"67697374", +2893 => x"65722720", +2894 => x"61747472", +2895 => x"69627574", +2896 => x"650a0000", +2897 => x"4d656173", +2898 => x"75726564", +2899 => x"2074696d", +2900 => x"6520746f", +2901 => x"6f20736d", +2902 => x"616c6c20", +2903 => x"746f206f", +2904 => x"62746169", +2905 => x"6e206d65", +2906 => x"616e696e", +2907 => x"6766756c", +2908 => x"20726573", +2909 => x"756c7473", +2910 => x"0a000000", +2911 => x"506c6561", +2912 => x"73652069", +2913 => x"6e637265", +2914 => x"61736520", +2915 => x"6e756d62", +2916 => x"6572206f", +2917 => x"66207275", +2918 => x"6e730a00", +2919 => x"44485259", +2920 => x"53544f4e", +2921 => x"45205052", +2922 => x"4f475241", +2923 => x"4d2c2033", +2924 => x"27524420", +2925 => x"53545249", +2926 => x"4e470000", +2927 => x"43000000", +2928 => x"64756d6d", +2929 => x"792e6578", +2930 => x"65000000", +2931 => x"00010202", +2932 => x"03030303", +2933 => x"04040404", +2934 => x"04040404", +2935 => x"05050505", +2936 => x"05050505", +2937 => x"05050505", +2938 => x"05050505", +2939 => x"06060606", +2940 => x"06060606", +2941 => x"06060606", +2942 => x"06060606", +2943 => x"06060606", +2944 => x"06060606", +2945 => x"06060606", +2946 => x"06060606", +2947 => x"07070707", +2948 => x"07070707", +2949 => x"07070707", +2950 => x"07070707", +2951 => x"07070707", +2952 => x"07070707", +2953 => x"07070707", +2954 => x"07070707", +2955 => x"07070707", +2956 => x"07070707", +2957 => x"07070707", +2958 => x"07070707", +2959 => x"07070707", +2960 => x"07070707", +2961 => x"07070707", +2962 => x"07070707", +2963 => x"08080808", +2964 => x"08080808", +2965 => x"08080808", +2966 => x"08080808", +2967 => x"08080808", +2968 => x"08080808", +2969 => x"08080808", +2970 => x"08080808", +2971 => x"08080808", +2972 => x"08080808", +2973 => x"08080808", +2974 => x"08080808", +2975 => x"08080808", +2976 => x"08080808", +2977 => x"08080808", +2978 => x"08080808", +2979 => x"08080808", +2980 => x"08080808", +2981 => x"08080808", +2982 => x"08080808", +2983 => x"08080808", +2984 => x"08080808", +2985 => x"08080808", +2986 => x"08080808", +2987 => x"08080808", +2988 => x"08080808", +2989 => x"08080808", +2990 => x"08080808", +2991 => x"08080808", +2992 => x"08080808", +2993 => x"08080808", +2994 => x"08080808", +2995 => x"00ffffff", +2996 => x"ff00ffff", +2997 => x"ffff00ff", +2998 => x"ffffff00", +2999 => x"00000000", +3000 => x"00000000", +3001 => x"00000000", +3002 => x"000036c8", +3003 => x"000927c0", +3004 => x"00000000", +3005 => x"00000000", +3006 => x"00000000", +3007 => x"00000000", +3008 => x"00000000", +3009 => x"00000000", +3010 => x"00000000", +3011 => x"00000000", +3012 => x"00000000", +3013 => x"00000000", +3014 => x"00000000", +3015 => x"00000000", +3016 => x"00000000", +3017 => x"ffffffff", +3018 => x"00000000", +3019 => x"00020000", +3020 => x"00000000", +3021 => x"00000000", +3022 => x"00002f30", +3023 => x"00002f30", +3024 => x"00002f38", +3025 => x"00002f38", +3026 => x"00002f40", +3027 => x"00002f40", +3028 => x"00002f48", +3029 => x"00002f48", +3030 => x"00002f50", +3031 => x"00002f50", +3032 => x"00002f58", +3033 => x"00002f58", +3034 => x"00002f60", +3035 => x"00002f60", +3036 => x"00002f68", +3037 => x"00002f68", +3038 => x"00002f70", +3039 => x"00002f70", +3040 => x"00002f78", +3041 => x"00002f78", +3042 => x"00002f80", +3043 => x"00002f80", +3044 => x"00002f88", +3045 => x"00002f88", +3046 => x"00002f90", +3047 => x"00002f90", +3048 => x"00002f98", +3049 => x"00002f98", +3050 => x"00002fa0", +3051 => x"00002fa0", +3052 => x"00002fa8", +3053 => x"00002fa8", +3054 => x"00002fb0", +3055 => x"00002fb0", +3056 => x"00002fb8", +3057 => x"00002fb8", +3058 => x"00002fc0", +3059 => x"00002fc0", +3060 => x"00002fc8", +3061 => x"00002fc8", +3062 => x"00002fd0", +3063 => x"00002fd0", +3064 => x"00002fd8", +3065 => x"00002fd8", +3066 => x"00002fe0", +3067 => x"00002fe0", +3068 => x"00002fe8", +3069 => x"00002fe8", +3070 => x"00002ff0", +3071 => x"00002ff0", +3072 => x"00002ff8", +3073 => x"00002ff8", +3074 => x"00003000", +3075 => x"00003000", +3076 => x"00003008", +3077 => x"00003008", +3078 => x"00003010", +3079 => x"00003010", +3080 => x"00003018", +3081 => x"00003018", +3082 => x"00003020", +3083 => x"00003020", +3084 => x"00003028", +3085 => x"00003028", +3086 => x"00003030", +3087 => x"00003030", +3088 => x"00003038", +3089 => x"00003038", +3090 => x"00003040", +3091 => x"00003040", +3092 => x"00003048", +3093 => x"00003048", +3094 => x"00003050", +3095 => x"00003050", +3096 => x"00003058", +3097 => x"00003058", +3098 => x"00003060", +3099 => x"00003060", +3100 => x"00003068", +3101 => x"00003068", +3102 => x"00003070", +3103 => x"00003070", +3104 => x"00003078", +3105 => x"00003078", +3106 => x"00003080", +3107 => x"00003080", +3108 => x"00003088", +3109 => x"00003088", +3110 => x"00003090", +3111 => x"00003090", +3112 => x"00003098", +3113 => x"00003098", +3114 => x"000030a0", +3115 => x"000030a0", +3116 => x"000030a8", +3117 => x"000030a8", +3118 => x"000030b0", +3119 => x"000030b0", +3120 => x"000030b8", +3121 => x"000030b8", +3122 => x"000030c0", +3123 => x"000030c0", +3124 => x"000030c8", +3125 => x"000030c8", +3126 => x"000030d0", +3127 => x"000030d0", +3128 => x"000030d8", +3129 => x"000030d8", +3130 => x"000030e0", +3131 => x"000030e0", +3132 => x"000030e8", +3133 => x"000030e8", +3134 => x"000030f0", +3135 => x"000030f0", +3136 => x"000030f8", +3137 => x"000030f8", +3138 => x"00003100", +3139 => x"00003100", +3140 => x"00003108", +3141 => x"00003108", +3142 => x"00003110", +3143 => x"00003110", +3144 => x"00003118", +3145 => x"00003118", +3146 => x"00003120", +3147 => x"00003120", +3148 => x"00003128", +3149 => x"00003128", +3150 => x"00003130", +3151 => x"00003130", +3152 => x"00003138", +3153 => x"00003138", +3154 => x"00003140", +3155 => x"00003140", +3156 => x"00003148", +3157 => x"00003148", +3158 => x"00003150", +3159 => x"00003150", +3160 => x"00003158", +3161 => x"00003158", +3162 => x"00003160", +3163 => x"00003160", +3164 => x"00003168", +3165 => x"00003168", +3166 => x"00003170", +3167 => x"00003170", +3168 => x"00003178", +3169 => x"00003178", +3170 => x"00003180", +3171 => x"00003180", +3172 => x"00003188", +3173 => x"00003188", +3174 => x"00003190", +3175 => x"00003190", +3176 => x"00003198", +3177 => x"00003198", +3178 => x"000031a0", +3179 => x"000031a0", +3180 => x"000031a8", +3181 => x"000031a8", +3182 => x"000031b0", +3183 => x"000031b0", +3184 => x"000031b8", +3185 => x"000031b8", +3186 => x"000031c0", +3187 => x"000031c0", +3188 => x"000031c8", +3189 => x"000031c8", +3190 => x"000031d0", +3191 => x"000031d0", +3192 => x"000031d8", +3193 => x"000031d8", +3194 => x"000031e0", +3195 => x"000031e0", +3196 => x"000031e8", +3197 => x"000031e8", +3198 => x"000031f0", +3199 => x"000031f0", +3200 => x"000031f8", +3201 => x"000031f8", +3202 => x"00003200", +3203 => x"00003200", +3204 => x"00003208", +3205 => x"00003208", +3206 => x"00003210", +3207 => x"00003210", +3208 => x"00003218", +3209 => x"00003218", +3210 => x"00003220", +3211 => x"00003220", +3212 => x"00003228", +3213 => x"00003228", +3214 => x"00003230", +3215 => x"00003230", +3216 => x"00003238", +3217 => x"00003238", +3218 => x"00003240", +3219 => x"00003240", +3220 => x"00003248", +3221 => x"00003248", +3222 => x"00003250", +3223 => x"00003250", +3224 => x"00003258", +3225 => x"00003258", +3226 => x"00003260", +3227 => x"00003260", +3228 => x"00003268", +3229 => x"00003268", +3230 => x"00003270", +3231 => x"00003270", +3232 => x"00003278", +3233 => x"00003278", +3234 => x"00003280", +3235 => x"00003280", +3236 => x"00003288", +3237 => x"00003288", +3238 => x"00003290", +3239 => x"00003290", +3240 => x"00003298", +3241 => x"00003298", +3242 => x"000032a0", +3243 => x"000032a0", +3244 => x"000032a8", +3245 => x"000032a8", +3246 => x"000032b0", +3247 => x"000032b0", +3248 => x"000032b8", +3249 => x"000032b8", +3250 => x"000032c0", +3251 => x"000032c0", +3252 => x"000032c8", +3253 => x"000032c8", +3254 => x"000032d0", +3255 => x"000032d0", +3256 => x"000032d8", +3257 => x"000032d8", +3258 => x"000032e0", +3259 => x"000032e0", +3260 => x"000032e8", +3261 => x"000032e8", +3262 => x"000032f0", +3263 => x"000032f0", +3264 => x"000032f8", +3265 => x"000032f8", +3266 => x"00003300", +3267 => x"00003300", +3268 => x"00003308", +3269 => x"00003308", +3270 => x"00003310", +3271 => x"00003310", +3272 => x"00003318", +3273 => x"00003318", +3274 => x"00003320", +3275 => x"00003320", +3276 => x"00003328", +3277 => x"00003328", +3278 => x"0000333c", +3279 => x"00000000", +3280 => x"000035a4", +3281 => x"00003600", +3282 => x"0000365c", +3283 => x"00000000", +3284 => x"00000000", +3285 => x"00000000", +3286 => x"00000000", +3287 => x"00000000", +3288 => x"00000000", +3289 => x"00000000", +3290 => x"00000000", +3291 => x"00000000", +3292 => x"00002dbc", +3293 => x"00000000", +3294 => x"00000000", +3295 => x"00000000", +3296 => x"00000000", +3297 => x"00000000", +3298 => x"00000000", +3299 => x"00000000", +3300 => x"00000000", +3301 => x"00000000", +3302 => x"00000000", +3303 => x"00000000", +3304 => x"00000000", +3305 => x"00000000", +3306 => x"00000000", +3307 => x"00000000", +3308 => x"00000000", +3309 => x"00000000", +3310 => x"00000000", +3311 => x"00000000", +3312 => x"00000000", +3313 => x"00000000", +3314 => x"00000000", +3315 => x"00000000", +3316 => x"00000000", +3317 => x"00000000", +3318 => x"00000000", +3319 => x"00000000", +3320 => x"00000000", +3321 => x"00000001", +3322 => x"330eabcd", +3323 => x"1234e66d", +3324 => x"deec0005", +3325 => x"000b0000", +3326 => x"00000000", +3327 => x"00000000", +3328 => x"00000000", +3329 => x"00000000", +3330 => x"00000000", +3331 => x"00000000", +3332 => x"00000000", +3333 => x"00000000", +3334 => x"00000000", +3335 => x"00000000", +3336 => x"00000000", +3337 => x"00000000", +3338 => x"00000000", +3339 => x"00000000", +3340 => x"00000000", +3341 => x"00000000", +3342 => x"00000000", +3343 => x"00000000", +3344 => x"00000000", +3345 => x"00000000", +3346 => x"00000000", +3347 => x"00000000", +3348 => x"00000000", +3349 => x"00000000", +3350 => x"00000000", +3351 => x"00000000", +3352 => x"00000000", +3353 => x"00000000", +3354 => x"00000000", +3355 => x"00000000", +3356 => x"00000000", +3357 => x"00000000", +3358 => x"00000000", +3359 => x"00000000", +3360 => x"00000000", +3361 => x"00000000", +3362 => x"00000000", +3363 => x"00000000", +3364 => x"00000000", +3365 => x"00000000", +3366 => x"00000000", +3367 => x"00000000", +3368 => x"00000000", +3369 => x"00000000", +3370 => x"00000000", +3371 => x"00000000", +3372 => x"00000000", +3373 => x"00000000", +3374 => x"00000000", +3375 => x"00000000", +3376 => x"00000000", +3377 => x"00000000", +3378 => x"00000000", +3379 => x"00000000", +3380 => x"00000000", +3381 => x"00000000", +3382 => x"00000000", +3383 => x"00000000", +3384 => x"00000000", +3385 => x"00000000", +3386 => x"00000000", +3387 => x"00000000", +3388 => x"00000000", +3389 => x"00000000", +3390 => x"00000000", +3391 => x"00000000", +3392 => x"00000000", +3393 => x"00000000", +3394 => x"00000000", +3395 => x"00000000", +3396 => x"00000000", +3397 => x"00000000", +3398 => x"00000000", +3399 => x"00000000", +3400 => x"00000000", +3401 => x"00000000", +3402 => x"00000000", +3403 => x"00000000", +3404 => x"00000000", +3405 => x"00000000", +3406 => x"00000000", +3407 => x"00000000", +3408 => x"00000000", +3409 => x"00000000", +3410 => x"00000000", +3411 => x"00000000", +3412 => x"00000000", +3413 => x"00000000", +3414 => x"00000000", +3415 => x"00000000", +3416 => x"00000000", +3417 => x"00000000", +3418 => x"00000000", +3419 => x"00000000", +3420 => x"00000000", +3421 => x"00000000", +3422 => x"00000000", +3423 => x"00000000", +3424 => x"00000000", +3425 => x"00000000", +3426 => x"00000000", +3427 => x"00000000", +3428 => x"00000000", +3429 => x"00000000", +3430 => x"00000000", +3431 => x"00000000", +3432 => x"00000000", +3433 => x"00000000", +3434 => x"00000000", +3435 => x"00000000", +3436 => x"00000000", +3437 => x"00000000", +3438 => x"00000000", +3439 => x"00000000", +3440 => x"00000000", +3441 => x"00000000", +3442 => x"00000000", +3443 => x"00000000", +3444 => x"00000000", +3445 => x"00000000", +3446 => x"00000000", +3447 => x"00000000", +3448 => x"00000000", +3449 => x"00000000", +3450 => x"00000000", +3451 => x"00000000", +3452 => x"00000000", +3453 => x"00000000", +3454 => x"00000000", +3455 => x"00000000", +3456 => x"00000000", +3457 => x"00000000", +3458 => x"00000000", +3459 => x"00000000", +3460 => x"00000000", +3461 => x"00000000", +3462 => x"00000000", +3463 => x"00000000", +3464 => x"00000000", +3465 => x"00000000", +3466 => x"00000000", +3467 => x"00000000", +3468 => x"00000000", +3469 => x"00000000", +3470 => x"00000000", +3471 => x"00000000", +3472 => x"00000000", +3473 => x"00000000", +3474 => x"00000000", +3475 => x"00000000", +3476 => x"00000000", +3477 => x"00000000", +3478 => x"00000000", +3479 => x"00000000", +3480 => x"00000000", +3481 => x"00000000", +3482 => x"00000000", +3483 => x"00000000", +3484 => x"00000000", +3485 => x"00000000", +3486 => x"00000000", +3487 => x"00000000", +3488 => x"00000000", +3489 => x"00000000", +3490 => x"00000000", +3491 => x"00000000", +3492 => x"00000000", +3493 => x"00000000", +3494 => x"00000000", +3495 => x"00000000", +3496 => x"00000000", +3497 => x"00000000", +3498 => x"00000000", +3499 => x"00000000", +3500 => x"00000000", +3501 => x"00000000", +3502 => x"00002dc0", +3503 => x"ffffffff", +3504 => x"00000000", +3505 => x"ffffffff", +3506 => x"00000000", diff --git a/zpu/hdl/zpu4/test/hello/build.sh b/zpu/hdl/zpu4/test/hello/build.sh new file mode 100644 index 0000000..0d81138 --- /dev/null +++ b/zpu/hdl/zpu4/test/hello/build.sh @@ -0,0 +1,3 @@ +zpu-elf-gcc -O3 -abel `pwd`/hello.c -o hello.elf -Wl,--relax -Wl,--gc-sections -g +zpu-elf-objdump --disassemble-all >hello.dis hello.elf +zpu-elf-objcopy -O binary hello.elf hello.bin diff --git a/zpu/hdl/zpu4/test/hello/hello.bin b/zpu/hdl/zpu4/test/hello/hello.bin new file mode 100644 index 0000000..fe17308 Binary files /dev/null and b/zpu/hdl/zpu4/test/hello/hello.bin differ diff --git a/zpu/hdl/zpu4/test/hello/hello.c b/zpu/hdl/zpu4/test/hello/hello.c new file mode 100644 index 0000000..ea3dbb8 --- /dev/null +++ b/zpu/hdl/zpu4/test/hello/hello.c @@ -0,0 +1,51 @@ +/* + +zpu-elf-gcc -abel `pwd`/hello.c -o hello.elf -Wl,--relax -Wl,--gc-sections -g +zpu-elf-objdump --disassemble-all >hello.dis hello.elf +zpu-elf-objcopy -O binary hello.elf hello.bin + + * */ +#include + +int j; +int k; + +int main(int argc, char **argv) +{ + int i; + for (i=0; i< 10; i++) + { + puts("Hello world 1\n"); + puts("Hello world 2\n"); + j=-4; + if ((j>>1)!=-2) + { + abort(); + } + + k=10; + if (k*j!=-40) + { + abort(); + } + + j=10; + k=10000000; + if (k*j!=100000000) + { + abort(); + } + + j=0x80000000; + k=0xffffffff; + if (j>k) + { + abort(); + } + } + if (i!=10) + { + abort(); + } + +} diff --git a/zpu/hdl/zpu4/test/hello/hello.elf b/zpu/hdl/zpu4/test/hello/hello.elf new file mode 100644 index 0000000..999b9a3 Binary files /dev/null and b/zpu/hdl/zpu4/test/hello/hello.elf differ diff --git a/zpu/hdl/zpu4/test/hello/hello.ram b/zpu/hdl/zpu4/test/hello/hello.ram new file mode 100644 index 0000000..f310151 --- /dev/null +++ b/zpu/hdl/zpu4/test/hello/hello.ram @@ -0,0 +1,3165 @@ +0 => x"0b0b0b0b", +1 => x"80700b0b", +2 => x"80d3900c", +3 => x"3a0b0b80", +4 => x"c8b20400", +5 => x"00000000", +6 => x"00000000", +7 => x"00000000", +8 => x"80088408", +9 => x"88080b0b", +10 => x"80c8fb2d", +11 => x"880c840c", +12 => x"800c0400", +13 => x"00000000", +14 => x"00000000", +15 => x"00000000", +16 => x"71fd0608", +17 => x"72830609", +18 => x"81058205", +19 => x"832b2a83", +20 => x"ffff0652", +21 => x"04000000", +22 => x"00000000", +23 => x"00000000", +24 => x"71fd0608", +25 => x"83ffff73", +26 => x"83060981", +27 => x"05820583", +28 => x"2b2b0906", +29 => x"7383ffff", +30 => x"0b0b0b0b", +31 => x"83a70400", +32 => x"72098105", +33 => x"72057373", +34 => x"09060906", +35 => x"73097306", +36 => x"070a8106", +37 => x"53510400", +38 => x"00000000", +39 => x"00000000", +40 => x"72722473", +41 => x"732e0753", +42 => x"51040000", +43 => x"00000000", +44 => x"00000000", +45 => x"00000000", +46 => x"00000000", +47 => x"00000000", +48 => x"71737109", +49 => x"71068106", +50 => x"30720a10", +51 => x"0a720a10", +52 => x"0a31050a", +53 => x"81065151", +54 => x"53510400", +55 => x"00000000", +56 => x"72722673", +57 => x"732e0753", +58 => x"51040000", +59 => x"00000000", +60 => x"00000000", +61 => x"00000000", +62 => x"00000000", +63 => x"00000000", +64 => x"00000000", +65 => x"00000000", +66 => x"00000000", +67 => x"00000000", +68 => x"00000000", +69 => x"00000000", +70 => x"00000000", +71 => x"00000000", +72 => x"0b0b0b88", +73 => x"c4040000", +74 => x"00000000", +75 => x"00000000", +76 => x"00000000", +77 => x"00000000", +78 => x"00000000", +79 => x"00000000", +80 => x"720a722b", +81 => x"0a535104", +82 => x"00000000", +83 => x"00000000", +84 => x"00000000", +85 => x"00000000", +86 => x"00000000", +87 => x"00000000", +88 => x"72729f06", +89 => x"0981050b", +90 => x"0b0b88a7", +91 => x"05040000", +92 => x"00000000", +93 => x"00000000", +94 => x"00000000", +95 => x"00000000", +96 => x"72722aff", +97 => x"739f062a", +98 => x"0974090a", +99 => x"8106ff05", +100 => x"06075351", +101 => x"04000000", +102 => x"00000000", +103 => x"00000000", +104 => x"71715351", +105 => x"020d0406", +106 => x"73830609", +107 => x"81058205", +108 => x"832b0b2b", +109 => x"0772fc06", +110 => x"0c515104", +111 => x"00000000", +112 => x"72098105", +113 => x"72050970", +114 => x"81050906", +115 => x"0a810653", +116 => x"51040000", +117 => x"00000000", +118 => x"00000000", +119 => x"00000000", +120 => x"72098105", +121 => x"72050970", +122 => x"81050906", +123 => x"0a098106", +124 => x"53510400", +125 => x"00000000", +126 => x"00000000", +127 => x"00000000", +128 => x"71098105", +129 => x"52040000", +130 => x"00000000", +131 => x"00000000", +132 => x"00000000", +133 => x"00000000", +134 => x"00000000", +135 => x"00000000", +136 => x"72720981", +137 => x"05055351", +138 => x"04000000", +139 => x"00000000", +140 => x"00000000", +141 => x"00000000", +142 => x"00000000", +143 => x"00000000", +144 => x"72097206", +145 => x"73730906", +146 => x"07535104", +147 => x"00000000", +148 => x"00000000", +149 => x"00000000", +150 => x"00000000", +151 => x"00000000", +152 => x"71fc0608", +153 => x"72830609", +154 => x"81058305", +155 => x"1010102a", +156 => x"81ff0652", +157 => x"04000000", +158 => x"00000000", +159 => x"00000000", +160 => x"71fc0608", +161 => x"0b0b80d2", +162 => x"fc738306", +163 => x"10100508", +164 => x"060b0b0b", +165 => x"88aa0400", +166 => x"00000000", +167 => x"00000000", +168 => x"80088408", +169 => x"88087575", +170 => x"0b0b0b8d", +171 => x"872d5050", +172 => x"80085688", +173 => x"0c840c80", +174 => x"0c510400", +175 => x"00000000", +176 => x"80088408", +177 => x"88087575", +178 => x"0b0b0b8d", +179 => x"cb2d5050", +180 => x"80085688", +181 => x"0c840c80", +182 => x"0c510400", +183 => x"00000000", +184 => x"72097081", +185 => x"0509060a", +186 => x"8106ff05", +187 => x"70547106", +188 => x"73097274", +189 => x"05ff0506", +190 => x"07515151", +191 => x"04000000", +192 => x"72097081", +193 => x"0509060a", +194 => x"098106ff", +195 => x"05705471", +196 => x"06730972", +197 => x"7405ff05", +198 => x"06075151", +199 => x"51040000", +200 => x"05ff0504", +201 => x"00000000", +202 => x"00000000", +203 => x"00000000", +204 => x"00000000", +205 => x"00000000", +206 => x"00000000", +207 => x"00000000", +208 => x"810b0b0b", +209 => x"80d38c0c", +210 => x"51040000", +211 => x"00000000", +212 => x"00000000", +213 => x"00000000", +214 => x"00000000", +215 => x"00000000", +216 => x"71810552", +217 => x"04000000", +218 => x"00000000", +219 => x"00000000", +220 => x"00000000", +221 => x"00000000", +222 => x"00000000", +223 => x"00000000", +224 => x"00000000", +225 => x"00000000", +226 => x"00000000", +227 => x"00000000", +228 => x"00000000", +229 => x"00000000", +230 => x"00000000", +231 => x"00000000", +232 => x"02840572", +233 => x"10100552", +234 => x"04000000", +235 => x"00000000", +236 => x"00000000", +237 => x"00000000", +238 => x"00000000", +239 => x"00000000", +240 => x"00000000", +241 => x"00000000", +242 => x"00000000", +243 => x"00000000", +244 => x"00000000", +245 => x"00000000", +246 => x"00000000", +247 => x"00000000", +248 => x"717105ff", +249 => x"05715351", +250 => x"020d0400", +251 => x"00000000", +252 => x"00000000", +253 => x"00000000", +254 => x"00000000", +255 => x"00000000", +256 => x"83d93f80", +257 => x"ca953f04", +258 => x"10101010", +259 => x"10101010", +260 => x"10101010", +261 => x"10101010", +262 => x"10101010", +263 => x"10101010", +264 => x"10101010", +265 => x"10101053", +266 => x"51047381", +267 => x"ff067383", +268 => x"06098105", +269 => x"83051010", +270 => x"102b0772", +271 => x"fc060c51", +272 => x"51043c04", +273 => x"72728072", +274 => x"8106ff05", +275 => x"09720605", +276 => x"71105272", +277 => x"0a100a53", +278 => x"72ed3851", +279 => x"51535104", +280 => x"ff3d0d0b", +281 => x"0b80e2f8", +282 => x"08528412", +283 => x"08708106", +284 => x"515170f6", +285 => x"38710881", +286 => x"ff06800c", +287 => x"833d0d04", +288 => x"ff3d0d0b", +289 => x"0b80e2f8", +290 => x"08528412", +291 => x"08700a10", +292 => x"0a708106", +293 => x"51515170", +294 => x"f1387372", +295 => x"0c833d0d", +296 => x"0480d38c", +297 => x"08802ea8", +298 => x"38838080", +299 => x"0b0b0b80", +300 => x"e2f80c82", +301 => x"a0800b0b", +302 => x"0b80e2fc", +303 => x"0c829080", +304 => x"0b80e38c", +305 => x"0c0b0b80", +306 => x"e3800b80", +307 => x"e3900c04", +308 => x"f8808080", +309 => x"a40b0b0b", +310 => x"80e2f80c", +311 => x"f8808082", +312 => x"800b0b0b", +313 => x"80e2fc0c", +314 => x"f8808084", +315 => x"800b80e3", +316 => x"8c0cf880", +317 => x"8080940b", +318 => x"80e3900c", +319 => x"f8808080", +320 => x"9c0b80e3", +321 => x"880cf880", +322 => x"8080a00b", +323 => x"80e3940c", +324 => x"04f23d0d", +325 => x"600b0b80", +326 => x"e2fc0856", +327 => x"5d82750c", +328 => x"8059805a", +329 => x"800b8f3d", +330 => x"71101017", +331 => x"70085957", +332 => x"5d5b8076", +333 => x"81ff067c", +334 => x"832b5658", +335 => x"5276537b", +336 => x"5181fa3f", +337 => x"7d7f7a72", +338 => x"077c7207", +339 => x"71716081", +340 => x"05415f5d", +341 => x"5b595755", +342 => x"7a8724bb", +343 => x"380b0b80", +344 => x"e2fc087b", +345 => x"10101170", +346 => x"08585155", +347 => x"807681ff", +348 => x"067c832b", +349 => x"56585276", +350 => x"537b5181", +351 => x"c03f7d7f", +352 => x"7a72077c", +353 => x"72077171", +354 => x"60810541", +355 => x"5f5d5b59", +356 => x"5755877b", +357 => x"25c73876", +358 => x"7d0c7784", +359 => x"1e0c7c80", +360 => x"0c903d0d", +361 => x"04ff3d0d", +362 => x"80e38433", +363 => x"5170a738", +364 => x"80d39808", +365 => x"70085252", +366 => x"70802e94", +367 => x"38841280", +368 => x"d3980c70", +369 => x"2d80d398", +370 => x"08700852", +371 => x"5270ee38", +372 => x"810b80e3", +373 => x"8434833d", +374 => x"0d040480", +375 => x"3d0d0b0b", +376 => x"80e2f408", +377 => x"802e8e38", +378 => x"0b0b0b0b", +379 => x"800b802e", +380 => x"09810685", +381 => x"38823d0d", +382 => x"040b0b80", +383 => x"e2f4510b", +384 => x"0b0bf3fc", +385 => x"3f823d0d", +386 => x"0404fe3d", +387 => x"0d89530b", +388 => x"0b80d2c8", +389 => x"51838d3f", +390 => x"0b0b80d2", +391 => x"d8518384", +392 => x"3f810a0b", +393 => x"80e3980c", +394 => x"ff0b80e3", +395 => x"9c0cff13", +396 => x"53728025", +397 => x"da387280", +398 => x"0c843d0d", +399 => x"04f93d0d", +400 => x"797b7d7f", +401 => x"56545254", +402 => x"72802ea0", +403 => x"38705771", +404 => x"58a07331", +405 => x"52807225", +406 => x"a1387770", +407 => x"742b5770", +408 => x"732a7875", +409 => x"2b075651", +410 => x"74765351", +411 => x"70740c71", +412 => x"84150c73", +413 => x"800c893d", +414 => x"0d048056", +415 => x"7772302b", +416 => x"55747653", +417 => x"51e639fb", +418 => x"3d0d7779", +419 => x"55558056", +420 => x"757524ab", +421 => x"38807424", +422 => x"9d388053", +423 => x"73527451", +424 => x"80e13f80", +425 => x"08547580", +426 => x"2e853880", +427 => x"08305473", +428 => x"800c873d", +429 => x"0d047330", +430 => x"76813257", +431 => x"54dc3974", +432 => x"30558156", +433 => x"738025d2", +434 => x"38ec39fa", +435 => x"3d0d787a", +436 => x"57558057", +437 => x"767524a4", +438 => x"38759f2c", +439 => x"54815375", +440 => x"74327431", +441 => x"5274519b", +442 => x"3f800854", +443 => x"76802e85", +444 => x"38800830", +445 => x"5473800c", +446 => x"883d0d04", +447 => x"74305581", +448 => x"57d739fc", +449 => x"3d0d7678", +450 => x"53548153", +451 => x"80747326", +452 => x"52557280", +453 => x"2e983870", +454 => x"802eab38", +455 => x"807224a6", +456 => x"38711073", +457 => x"10757226", +458 => x"53545272", +459 => x"ea387351", +460 => x"78833874", +461 => x"5170800c", +462 => x"863d0d04", +463 => x"720a100a", +464 => x"720a100a", +465 => x"53537280", +466 => x"2ee43871", +467 => x"7426ed38", +468 => x"73723175", +469 => x"7407740a", +470 => x"100a740a", +471 => x"100a5555", +472 => x"5654e339", +473 => x"f73d0d7c", +474 => x"70525380", +475 => x"f93f7254", +476 => x"80085580", +477 => x"d2e85681", +478 => x"57800881", +479 => x"055a8b3d", +480 => x"e4115953", +481 => x"8259f413", +482 => x"527b8811", +483 => x"08525381", +484 => x"b03f8008", +485 => x"30708008", +486 => x"079f2c8a", +487 => x"07800c53", +488 => x"8b3d0d04", +489 => x"f63d0d7c", +490 => x"80d39c08", +491 => x"71535553", +492 => x"b53f7255", +493 => x"80085680", +494 => x"d2e85781", +495 => x"58800881", +496 => x"055b8c3d", +497 => x"e4115a53", +498 => x"825af413", +499 => x"52881408", +500 => x"5180ee3f", +501 => x"80083070", +502 => x"8008079f", +503 => x"2c8a0780", +504 => x"0c548c3d", +505 => x"0d04fd3d", +506 => x"0d757071", +507 => x"83065355", +508 => x"5270b438", +509 => x"71700870", +510 => x"09f7fbfd", +511 => x"ff1206f8", +512 => x"84828180", +513 => x"06545253", +514 => x"719b3884", +515 => x"13700870", +516 => x"09f7fbfd", +517 => x"ff1206f8", +518 => x"84828180", +519 => x"06545253", +520 => x"71802ee7", +521 => x"38725271", +522 => x"33537280", +523 => x"2e8a3881", +524 => x"12703354", +525 => x"5272f838", +526 => x"71743180", +527 => x"0c853d0d", +528 => x"04f23d0d", +529 => x"60628811", +530 => x"08705856", +531 => x"5f5a7380", +532 => x"2e818c38", +533 => x"8c1a2270", +534 => x"832a8132", +535 => x"81065658", +536 => x"74863890", +537 => x"1a089138", +538 => x"795190b7", +539 => x"3fff5580", +540 => x"0880ec38", +541 => x"8c1a2258", +542 => x"7d085580", +543 => x"7883ffff", +544 => x"06700a10", +545 => x"0a810641", +546 => x"5c577e77", +547 => x"2e80d738", +548 => x"76903874", +549 => x"08841608", +550 => x"88175758", +551 => x"5676802e", +552 => x"f2387654", +553 => x"88807727", +554 => x"84388880", +555 => x"54735375", +556 => x"529c1a08", +557 => x"51a41a08", +558 => x"58772d80", +559 => x"0b800825", +560 => x"82e03880", +561 => x"08167780", +562 => x"08317f88", +563 => x"05088008", +564 => x"31706188", +565 => x"050c5b58", +566 => x"5678ffb4", +567 => x"38805574", +568 => x"800c903d", +569 => x"0d047a81", +570 => x"32810677", +571 => x"40567580", +572 => x"2e81bd38", +573 => x"76903874", +574 => x"08841608", +575 => x"88175758", +576 => x"5976802e", +577 => x"f238881a", +578 => x"087883ff", +579 => x"ff067089", +580 => x"2a810656", +581 => x"59567380", +582 => x"2e82f838", +583 => x"7577278b", +584 => x"3877872a", +585 => x"81065c7b", +586 => x"82b53876", +587 => x"76278338", +588 => x"76567553", +589 => x"78527908", +590 => x"5185833f", +591 => x"881a0876", +592 => x"31881b0c", +593 => x"7908167a", +594 => x"0c765675", +595 => x"19777731", +596 => x"7f880508", +597 => x"78317061", +598 => x"88050c41", +599 => x"58597e80", +600 => x"2efefa38", +601 => x"8c1a2258", +602 => x"ff8a3978", +603 => x"79547c53", +604 => x"7b525684", +605 => x"c93f881a", +606 => x"08793188", +607 => x"1b0c7908", +608 => x"197a0c7c", +609 => x"76315d7c", +610 => x"8e387951", +611 => x"8ff23f80", +612 => x"08818f38", +613 => x"80085f75", +614 => x"1c777731", +615 => x"7f880508", +616 => x"78317061", +617 => x"88050c5d", +618 => x"585c7a80", +619 => x"2efeae38", +620 => x"76818338", +621 => x"74088416", +622 => x"08881757", +623 => x"585c7680", +624 => x"2ef23876", +625 => x"538a527b", +626 => x"5182d33f", +627 => x"80087c31", +628 => x"81055d80", +629 => x"08843881", +630 => x"175d815f", +631 => x"7c59767d", +632 => x"27833876", +633 => x"59941a08", +634 => x"881b0811", +635 => x"5758807a", +636 => x"085c5490", +637 => x"1a087b27", +638 => x"83388154", +639 => x"75792584", +640 => x"3873ba38", +641 => x"777924fe", +642 => x"e2387753", +643 => x"7b529c1a", +644 => x"0851a41a", +645 => x"0859782d", +646 => x"80085680", +647 => x"088024fe", +648 => x"e2388c1a", +649 => x"2280c007", +650 => x"5e7d8c1b", +651 => x"23ff5574", +652 => x"800c903d", +653 => x"0d047eff", +654 => x"a338ff87", +655 => x"3975537b", +656 => x"527a5182", +657 => x"f93f7908", +658 => x"167a0c79", +659 => x"518eb13f", +660 => x"8008cf38", +661 => x"7c76315d", +662 => x"7cfebc38", +663 => x"feac3990", +664 => x"1a087a08", +665 => x"71317811", +666 => x"70565a57", +667 => x"5280d39c", +668 => x"08518494", +669 => x"3f800880", +670 => x"2effa738", +671 => x"8008901b", +672 => x"0c800816", +673 => x"7a0c7794", +674 => x"1b0c7688", +675 => x"1b0c7656", +676 => x"fd993979", +677 => x"0858901a", +678 => x"08782783", +679 => x"38815475", +680 => x"77278438", +681 => x"73b33894", +682 => x"1a085473", +683 => x"772680d3", +684 => x"38735378", +685 => x"529c1a08", +686 => x"51a41a08", +687 => x"58772d80", +688 => x"08568008", +689 => x"8024fd83", +690 => x"388c1a22", +691 => x"80c0075e", +692 => x"7d8c1b23", +693 => x"ff55fed7", +694 => x"39755378", +695 => x"52775181", +696 => x"dd3f7908", +697 => x"167a0c79", +698 => x"518d953f", +699 => x"8008802e", +700 => x"fcd9388c", +701 => x"1a2280c0", +702 => x"075e7d8c", +703 => x"1b23ff55", +704 => x"fead3976", +705 => x"77547953", +706 => x"78525681", +707 => x"b13f881a", +708 => x"08773188", +709 => x"1b0c7908", +710 => x"177a0cfc", +711 => x"ae39fa3d", +712 => x"0d7a7902", +713 => x"8805a705", +714 => x"33555354", +715 => x"83742780", +716 => x"df387183", +717 => x"06517080", +718 => x"d7387171", +719 => x"57558351", +720 => x"75828029", +721 => x"13ff1252", +722 => x"56708025", +723 => x"f3388374", +724 => x"27bc3874", +725 => x"08763270", +726 => x"09f7fbfd", +727 => x"ff1206f8", +728 => x"84828180", +729 => x"06515170", +730 => x"802e9838", +731 => x"74518052", +732 => x"70335772", +733 => x"772eb938", +734 => x"81118113", +735 => x"53518372", +736 => x"27ee38fc", +737 => x"14841656", +738 => x"54738326", +739 => x"c6387452", +740 => x"ff145170", +741 => x"ff2e9738", +742 => x"71335472", +743 => x"742e9838", +744 => x"8112ff12", +745 => x"525270ff", +746 => x"2e098106", +747 => x"eb388051", +748 => x"70800c88", +749 => x"3d0d0471", +750 => x"800c883d", +751 => x"0d04fa3d", +752 => x"0d787a7c", +753 => x"72727259", +754 => x"57555856", +755 => x"57747727", +756 => x"b2387515", +757 => x"51767127", +758 => x"aa387076", +759 => x"18ff1853", +760 => x"535370ff", +761 => x"2e9638ff", +762 => x"12ff1454", +763 => x"52723372", +764 => x"34ff1151", +765 => x"70ff2e09", +766 => x"8106ec38", +767 => x"76800c88", +768 => x"3d0d048f", +769 => x"762780e6", +770 => x"38747707", +771 => x"83065170", +772 => x"80dc3876", +773 => x"75525370", +774 => x"70840552", +775 => x"08737084", +776 => x"05550c72", +777 => x"71708405", +778 => x"53087170", +779 => x"8405530c", +780 => x"71708405", +781 => x"53087170", +782 => x"8405530c", +783 => x"71708405", +784 => x"53087170", +785 => x"8405530c", +786 => x"f0155553", +787 => x"738f26c7", +788 => x"38837427", +789 => x"95387070", +790 => x"84055208", +791 => x"73708405", +792 => x"550cfc14", +793 => x"54738326", +794 => x"ed387271", +795 => x"5452ff14", +796 => x"5170ff2e", +797 => x"ff863872", +798 => x"70810554", +799 => x"33727081", +800 => x"055434ff", +801 => x"1151ea39", +802 => x"ef3d0d63", +803 => x"6567405d", +804 => x"427b802e", +805 => x"85823861", +806 => x"51a9eb3f", +807 => x"f81c7084", +808 => x"120870fc", +809 => x"0670628b", +810 => x"0570f806", +811 => x"4159455c", +812 => x"5f415796", +813 => x"742782c5", +814 => x"38807b24", +815 => x"7e7c2607", +816 => x"58805477", +817 => x"742e0981", +818 => x"0682ab38", +819 => x"787b2581", +820 => x"fe387817", +821 => x"80dad80b", +822 => x"8805085b", +823 => x"5679762e", +824 => x"84c53884", +825 => x"160870fe", +826 => x"06178411", +827 => x"08810641", +828 => x"55557e82", +829 => x"8d3874fc", +830 => x"06587976", +831 => x"2e84e338", +832 => x"78185f7e", +833 => x"7b2581ff", +834 => x"387c8106", +835 => x"547382c1", +836 => x"38767708", +837 => x"31841108", +838 => x"fc065657", +839 => x"75802e91", +840 => x"3879762e", +841 => x"84f03874", +842 => x"18195877", +843 => x"7b258491", +844 => x"3876802e", +845 => x"829b3878", +846 => x"15567a76", +847 => x"24829238", +848 => x"8c170888", +849 => x"1808718c", +850 => x"120c8812", +851 => x"0c5e7559", +852 => x"881761fc", +853 => x"055b5679", +854 => x"a42685ff", +855 => x"387b7659", +856 => x"55937a27", +857 => x"80c9387b", +858 => x"7084055d", +859 => x"087c5676", +860 => x"0c747084", +861 => x"0556088c", +862 => x"180c9017", +863 => x"589b7a27", +864 => x"ae387470", +865 => x"84055608", +866 => x"780c7470", +867 => x"84055608", +868 => x"94180c98", +869 => x"1758a37a", +870 => x"27953874", +871 => x"70840556", +872 => x"08780c74", +873 => x"70840556", +874 => x"089c180c", +875 => x"a0175874", +876 => x"70840556", +877 => x"08755f78", +878 => x"7084055a", +879 => x"0c777e70", +880 => x"84054008", +881 => x"71708405", +882 => x"530c7e08", +883 => x"710c5d78", +884 => x"7b315675", +885 => x"8f2680c9", +886 => x"38841708", +887 => x"81067907", +888 => x"84180c78", +889 => x"17841108", +890 => x"81078412", +891 => x"0c5b6151", +892 => x"a7953f88", +893 => x"17547380", +894 => x"0c933d0d", +895 => x"04905bfd", +896 => x"b8397756", +897 => x"fe83398c", +898 => x"16088817", +899 => x"08718c12", +900 => x"0c88120c", +901 => x"587e707c", +902 => x"3157598f", +903 => x"7627ffb9", +904 => x"387a1784", +905 => x"18088106", +906 => x"7c078419", +907 => x"0c768107", +908 => x"84120c76", +909 => x"11841108", +910 => x"81078412", +911 => x"0c5b8805", +912 => x"5261518f", +913 => x"de3f6151", +914 => x"a6bd3f88", +915 => x"1754ffa6", +916 => x"397d5261", +917 => x"5197db3f", +918 => x"80085a80", +919 => x"08802e81", +920 => x"ab388008", +921 => x"f8056084", +922 => x"0508fe06", +923 => x"61055855", +924 => x"74772e83", +925 => x"f238fc19", +926 => x"5877a426", +927 => x"81b0387b", +928 => x"80085657", +929 => x"93782780", +930 => x"dc387b70", +931 => x"70840552", +932 => x"08800870", +933 => x"8405800c", +934 => x"0c800871", +935 => x"70840553", +936 => x"085d567b", +937 => x"76708405", +938 => x"580c579b", +939 => x"7827b638", +940 => x"76708405", +941 => x"58087570", +942 => x"8405570c", +943 => x"76708405", +944 => x"58087570", +945 => x"8405570c", +946 => x"a3782799", +947 => x"38767084", +948 => x"05580875", +949 => x"70840557", +950 => x"0c767084", +951 => x"05580875", +952 => x"70840557", +953 => x"0c767084", +954 => x"05580877", +955 => x"5e757084", +956 => x"05570c74", +957 => x"7d708405", +958 => x"5f087170", +959 => x"8405530c", +960 => x"7d08710c", +961 => x"5f7b5261", +962 => x"518e983f", +963 => x"6151a4f7", +964 => x"3f79800c", +965 => x"933d0d04", +966 => x"7d526151", +967 => x"96943f80", +968 => x"08800c93", +969 => x"3d0d0484", +970 => x"160855fb", +971 => x"c9397753", +972 => x"7b528008", +973 => x"51a2a93f", +974 => x"7b526151", +975 => x"8de53fcc", +976 => x"398c1608", +977 => x"88170871", +978 => x"8c120c88", +979 => x"120c5d8c", +980 => x"17088818", +981 => x"08718c12", +982 => x"0c88120c", +983 => x"597759fb", +984 => x"ef397818", +985 => x"901c4055", +986 => x"7e7524fb", +987 => x"9c387a17", +988 => x"7080dad8", +989 => x"0b88050c", +990 => x"757c3181", +991 => x"0784120c", +992 => x"56841708", +993 => x"81067b07", +994 => x"84180c61", +995 => x"51a3f83f", +996 => x"881754fc", +997 => x"e1397418", +998 => x"19901c5e", +999 => x"5a7c7a24", +1000 => x"fb8f388c", +1001 => x"17088818", +1002 => x"08718c12", +1003 => x"0c88120c", +1004 => x"5e881761", +1005 => x"fc055759", +1006 => x"75a42681", +1007 => x"b6387b79", +1008 => x"59559376", +1009 => x"2780c938", +1010 => x"7b708405", +1011 => x"5d087c56", +1012 => x"790c7470", +1013 => x"84055608", +1014 => x"8c180c90", +1015 => x"17589b76", +1016 => x"27ae3874", +1017 => x"70840556", +1018 => x"08780c74", +1019 => x"70840556", +1020 => x"0894180c", +1021 => x"981758a3", +1022 => x"76279538", +1023 => x"74708405", +1024 => x"5608780c", +1025 => x"74708405", +1026 => x"56089c18", +1027 => x"0ca01758", +1028 => x"74708405", +1029 => x"56087541", +1030 => x"78708405", +1031 => x"5a0c7760", +1032 => x"70840542", +1033 => x"08717084", +1034 => x"05530c60", +1035 => x"08710c5e", +1036 => x"7a177080", +1037 => x"dad80b88", +1038 => x"050c7a7c", +1039 => x"31810784", +1040 => x"120c5884", +1041 => x"17088106", +1042 => x"7b078418", +1043 => x"0c6151a2", +1044 => x"b63f7854", +1045 => x"73800c93", +1046 => x"3d0d0479", +1047 => x"537b5275", +1048 => x"519ffd3f", +1049 => x"fae93984", +1050 => x"1508fc06", +1051 => x"19605859", +1052 => x"fadd3975", +1053 => x"537b5278", +1054 => x"519fe53f", +1055 => x"7a177080", +1056 => x"dad80b88", +1057 => x"050c7a7c", +1058 => x"31810784", +1059 => x"120c5884", +1060 => x"17088106", +1061 => x"7b078418", +1062 => x"0c6151a1", +1063 => x"ea3f7854", +1064 => x"ffb239fa", +1065 => x"3d0d7880", +1066 => x"d39c0854", +1067 => x"55b81308", +1068 => x"802e81af", +1069 => x"388c1522", +1070 => x"7083ffff", +1071 => x"0670832a", +1072 => x"81328106", +1073 => x"55555672", +1074 => x"802e80da", +1075 => x"3873842a", +1076 => x"81328106", +1077 => x"57ff5376", +1078 => x"80f23873", +1079 => x"822a8106", +1080 => x"5473802e", +1081 => x"b938b015", +1082 => x"08547380", +1083 => x"2e9c3880", +1084 => x"c0155373", +1085 => x"732e8f38", +1086 => x"735280d3", +1087 => x"9c08518a", +1088 => x"a23f8c15", +1089 => x"225676b0", +1090 => x"160c75db", +1091 => x"0657768c", +1092 => x"1623800b", +1093 => x"84160c90", +1094 => x"1508750c", +1095 => x"76567588", +1096 => x"0754738c", +1097 => x"16239015", +1098 => x"08802ebf", +1099 => x"388c1522", +1100 => x"70810655", +1101 => x"53739c38", +1102 => x"720a100a", +1103 => x"81065675", +1104 => x"85389415", +1105 => x"08547388", +1106 => x"160c8053", +1107 => x"72800c88", +1108 => x"3d0d0480", +1109 => x"0b88160c", +1110 => x"94150830", +1111 => x"98160c80", +1112 => x"53ea3972", +1113 => x"5182a63f", +1114 => x"fecb3974", +1115 => x"518fc03f", +1116 => x"8c152270", +1117 => x"81065553", +1118 => x"73802eff", +1119 => x"bb38d439", +1120 => x"f83d0d7a", +1121 => x"5776802e", +1122 => x"81973880", +1123 => x"d39c0854", +1124 => x"b8140880", +1125 => x"2e80eb38", +1126 => x"8c172270", +1127 => x"902b7090", +1128 => x"2c70832a", +1129 => x"81328106", +1130 => x"5b5b5755", +1131 => x"7780cb38", +1132 => x"90170856", +1133 => x"75802e80", +1134 => x"c1387608", +1135 => x"76317678", +1136 => x"0c798306", +1137 => x"55557385", +1138 => x"38941708", +1139 => x"58778818", +1140 => x"0c807525", +1141 => x"a5387453", +1142 => x"75529c17", +1143 => x"0851a417", +1144 => x"0854732d", +1145 => x"800b8008", +1146 => x"2580c938", +1147 => x"80081675", +1148 => x"80083156", +1149 => x"56748024", +1150 => x"dd38800b", +1151 => x"800c8a3d", +1152 => x"0d047351", +1153 => x"81873f8c", +1154 => x"17227090", +1155 => x"2b70902c", +1156 => x"70832a81", +1157 => x"3281065b", +1158 => x"5b575577", +1159 => x"dd38ff90", +1160 => x"39a38052", +1161 => x"80d39c08", +1162 => x"518cd43f", +1163 => x"8008800c", +1164 => x"8a3d0d04", +1165 => x"8c172280", +1166 => x"c0075877", +1167 => x"8c1823ff", +1168 => x"0b800c8a", +1169 => x"3d0d04fa", +1170 => x"3d0d7970", +1171 => x"80dc298c", +1172 => x"11547a53", +1173 => x"56578fda", +1174 => x"3f800880", +1175 => x"08555680", +1176 => x"08802ea2", +1177 => x"3880088c", +1178 => x"0554800b", +1179 => x"80080c76", +1180 => x"80088405", +1181 => x"0c738008", +1182 => x"88050c74", +1183 => x"53805273", +1184 => x"519cf93f", +1185 => x"75547380", +1186 => x"0c883d0d", +1187 => x"04fe3d0d", +1188 => x"74aacc0b", +1189 => x"bc120c53", +1190 => x"810bb814", +1191 => x"0c800b84", +1192 => x"dc140c83", +1193 => x"0b84e014", +1194 => x"0c84e813", +1195 => x"84e4140c", +1196 => x"84130851", +1197 => x"8070720c", +1198 => x"7084130c", +1199 => x"7088130c", +1200 => x"52840b8c", +1201 => x"1223718e", +1202 => x"12237190", +1203 => x"120c7194", +1204 => x"120c7198", +1205 => x"120c709c", +1206 => x"120c80c3", +1207 => x"bc0ba012", +1208 => x"0c80c488", +1209 => x"0ba4120c", +1210 => x"80c5840b", +1211 => x"a8120c80", +1212 => x"c5d50bac", +1213 => x"120c8813", +1214 => x"0872710c", +1215 => x"7284120c", +1216 => x"7288120c", +1217 => x"51890b8c", +1218 => x"1223810b", +1219 => x"8e122371", +1220 => x"90120c71", +1221 => x"94120c71", +1222 => x"98120c70", +1223 => x"9c120c80", +1224 => x"c3bc0ba0", +1225 => x"120c80c4", +1226 => x"880ba412", +1227 => x"0c80c584", +1228 => x"0ba8120c", +1229 => x"80c5d50b", +1230 => x"ac120c8c", +1231 => x"13087271", +1232 => x"0c728412", +1233 => x"0c728812", +1234 => x"0c518a0b", +1235 => x"8c122382", +1236 => x"0b8e1223", +1237 => x"7190120c", +1238 => x"7194120c", +1239 => x"7198120c", +1240 => x"709c120c", +1241 => x"80c3bc0b", +1242 => x"a0120c80", +1243 => x"c4880ba4", +1244 => x"120c80c5", +1245 => x"840ba812", +1246 => x"0c80c5d5", +1247 => x"0bac120c", +1248 => x"843d0d04", +1249 => x"f83d0d7a", +1250 => x"80d39c08", +1251 => x"b8110857", +1252 => x"57587481", +1253 => x"ec38aacc", +1254 => x"0bbc170c", +1255 => x"810bb817", +1256 => x"0c7484dc", +1257 => x"170c830b", +1258 => x"84e0170c", +1259 => x"84e81684", +1260 => x"e4170c84", +1261 => x"16087571", +1262 => x"0c758412", +1263 => x"0c758812", +1264 => x"0c59840b", +1265 => x"8c1a2374", +1266 => x"8e1a2374", +1267 => x"901a0c74", +1268 => x"941a0c74", +1269 => x"981a0c78", +1270 => x"9c1a0c80", +1271 => x"c3bc0ba0", +1272 => x"1a0c80c4", +1273 => x"880ba41a", +1274 => x"0c80c584", +1275 => x"0ba81a0c", +1276 => x"80c5d50b", +1277 => x"ac1a0c88", +1278 => x"16087571", +1279 => x"0c758412", +1280 => x"0c758812", +1281 => x"0c57890b", +1282 => x"8c182381", +1283 => x"0b8e1823", +1284 => x"7490180c", +1285 => x"7494180c", +1286 => x"7498180c", +1287 => x"769c180c", +1288 => x"80c3bc0b", +1289 => x"a0180c80", +1290 => x"c4880ba4", +1291 => x"180c80c5", +1292 => x"840ba818", +1293 => x"0c80c5d5", +1294 => x"0bac180c", +1295 => x"8c160875", +1296 => x"710c7584", +1297 => x"120c7588", +1298 => x"120c548a", +1299 => x"0b8c1523", +1300 => x"820b8e15", +1301 => x"23749015", +1302 => x"0c749415", +1303 => x"0c749815", +1304 => x"0c739c15", +1305 => x"0c80c3bc", +1306 => x"0ba0150c", +1307 => x"80c4880b", +1308 => x"a4150c80", +1309 => x"c5840ba8", +1310 => x"150c80c5", +1311 => x"d50bac15", +1312 => x"0c84dc16", +1313 => x"88110884", +1314 => x"1208ff05", +1315 => x"57575780", +1316 => x"75249f38", +1317 => x"8c162270", +1318 => x"902b7090", +1319 => x"2c515559", +1320 => x"73802e80", +1321 => x"ed3880dc", +1322 => x"16ff1656", +1323 => x"56748025", +1324 => x"e3387608", +1325 => x"5574802e", +1326 => x"8f387488", +1327 => x"11088412", +1328 => x"08ff0557", +1329 => x"5757c839", +1330 => x"82fc5277", +1331 => x"518ae33f", +1332 => x"80088008", +1333 => x"55568008", +1334 => x"802ea338", +1335 => x"80088c05", +1336 => x"7580080c", +1337 => x"54840b80", +1338 => x"0884050c", +1339 => x"73800888", +1340 => x"050c82f0", +1341 => x"53745273", +1342 => x"5198813f", +1343 => x"75547374", +1344 => x"780c5573", +1345 => x"ffb4388c", +1346 => x"780c800b", +1347 => x"800c8a3d", +1348 => x"0d04810b", +1349 => x"8c172373", +1350 => x"760c7388", +1351 => x"170c7384", +1352 => x"170c7390", +1353 => x"170c7394", +1354 => x"170c7398", +1355 => x"170cff0b", +1356 => x"8e172373", +1357 => x"b0170c73", +1358 => x"b4170c73", +1359 => x"80c4170c", +1360 => x"7380c817", +1361 => x"0c75800c", +1362 => x"8a3d0d04", +1363 => x"ff3d0da3", +1364 => x"80527351", +1365 => x"86a93f83", +1366 => x"3d0d04ff", +1367 => x"3d0da380", +1368 => x"5280d39c", +1369 => x"08518697", +1370 => x"3f833d0d", +1371 => x"04fb3d0d", +1372 => x"77705256", +1373 => x"98903f80", +1374 => x"dad80b88", +1375 => x"05088411", +1376 => x"08fc0670", +1377 => x"7b319fef", +1378 => x"05e08006", +1379 => x"e0800552", +1380 => x"5555a080", +1381 => x"75249438", +1382 => x"80527551", +1383 => x"97ea3f80", +1384 => x"dae00814", +1385 => x"53728008", +1386 => x"2e8f3875", +1387 => x"5197d83f", +1388 => x"80537280", +1389 => x"0c873d0d", +1390 => x"04743052", +1391 => x"755197c8", +1392 => x"3f8008ff", +1393 => x"2ea83880", +1394 => x"dad80b88", +1395 => x"05087476", +1396 => x"31810784", +1397 => x"120c5380", +1398 => x"da9c0875", +1399 => x"3180da9c", +1400 => x"0c755197", +1401 => x"a23f810b", +1402 => x"800c873d", +1403 => x"0d048052", +1404 => x"75519794", +1405 => x"3f80dad8", +1406 => x"0b880508", +1407 => x"80087131", +1408 => x"54548f73", +1409 => x"25ffa438", +1410 => x"800880da", +1411 => x"cc083180", +1412 => x"da9c0c72", +1413 => x"81078415", +1414 => x"0c755196", +1415 => x"ea3f8053", +1416 => x"ff9039f7", +1417 => x"3d0d7b7d", +1418 => x"545a7280", +1419 => x"2e828338", +1420 => x"795196d2", +1421 => x"3ff81384", +1422 => x"110870fe", +1423 => x"06701384", +1424 => x"1108fc06", +1425 => x"5c575854", +1426 => x"5780dae0", +1427 => x"08742e82", +1428 => x"de387784", +1429 => x"150c8073", +1430 => x"81065659", +1431 => x"74792e81", +1432 => x"d5387714", +1433 => x"84110881", +1434 => x"06565374", +1435 => x"a0387716", +1436 => x"567881e6", +1437 => x"38881408", +1438 => x"557480da", +1439 => x"e02e82f9", +1440 => x"388c1408", +1441 => x"708c170c", +1442 => x"7588120c", +1443 => x"58758107", +1444 => x"84180c75", +1445 => x"1776710c", +1446 => x"54788191", +1447 => x"3883ff76", +1448 => x"2781c838", +1449 => x"75892a76", +1450 => x"832a5454", +1451 => x"73802ebf", +1452 => x"3875862a", +1453 => x"b8055384", +1454 => x"7427b438", +1455 => x"80db1453", +1456 => x"947427ab", +1457 => x"38758c2a", +1458 => x"80ee0553", +1459 => x"80d47427", +1460 => x"9e38758f", +1461 => x"2a80f705", +1462 => x"5382d474", +1463 => x"27913875", +1464 => x"922a80fc", +1465 => x"05538ad4", +1466 => x"74278438", +1467 => x"80fe5372", +1468 => x"10101080", +1469 => x"dad80588", +1470 => x"11085555", +1471 => x"73752e82", +1472 => x"bf388414", +1473 => x"08fc0659", +1474 => x"7579278d", +1475 => x"38881408", +1476 => x"5473752e", +1477 => x"098106ea", +1478 => x"388c1408", +1479 => x"708c190c", +1480 => x"7488190c", +1481 => x"7788120c", +1482 => x"55768c15", +1483 => x"0c795194", +1484 => x"d63f8b3d", +1485 => x"0d047608", +1486 => x"77713158", +1487 => x"76058818", +1488 => x"08565674", +1489 => x"80dae02e", +1490 => x"80e0388c", +1491 => x"1708708c", +1492 => x"170c7588", +1493 => x"120c53fe", +1494 => x"89398814", +1495 => x"088c1508", +1496 => x"708c130c", +1497 => x"5988190c", +1498 => x"fea33975", +1499 => x"832a7054", +1500 => x"54807424", +1501 => x"81983872", +1502 => x"822c8171", +1503 => x"2b80dadc", +1504 => x"080780da", +1505 => x"d80b8405", +1506 => x"0c741010", +1507 => x"1080dad8", +1508 => x"05881108", +1509 => x"718c1b0c", +1510 => x"70881b0c", +1511 => x"7988130c", +1512 => x"565a5576", +1513 => x"8c150cff", +1514 => x"84398159", +1515 => x"fdb43977", +1516 => x"16738106", +1517 => x"54557298", +1518 => x"38760877", +1519 => x"71315875", +1520 => x"058c1808", +1521 => x"88190871", +1522 => x"8c120c88", +1523 => x"120c5555", +1524 => x"74810784", +1525 => x"180c7680", +1526 => x"dad80b88", +1527 => x"050c80da", +1528 => x"d4087526", +1529 => x"fec73880", +1530 => x"dad00852", +1531 => x"7951fafd", +1532 => x"3f795193", +1533 => x"923ffeba", +1534 => x"3981778c", +1535 => x"170c7788", +1536 => x"170c758c", +1537 => x"190c7588", +1538 => x"190c59fd", +1539 => x"80398314", +1540 => x"70822c81", +1541 => x"712b80da", +1542 => x"dc080780", +1543 => x"dad80b84", +1544 => x"050c7510", +1545 => x"101080da", +1546 => x"d8058811", +1547 => x"08718c1c", +1548 => x"0c70881c", +1549 => x"0c7a8813", +1550 => x"0c575b56", +1551 => x"53fee439", +1552 => x"807324a3", +1553 => x"3872822c", +1554 => x"81712b80", +1555 => x"dadc0807", +1556 => x"80dad80b", +1557 => x"84050c58", +1558 => x"748c180c", +1559 => x"7388180c", +1560 => x"7688160c", +1561 => x"fdc33983", +1562 => x"1370822c", +1563 => x"81712b80", +1564 => x"dadc0807", +1565 => x"80dad80b", +1566 => x"84050c59", +1567 => x"53da39f9", +1568 => x"3d0d797b", +1569 => x"5853800b", +1570 => x"80d39c08", +1571 => x"53567272", +1572 => x"2ebc3884", +1573 => x"dc135574", +1574 => x"762eb338", +1575 => x"88150884", +1576 => x"1608ff05", +1577 => x"54548073", +1578 => x"2499388c", +1579 => x"14227090", +1580 => x"2b535871", +1581 => x"80d43880", +1582 => x"dc14ff14", +1583 => x"54547280", +1584 => x"25e93874", +1585 => x"085574d4", +1586 => x"3880d39c", +1587 => x"085284dc", +1588 => x"12557480", +1589 => x"2ead3888", +1590 => x"15088416", +1591 => x"08ff0554", +1592 => x"54807324", +1593 => x"98388c14", +1594 => x"2270902b", +1595 => x"535871ad", +1596 => x"3880dc14", +1597 => x"ff145454", +1598 => x"728025ea", +1599 => x"38740855", +1600 => x"74d53875", +1601 => x"800c893d", +1602 => x"0d047351", +1603 => x"762d7580", +1604 => x"080780dc", +1605 => x"15ff1555", +1606 => x"5556ffa2", +1607 => x"39735176", +1608 => x"2d758008", +1609 => x"0780dc15", +1610 => x"ff155555", +1611 => x"56ca39ea", +1612 => x"3d0d688c", +1613 => x"1122700a", +1614 => x"100a8106", +1615 => x"57585674", +1616 => x"80e4388e", +1617 => x"16227090", +1618 => x"2b70902c", +1619 => x"51555880", +1620 => x"7424b138", +1621 => x"983dc405", +1622 => x"53735280", +1623 => x"d39c0851", +1624 => x"93fb3f80", +1625 => x"0b800824", +1626 => x"97387983", +1627 => x"e0800654", +1628 => x"7380c080", +1629 => x"2e818f38", +1630 => x"73828080", +1631 => x"2e819138", +1632 => x"8c162257", +1633 => x"76908007", +1634 => x"54738c17", +1635 => x"23888052", +1636 => x"80d39c08", +1637 => x"51819b3f", +1638 => x"80089d38", +1639 => x"8c162282", +1640 => x"0755748c", +1641 => x"172380c3", +1642 => x"1670770c", +1643 => x"90170c81", +1644 => x"0b94170c", +1645 => x"983d0d04", +1646 => x"80d39c08", +1647 => x"aacc0bbc", +1648 => x"120c588c", +1649 => x"16228180", +1650 => x"0754738c", +1651 => x"17238008", +1652 => x"760c8008", +1653 => x"90170c88", +1654 => x"800b9417", +1655 => x"0c74802e", +1656 => x"d3388e16", +1657 => x"2270902b", +1658 => x"70902c53", +1659 => x"56549cd0", +1660 => x"3f800880", +1661 => x"2effbd38", +1662 => x"8c162281", +1663 => x"0757768c", +1664 => x"1723983d", +1665 => x"0d04810b", +1666 => x"8c172258", +1667 => x"55fef539", +1668 => x"a8160880", +1669 => x"c5842e09", +1670 => x"8106fee4", +1671 => x"388c1622", +1672 => x"88800754", +1673 => x"738c1723", +1674 => x"88800b80", +1675 => x"cc170cfe", +1676 => x"dc39f43d", +1677 => x"0d7e608b", +1678 => x"1170f806", +1679 => x"5b55555d", +1680 => x"72962683", +1681 => x"38905880", +1682 => x"78247479", +1683 => x"26075580", +1684 => x"5474742e", +1685 => x"09810680", +1686 => x"ca387c51", +1687 => x"8ea83f77", +1688 => x"83f72680", +1689 => x"c5387783", +1690 => x"2a701010", +1691 => x"1080dad8", +1692 => x"058c1108", +1693 => x"58585475", +1694 => x"772e81f0", +1695 => x"38841608", +1696 => x"fc068c17", +1697 => x"08881808", +1698 => x"718c120c", +1699 => x"88120c5b", +1700 => x"76058411", +1701 => x"08810784", +1702 => x"120c537c", +1703 => x"518de83f", +1704 => x"88165473", +1705 => x"800c8e3d", +1706 => x"0d047789", +1707 => x"2a78832a", +1708 => x"58547380", +1709 => x"2ebf3877", +1710 => x"862ab805", +1711 => x"57847427", +1712 => x"b43880db", +1713 => x"14579474", +1714 => x"27ab3877", +1715 => x"8c2a80ee", +1716 => x"055780d4", +1717 => x"74279e38", +1718 => x"778f2a80", +1719 => x"f7055782", +1720 => x"d4742791", +1721 => x"3877922a", +1722 => x"80fc0557", +1723 => x"8ad47427", +1724 => x"843880fe", +1725 => x"57761010", +1726 => x"1080dad8", +1727 => x"058c1108", +1728 => x"56537473", +1729 => x"2ea33884", +1730 => x"1508fc06", +1731 => x"70793155", +1732 => x"56738f24", +1733 => x"88e43873", +1734 => x"802588e6", +1735 => x"388c1508", +1736 => x"5574732e", +1737 => x"098106df", +1738 => x"38811759", +1739 => x"80dae808", +1740 => x"567580da", +1741 => x"e02e82cc", +1742 => x"38841608", +1743 => x"fc067079", +1744 => x"31555573", +1745 => x"8f24bb38", +1746 => x"80dae00b", +1747 => x"80daec0c", +1748 => x"80dae00b", +1749 => x"80dae80c", +1750 => x"80742480", +1751 => x"db387416", +1752 => x"84110881", +1753 => x"0784120c", +1754 => x"53feb039", +1755 => x"88168c11", +1756 => x"08575975", +1757 => x"792e0981", +1758 => x"06fe8238", +1759 => x"821459ff", +1760 => x"ab397716", +1761 => x"78810784", +1762 => x"180c7080", +1763 => x"daec0c70", +1764 => x"80dae80c", +1765 => x"80dae00b", +1766 => x"8c120c8c", +1767 => x"11088812", +1768 => x"0c748107", +1769 => x"84120c74", +1770 => x"0574710c", +1771 => x"5b7c518b", +1772 => x"d63f8816", +1773 => x"54fdec39", +1774 => x"83ff7527", +1775 => x"83913874", +1776 => x"892a7583", +1777 => x"2a545473", +1778 => x"802ebf38", +1779 => x"74862ab8", +1780 => x"05538474", +1781 => x"27b43880", +1782 => x"db145394", +1783 => x"7427ab38", +1784 => x"748c2a80", +1785 => x"ee055380", +1786 => x"d474279e", +1787 => x"38748f2a", +1788 => x"80f70553", +1789 => x"82d47427", +1790 => x"91387492", +1791 => x"2a80fc05", +1792 => x"538ad474", +1793 => x"27843880", +1794 => x"fe537210", +1795 => x"101080da", +1796 => x"d8058811", +1797 => x"08555773", +1798 => x"772e868b", +1799 => x"38841408", +1800 => x"fc065b74", +1801 => x"7b278d38", +1802 => x"88140854", +1803 => x"73772e09", +1804 => x"8106ea38", +1805 => x"8c140880", +1806 => x"dad80b84", +1807 => x"0508718c", +1808 => x"190c7588", +1809 => x"190c7788", +1810 => x"130c5c57", +1811 => x"758c150c", +1812 => x"78538079", +1813 => x"24839838", +1814 => x"72822c81", +1815 => x"712b5656", +1816 => x"747b2680", +1817 => x"ca387a75", +1818 => x"06577682", +1819 => x"a33878fc", +1820 => x"06840559", +1821 => x"7410707c", +1822 => x"06555573", +1823 => x"82923884", +1824 => x"1959f139", +1825 => x"80dad80b", +1826 => x"84050879", +1827 => x"545b7880", +1828 => x"25c63882", +1829 => x"da397409", +1830 => x"7b067080", +1831 => x"dad80b84", +1832 => x"050c5b74", +1833 => x"1055747b", +1834 => x"26853874", +1835 => x"85bc3880", +1836 => x"dad80b88", +1837 => x"05087084", +1838 => x"1208fc06", +1839 => x"707b317b", +1840 => x"72268f72", +1841 => x"25075d57", +1842 => x"5c5c5578", +1843 => x"802e80d9", +1844 => x"38791580", +1845 => x"dad00819", +1846 => x"90115954", +1847 => x"5680dacc", +1848 => x"08ff2e88", +1849 => x"38a08f13", +1850 => x"e0800657", +1851 => x"76527c51", +1852 => x"89963f80", +1853 => x"08548008", +1854 => x"ff2e9038", +1855 => x"80087627", +1856 => x"82a73874", +1857 => x"80dad82e", +1858 => x"829f3880", +1859 => x"dad80b88", +1860 => x"05085584", +1861 => x"1508fc06", +1862 => x"70793179", +1863 => x"72268f72", +1864 => x"25075d55", +1865 => x"5a7a83f2", +1866 => x"38778107", +1867 => x"84160c77", +1868 => x"157080da", +1869 => x"d80b8805", +1870 => x"0c748107", +1871 => x"84120c56", +1872 => x"7c5188c3", +1873 => x"3f881554", +1874 => x"73800c8e", +1875 => x"3d0d0474", +1876 => x"832a7054", +1877 => x"54807424", +1878 => x"819b3872", +1879 => x"822c8171", +1880 => x"2b80dadc", +1881 => x"08077080", +1882 => x"dad80b84", +1883 => x"050c7510", +1884 => x"101080da", +1885 => x"d8058811", +1886 => x"08718c1b", +1887 => x"0c70881b", +1888 => x"0c798813", +1889 => x"0c57555c", +1890 => x"55758c15", +1891 => x"0cfdc139", +1892 => x"78791010", +1893 => x"1080dad8", +1894 => x"0570565b", +1895 => x"5c8c1408", +1896 => x"5675742e", +1897 => x"a3388416", +1898 => x"08fc0670", +1899 => x"79315853", +1900 => x"768f2483", +1901 => x"f1387680", +1902 => x"2584af38", +1903 => x"8c160856", +1904 => x"75742e09", +1905 => x"8106df38", +1906 => x"8814811a", +1907 => x"70830655", +1908 => x"5a5472c9", +1909 => x"387b8306", +1910 => x"5675802e", +1911 => x"fdb838ff", +1912 => x"1cf81b5b", +1913 => x"5c881a08", +1914 => x"7a2eea38", +1915 => x"fdb53983", +1916 => x"1953fce4", +1917 => x"39831470", +1918 => x"822c8171", +1919 => x"2b80dadc", +1920 => x"08077080", +1921 => x"dad80b84", +1922 => x"050c7610", +1923 => x"101080da", +1924 => x"d8058811", +1925 => x"08718c1c", +1926 => x"0c70881c", +1927 => x"0c7a8813", +1928 => x"0c58535d", +1929 => x"5653fee1", +1930 => x"3980da9c", +1931 => x"08175980", +1932 => x"08762e81", +1933 => x"8b3880da", +1934 => x"cc08ff2e", +1935 => x"848e3873", +1936 => x"76311980", +1937 => x"da9c0c73", +1938 => x"87067056", +1939 => x"5372802e", +1940 => x"88388873", +1941 => x"31701555", +1942 => x"5576149f", +1943 => x"ff06a080", +1944 => x"71311670", +1945 => x"547e5351", +1946 => x"53869d3f", +1947 => x"80085680", +1948 => x"08ff2e81", +1949 => x"9e3880da", +1950 => x"9c081370", +1951 => x"80da9c0c", +1952 => x"747580da", +1953 => x"d80b8805", +1954 => x"0c777631", +1955 => x"15810755", +1956 => x"56597a80", +1957 => x"dad82e83", +1958 => x"c038798f", +1959 => x"2682ef38", +1960 => x"810b8415", +1961 => x"0c841508", +1962 => x"fc067079", +1963 => x"31797226", +1964 => x"8f722507", +1965 => x"5d555a7a", +1966 => x"802efced", +1967 => x"3880db39", +1968 => x"80089fff", +1969 => x"065574fe", +1970 => x"ed387880", +1971 => x"da9c0c80", +1972 => x"dad80b88", +1973 => x"05087a18", +1974 => x"81078412", +1975 => x"0c5580da", +1976 => x"c8087927", +1977 => x"86387880", +1978 => x"dac80c80", +1979 => x"dac40879", +1980 => x"27fca038", +1981 => x"7880dac4", +1982 => x"0c841508", +1983 => x"fc067079", +1984 => x"31797226", +1985 => x"8f722507", +1986 => x"5d555a7a", +1987 => x"802efc99", +1988 => x"38883980", +1989 => x"745753fe", +1990 => x"dd397c51", +1991 => x"84e93f80", +1992 => x"0b800c8e", +1993 => x"3d0d0480", +1994 => x"7324a538", +1995 => x"72822c81", +1996 => x"712b80da", +1997 => x"dc080770", +1998 => x"80dad80b", +1999 => x"84050c5c", +2000 => x"5a768c17", +2001 => x"0c738817", +2002 => x"0c758818", +2003 => x"0cf9fd39", +2004 => x"83137082", +2005 => x"2c81712b", +2006 => x"80dadc08", +2007 => x"077080da", +2008 => x"d80b8405", +2009 => x"0c5d5b53", +2010 => x"d8397a75", +2011 => x"065c7bfc", +2012 => x"9f388419", +2013 => x"75105659", +2014 => x"f139ff17", +2015 => x"810559f7", +2016 => x"ab398c15", +2017 => x"08881608", +2018 => x"718c120c", +2019 => x"88120c59", +2020 => x"75158411", +2021 => x"08810784", +2022 => x"120c587c", +2023 => x"5183e83f", +2024 => x"881554fb", +2025 => x"a3397716", +2026 => x"78810784", +2027 => x"180c8c17", +2028 => x"08881808", +2029 => x"718c120c", +2030 => x"88120c5c", +2031 => x"7080daec", +2032 => x"0c7080da", +2033 => x"e80c80da", +2034 => x"e00b8c12", +2035 => x"0c8c1108", +2036 => x"88120c77", +2037 => x"81078412", +2038 => x"0c770577", +2039 => x"710c557c", +2040 => x"5183a43f", +2041 => x"881654f5", +2042 => x"ba397216", +2043 => x"84110881", +2044 => x"0784120c", +2045 => x"588c1608", +2046 => x"88170871", +2047 => x"8c120c88", +2048 => x"120c577c", +2049 => x"5183803f", +2050 => x"881654f5", +2051 => x"96397284", +2052 => x"150cf41a", +2053 => x"f8067084", +2054 => x"1d088106", +2055 => x"07841d0c", +2056 => x"701c5556", +2057 => x"850b8415", +2058 => x"0c850b88", +2059 => x"150c8f76", +2060 => x"27fdab38", +2061 => x"881b527c", +2062 => x"51ebe83f", +2063 => x"80dad80b", +2064 => x"88050880", +2065 => x"da9c085a", +2066 => x"55fd9339", +2067 => x"7880da9c", +2068 => x"0c7380da", +2069 => x"cc0cfbef", +2070 => x"39728415", +2071 => x"0cfcff39", +2072 => x"fb3d0d77", +2073 => x"707a7c58", +2074 => x"5553568f", +2075 => x"752780e6", +2076 => x"38727607", +2077 => x"83065170", +2078 => x"80dc3875", +2079 => x"73525470", +2080 => x"70840552", +2081 => x"08747084", +2082 => x"05560c73", +2083 => x"71708405", +2084 => x"53087170", +2085 => x"8405530c", +2086 => x"71708405", +2087 => x"53087170", +2088 => x"8405530c", +2089 => x"71708405", +2090 => x"53087170", +2091 => x"8405530c", +2092 => x"f0165654", +2093 => x"748f26c7", +2094 => x"38837527", +2095 => x"95387070", +2096 => x"84055208", +2097 => x"74708405", +2098 => x"560cfc15", +2099 => x"55748326", +2100 => x"ed387371", +2101 => x"5452ff15", +2102 => x"5170ff2e", +2103 => x"98387270", +2104 => x"81055433", +2105 => x"72708105", +2106 => x"5434ff11", +2107 => x"5170ff2e", +2108 => x"098106ea", +2109 => x"3875800c", +2110 => x"873d0d04", +2111 => x"fb3d0d77", +2112 => x"7a71028c", +2113 => x"05a30533", +2114 => x"58545456", +2115 => x"83732780", +2116 => x"d4387583", +2117 => x"06517080", +2118 => x"cc387488", +2119 => x"2b750770", +2120 => x"71902b07", +2121 => x"55518f73", +2122 => x"27a73873", +2123 => x"72708405", +2124 => x"540c7174", +2125 => x"71708405", +2126 => x"530c7471", +2127 => x"70840553", +2128 => x"0c747170", +2129 => x"8405530c", +2130 => x"f0145452", +2131 => x"728f26db", +2132 => x"38837327", +2133 => x"90387372", +2134 => x"70840554", +2135 => x"0cfc1353", +2136 => x"728326f2", +2137 => x"38ff1351", +2138 => x"70ff2e93", +2139 => x"38747270", +2140 => x"81055434", +2141 => x"ff115170", +2142 => x"ff2e0981", +2143 => x"06ef3875", +2144 => x"800c873d", +2145 => x"0d040404", +2146 => x"fd3d0d80", +2147 => x"0b80e3a0", +2148 => x"0c765184", +2149 => x"ee3f8008", +2150 => x"538008ff", +2151 => x"2e883872", +2152 => x"800c853d", +2153 => x"0d0480e3", +2154 => x"a0085473", +2155 => x"802ef038", +2156 => x"7574710c", +2157 => x"5272800c", +2158 => x"853d0d04", +2159 => x"f93d0d79", +2160 => x"7c557b54", +2161 => x"8e112270", +2162 => x"902b7090", +2163 => x"2c555780", +2164 => x"d39c0853", +2165 => x"585683f3", +2166 => x"3f800857", +2167 => x"800b8008", +2168 => x"24933880", +2169 => x"d0160880", +2170 => x"080580d0", +2171 => x"170c7680", +2172 => x"0c893d0d", +2173 => x"048c1622", +2174 => x"83dfff06", +2175 => x"55748c17", +2176 => x"2376800c", +2177 => x"893d0d04", +2178 => x"fa3d0d78", +2179 => x"8c112270", +2180 => x"882a7081", +2181 => x"06515758", +2182 => x"5674a938", +2183 => x"8c162283", +2184 => x"dfff0655", +2185 => x"748c1723", +2186 => x"7a547953", +2187 => x"8e162270", +2188 => x"902b7090", +2189 => x"2c545680", +2190 => x"d39c0852", +2191 => x"5681b23f", +2192 => x"883d0d04", +2193 => x"82548053", +2194 => x"8e162270", +2195 => x"902b7090", +2196 => x"2c545680", +2197 => x"d39c0852", +2198 => x"5782b83f", +2199 => x"8c162283", +2200 => x"dfff0655", +2201 => x"748c1723", +2202 => x"7a547953", +2203 => x"8e162270", +2204 => x"902b7090", +2205 => x"2c545680", +2206 => x"d39c0852", +2207 => x"5680f23f", +2208 => x"883d0d04", +2209 => x"f93d0d79", +2210 => x"7c557b54", +2211 => x"8e112270", +2212 => x"902b7090", +2213 => x"2c555780", +2214 => x"d39c0853", +2215 => x"585681f3", +2216 => x"3f800857", +2217 => x"8008ff2e", +2218 => x"99388c16", +2219 => x"22a08007", +2220 => x"55748c17", +2221 => x"23800880", +2222 => x"d0170c76", +2223 => x"800c893d", +2224 => x"0d048c16", +2225 => x"2283dfff", +2226 => x"0655748c", +2227 => x"17237680", +2228 => x"0c893d0d", +2229 => x"04fe3d0d", +2230 => x"748e1122", +2231 => x"70902b70", +2232 => x"902c5551", +2233 => x"515380d3", +2234 => x"9c0851bd", +2235 => x"3f843d0d", +2236 => x"04fb3d0d", +2237 => x"800b80e3", +2238 => x"a00c7a53", +2239 => x"79527851", +2240 => x"82fc3f80", +2241 => x"08558008", +2242 => x"ff2e8838", +2243 => x"74800c87", +2244 => x"3d0d0480", +2245 => x"e3a00856", +2246 => x"75802ef0", +2247 => x"38777671", +2248 => x"0c547480", +2249 => x"0c873d0d", +2250 => x"04fd3d0d", +2251 => x"800b80e3", +2252 => x"a00c7651", +2253 => x"85853f80", +2254 => x"08538008", +2255 => x"ff2e8838", +2256 => x"72800c85", +2257 => x"3d0d0480", +2258 => x"e3a00854", +2259 => x"73802ef0", +2260 => x"38757471", +2261 => x"0c527280", +2262 => x"0c853d0d", +2263 => x"04fc3d0d", +2264 => x"800b80e3", +2265 => x"a00c7852", +2266 => x"775188b8", +2267 => x"3f800854", +2268 => x"8008ff2e", +2269 => x"88387380", +2270 => x"0c863d0d", +2271 => x"0480e3a0", +2272 => x"08557480", +2273 => x"2ef03876", +2274 => x"75710c53", +2275 => x"73800c86", +2276 => x"3d0d04fb", +2277 => x"3d0d800b", +2278 => x"80e3a00c", +2279 => x"7a537952", +2280 => x"78518593", +2281 => x"3f800855", +2282 => x"8008ff2e", +2283 => x"88387480", +2284 => x"0c873d0d", +2285 => x"0480e3a0", +2286 => x"08567580", +2287 => x"2ef03877", +2288 => x"76710c54", +2289 => x"74800c87", +2290 => x"3d0d04fb", +2291 => x"3d0d800b", +2292 => x"80e3a00c", +2293 => x"7a537952", +2294 => x"7851829a", +2295 => x"3f800855", +2296 => x"8008ff2e", +2297 => x"88387480", +2298 => x"0c873d0d", +2299 => x"0480e3a0", +2300 => x"08567580", +2301 => x"2ef03877", +2302 => x"76710c54", +2303 => x"74800c87", +2304 => x"3d0d04fe", +2305 => x"3d0d80e3", +2306 => x"a4085170", +2307 => x"8a3880e3", +2308 => x"ac7080e3", +2309 => x"a40c5174", +2310 => x"1152ff53", +2311 => x"7187fb80", +2312 => x"80268838", +2313 => x"7180e3a4", +2314 => x"0c705372", +2315 => x"800c843d", +2316 => x"0d04fd3d", +2317 => x"0d800b80", +2318 => x"d3900854", +2319 => x"5472812e", +2320 => x"9c387380", +2321 => x"e3a80cc0", +2322 => x"d83fffbf", +2323 => x"b33f80e2", +2324 => x"e0528151", +2325 => x"c3b43f80", +2326 => x"0851889b", +2327 => x"3f7280e3", +2328 => x"a80cc0bd", +2329 => x"3fffbf98", +2330 => x"3f80e2e0", +2331 => x"528151c3", +2332 => x"993f8008", +2333 => x"5188803f", +2334 => x"00ff3900", +2335 => x"ff39f53d", +2336 => x"0d7e6080", +2337 => x"e3a80870", +2338 => x"5b585b5b", +2339 => x"7580c538", +2340 => x"777a25a2", +2341 => x"38771b70", +2342 => x"337081ff", +2343 => x"06585859", +2344 => x"758a2e99", +2345 => x"387681ff", +2346 => x"0651ffbf", +2347 => x"d33f8118", +2348 => x"58797824", +2349 => x"e0387980", +2350 => x"0c8d3d0d", +2351 => x"048d51ff", +2352 => x"bfbe3f78", +2353 => x"337081ff", +2354 => x"065257ff", +2355 => x"bfb23f81", +2356 => x"1858de39", +2357 => x"79557a54", +2358 => x"7d538552", +2359 => x"8d3dfc05", +2360 => x"51ffbede", +2361 => x"3f800856", +2362 => x"87863f7b", +2363 => x"80080c75", +2364 => x"800c8d3d", +2365 => x"0d04f63d", +2366 => x"0d7d7f80", +2367 => x"e3a80870", +2368 => x"5a585a5a", +2369 => x"7580c438", +2370 => x"767925b2", +2371 => x"38761a58", +2372 => x"ffbecd3f", +2373 => x"80087834", +2374 => x"800b8008", +2375 => x"81ff0657", +2376 => x"58758a2e", +2377 => x"a238758d", +2378 => x"32703070", +2379 => x"80257a07", +2380 => x"51515675", +2381 => x"b8388117", +2382 => x"57787724", +2383 => x"d0387656", +2384 => x"75800c8c", +2385 => x"3d0d0481", +2386 => x"58dc3978", +2387 => x"5579547c", +2388 => x"5384528c", +2389 => x"3dfc0551", +2390 => x"ffbde73f", +2391 => x"80085686", +2392 => x"8f3f7a80", +2393 => x"080c7580", +2394 => x"0c8c3d0d", +2395 => x"04811756", +2396 => x"cf39f93d", +2397 => x"0d795780", +2398 => x"e3a80880", +2399 => x"2ead3876", +2400 => x"51c4e33f", +2401 => x"7b567a55", +2402 => x"80088105", +2403 => x"54765382", +2404 => x"52893dfc", +2405 => x"0551ffbd", +2406 => x"a93f8008", +2407 => x"5785d13f", +2408 => x"7780080c", +2409 => x"76800c89", +2410 => x"3d0d0485", +2411 => x"c33f850b", +2412 => x"80080cff", +2413 => x"0b800c89", +2414 => x"3d0d04fb", +2415 => x"3d0d80e3", +2416 => x"a8087056", +2417 => x"54738838", +2418 => x"74800c87", +2419 => x"3d0d0477", +2420 => x"53835287", +2421 => x"3dfc0551", +2422 => x"ffbce73f", +2423 => x"80085485", +2424 => x"8f3f7580", +2425 => x"080c7380", +2426 => x"0c873d0d", +2427 => x"04ff0b80", +2428 => x"0c04fb3d", +2429 => x"0d775580", +2430 => x"e3a80880", +2431 => x"2ea93874", +2432 => x"51c3e33f", +2433 => x"80088105", +2434 => x"54745387", +2435 => x"52873dfc", +2436 => x"0551ffbc", +2437 => x"ad3f8008", +2438 => x"5584d53f", +2439 => x"7580080c", +2440 => x"74800c87", +2441 => x"3d0d0484", +2442 => x"c73f850b", +2443 => x"80080cff", +2444 => x"0b800c87", +2445 => x"3d0d04fa", +2446 => x"3d0d80e3", +2447 => x"a808802e", +2448 => x"a3387a55", +2449 => x"79547853", +2450 => x"8652883d", +2451 => x"fc0551ff", +2452 => x"bbf03f80", +2453 => x"08568498", +2454 => x"3f768008", +2455 => x"0c75800c", +2456 => x"883d0d04", +2457 => x"848a3f9d", +2458 => x"0b80080c", +2459 => x"ff0b800c", +2460 => x"883d0d04", +2461 => x"f73d0d7b", +2462 => x"7d5b59bc", +2463 => x"53805279", +2464 => x"51f4f93f", +2465 => x"80705657", +2466 => x"98567419", +2467 => x"70337078", +2468 => x"2b790781", +2469 => x"18f81a5a", +2470 => x"58595558", +2471 => x"847524ea", +2472 => x"38767a23", +2473 => x"84195880", +2474 => x"70565798", +2475 => x"56741870", +2476 => x"3370782b", +2477 => x"79078118", +2478 => x"f81a5a58", +2479 => x"59515484", +2480 => x"7524ea38", +2481 => x"76821b23", +2482 => x"88195880", +2483 => x"70565798", +2484 => x"56741870", +2485 => x"3370782b", +2486 => x"79078118", +2487 => x"f81a5a58", +2488 => x"59515484", +2489 => x"7524ea38", +2490 => x"76841b0c", +2491 => x"8c195880", +2492 => x"70565798", +2493 => x"56741870", +2494 => x"3370782b", +2495 => x"79078118", +2496 => x"f81a5a58", +2497 => x"59515484", +2498 => x"7524ea38", +2499 => x"76881b23", +2500 => x"90195880", +2501 => x"70565798", +2502 => x"56741870", +2503 => x"3370782b", +2504 => x"79078118", +2505 => x"f81a5a58", +2506 => x"59515484", +2507 => x"7524ea38", +2508 => x"768a1b23", +2509 => x"94195880", +2510 => x"70565798", +2511 => x"56741870", +2512 => x"3370782b", +2513 => x"79078118", +2514 => x"f81a5a58", +2515 => x"59515484", +2516 => x"7524ea38", +2517 => x"768c1b23", +2518 => x"98195880", +2519 => x"70565798", +2520 => x"56741870", +2521 => x"3370782b", +2522 => x"79078118", +2523 => x"f81a5a58", +2524 => x"59515484", +2525 => x"7524ea38", +2526 => x"768e1b23", +2527 => x"9c195880", +2528 => x"705657b8", +2529 => x"56741870", +2530 => x"3370782b", +2531 => x"79078118", +2532 => x"f81a5a58", +2533 => x"595a5488", +2534 => x"7524ea38", +2535 => x"76901b0c", +2536 => x"8b3d0d04", +2537 => x"e93d0d6a", +2538 => x"80e3a808", +2539 => x"57577593", +2540 => x"3880c080", +2541 => x"0b84180c", +2542 => x"75ac180c", +2543 => x"75800c99", +2544 => x"3d0d0489", +2545 => x"3d70556a", +2546 => x"54558a52", +2547 => x"993dffbc", +2548 => x"0551ffb8", +2549 => x"ed3f8008", +2550 => x"77537552", +2551 => x"56fd953f", +2552 => x"818e3f77", +2553 => x"80080c75", +2554 => x"800c993d", +2555 => x"0d04e93d", +2556 => x"0d695780", +2557 => x"e3a80880", +2558 => x"2eb73876", +2559 => x"51ffbfe6", +2560 => x"3f893d70", +2561 => x"56800881", +2562 => x"05557754", +2563 => x"568f5299", +2564 => x"3dffbc05", +2565 => x"51ffb8aa", +2566 => x"3f80086b", +2567 => x"53765257", +2568 => x"fcd23f80", +2569 => x"cb3f7780", +2570 => x"080c7680", +2571 => x"0c993d0d", +2572 => x"04be3f85", +2573 => x"0b80080c", +2574 => x"ff0b800c", +2575 => x"993d0d04", +2576 => x"fc3d0d81", +2577 => x"5480e3a8", +2578 => x"08883873", +2579 => x"800c863d", +2580 => x"0d047653", +2581 => x"97b95286", +2582 => x"3dfc0551", +2583 => x"ffb7e33f", +2584 => x"8008548c", +2585 => x"3f748008", +2586 => x"0c73800c", +2587 => x"863d0d04", +2588 => x"80d39c08", +2589 => x"800c04f7", +2590 => x"3d0d7b80", +2591 => x"d39c0882", +2592 => x"c811085a", +2593 => x"545a7780", +2594 => x"2e80da38", +2595 => x"81881884", +2596 => x"1908ff05", +2597 => x"81712b59", +2598 => x"55598074", +2599 => x"2480ea38", +2600 => x"807424b5", +2601 => x"3873822b", +2602 => x"78118805", +2603 => x"56568180", +2604 => x"19087706", +2605 => x"5372802e", +2606 => x"b6387816", +2607 => x"70085353", +2608 => x"79517408", +2609 => x"53722dff", +2610 => x"14fc17fc", +2611 => x"1779812c", +2612 => x"5a575754", +2613 => x"738025d6", +2614 => x"38770858", +2615 => x"77ffad38", +2616 => x"80d39c08", +2617 => x"53bc1308", +2618 => x"a5387951", +2619 => x"f78a3f74", +2620 => x"0853722d", +2621 => x"ff14fc17", +2622 => x"fc177981", +2623 => x"2c5a5757", +2624 => x"54738025", +2625 => x"ffa838d1", +2626 => x"398057ff", +2627 => x"93397251", +2628 => x"bc130854", +2629 => x"732d7951", +2630 => x"f6de3fff", +2631 => x"3d0d80e2", +2632 => x"e80bfc05", +2633 => x"70085252", +2634 => x"70ff2e91", +2635 => x"38702dfc", +2636 => x"12700852", +2637 => x"5270ff2e", +2638 => x"098106f1", +2639 => x"38833d0d", +2640 => x"0404ffb8", +2641 => x"e03f0400", +2642 => x"48656c6c", +2643 => x"6f20776f", +2644 => x"726c6420", +2645 => x"310a0000", +2646 => x"48656c6c", +2647 => x"6f20776f", +2648 => x"726c6420", +2649 => x"320a0000", +2650 => x"0a000000", +2651 => x"43000000", +2652 => x"64756d6d", +2653 => x"792e6578", +2654 => x"65000000", +2655 => x"00ffffff", +2656 => x"ff00ffff", +2657 => x"ffff00ff", +2658 => x"ffffff00", +2659 => x"00000000", +2660 => x"00000000", +2661 => x"00000000", +2662 => x"00003170", +2663 => x"000029a0", +2664 => x"00000000", +2665 => x"00002c08", +2666 => x"00002c64", +2667 => x"00002cc0", +2668 => x"00000000", +2669 => x"00000000", +2670 => x"00000000", +2671 => x"00000000", +2672 => x"00000000", +2673 => x"00000000", +2674 => x"00000000", +2675 => x"00000000", +2676 => x"00000000", +2677 => x"0000296c", +2678 => x"00000000", +2679 => x"00000000", +2680 => x"00000000", +2681 => x"00000000", +2682 => x"00000000", +2683 => x"00000000", +2684 => x"00000000", +2685 => x"00000000", +2686 => x"00000000", +2687 => x"00000000", +2688 => x"00000000", +2689 => x"00000000", +2690 => x"00000000", +2691 => x"00000000", +2692 => x"00000000", +2693 => x"00000000", +2694 => x"00000000", +2695 => x"00000000", +2696 => x"00000000", +2697 => x"00000000", +2698 => x"00000000", +2699 => x"00000000", +2700 => x"00000000", +2701 => x"00000000", +2702 => x"00000000", +2703 => x"00000000", +2704 => x"00000000", +2705 => x"00000000", +2706 => x"00000001", +2707 => x"330eabcd", +2708 => x"1234e66d", +2709 => x"deec0005", +2710 => x"000b0000", +2711 => x"00000000", +2712 => x"00000000", +2713 => x"00000000", +2714 => x"00000000", +2715 => x"00000000", +2716 => x"00000000", +2717 => x"00000000", +2718 => x"00000000", +2719 => x"00000000", +2720 => x"00000000", +2721 => x"00000000", +2722 => x"00000000", +2723 => x"00000000", +2724 => x"00000000", +2725 => x"00000000", +2726 => x"00000000", +2727 => x"00000000", +2728 => x"00000000", +2729 => x"00000000", +2730 => x"00000000", +2731 => x"00000000", +2732 => x"00000000", +2733 => x"00000000", +2734 => x"00000000", +2735 => x"00000000", +2736 => x"00000000", +2737 => x"00000000", +2738 => x"00000000", +2739 => x"00000000", +2740 => x"00000000", +2741 => x"00000000", +2742 => x"00000000", +2743 => x"00000000", +2744 => x"00000000", +2745 => x"00000000", +2746 => x"00000000", +2747 => x"00000000", +2748 => x"00000000", +2749 => x"00000000", +2750 => x"00000000", +2751 => x"00000000", +2752 => x"00000000", +2753 => x"00000000", +2754 => x"00000000", +2755 => x"00000000", +2756 => x"00000000", +2757 => x"00000000", +2758 => x"00000000", +2759 => x"00000000", +2760 => x"00000000", +2761 => x"00000000", +2762 => x"00000000", +2763 => x"00000000", +2764 => x"00000000", +2765 => x"00000000", +2766 => x"00000000", +2767 => x"00000000", +2768 => x"00000000", +2769 => x"00000000", +2770 => x"00000000", +2771 => x"00000000", +2772 => x"00000000", +2773 => x"00000000", +2774 => x"00000000", +2775 => x"00000000", +2776 => x"00000000", +2777 => x"00000000", +2778 => x"00000000", +2779 => x"00000000", +2780 => x"00000000", +2781 => x"00000000", +2782 => x"00000000", +2783 => x"00000000", +2784 => x"00000000", +2785 => x"00000000", +2786 => x"00000000", +2787 => x"00000000", +2788 => x"00000000", +2789 => x"00000000", +2790 => x"00000000", +2791 => x"00000000", +2792 => x"00000000", +2793 => x"00000000", +2794 => x"00000000", +2795 => x"00000000", +2796 => x"00000000", +2797 => x"00000000", +2798 => x"00000000", +2799 => x"00000000", +2800 => x"00000000", +2801 => x"00000000", +2802 => x"00000000", +2803 => x"00000000", +2804 => x"00000000", +2805 => x"00000000", +2806 => x"00000000", +2807 => x"00000000", +2808 => x"00000000", +2809 => x"00000000", +2810 => x"00000000", +2811 => x"00000000", +2812 => x"00000000", +2813 => x"00000000", +2814 => x"00000000", +2815 => x"00000000", +2816 => x"00000000", +2817 => x"00000000", +2818 => x"00000000", +2819 => x"00000000", +2820 => x"00000000", +2821 => x"00000000", +2822 => x"00000000", +2823 => x"00000000", +2824 => x"00000000", +2825 => x"00000000", +2826 => x"00000000", +2827 => x"00000000", +2828 => x"00000000", +2829 => x"00000000", +2830 => x"00000000", +2831 => x"00000000", +2832 => x"00000000", +2833 => x"00000000", +2834 => x"00000000", +2835 => x"00000000", +2836 => x"00000000", +2837 => x"00000000", +2838 => x"00000000", +2839 => x"00000000", +2840 => x"00000000", +2841 => x"00000000", +2842 => x"00000000", +2843 => x"00000000", +2844 => x"00000000", +2845 => x"00000000", +2846 => x"00000000", +2847 => x"00000000", +2848 => x"00000000", +2849 => x"00000000", +2850 => x"00000000", +2851 => x"00000000", +2852 => x"00000000", +2853 => x"00000000", +2854 => x"00000000", +2855 => x"00000000", +2856 => x"00000000", +2857 => x"00000000", +2858 => x"00000000", +2859 => x"00000000", +2860 => x"00000000", +2861 => x"00000000", +2862 => x"00000000", +2863 => x"00000000", +2864 => x"00000000", +2865 => x"00000000", +2866 => x"00000000", +2867 => x"00000000", +2868 => x"00000000", +2869 => x"00000000", +2870 => x"00000000", +2871 => x"00000000", +2872 => x"00000000", +2873 => x"00000000", +2874 => x"00000000", +2875 => x"00000000", +2876 => x"00000000", +2877 => x"00000000", +2878 => x"00000000", +2879 => x"00000000", +2880 => x"00000000", +2881 => x"00000000", +2882 => x"00000000", +2883 => x"00000000", +2884 => x"00000000", +2885 => x"00000000", +2886 => x"00000000", +2887 => x"00000000", +2888 => x"00000000", +2889 => x"00000000", +2890 => x"00000000", +2891 => x"00000000", +2892 => x"00000000", +2893 => x"00000000", +2894 => x"00000000", +2895 => x"00000000", +2896 => x"00000000", +2897 => x"00000000", +2898 => x"00000000", +2899 => x"ffffffff", +2900 => x"00000000", +2901 => x"00020000", +2902 => x"00000000", +2903 => x"00000000", +2904 => x"00002d58", +2905 => x"00002d58", +2906 => x"00002d60", +2907 => x"00002d60", +2908 => x"00002d68", +2909 => x"00002d68", +2910 => x"00002d70", +2911 => x"00002d70", +2912 => x"00002d78", +2913 => x"00002d78", +2914 => x"00002d80", +2915 => x"00002d80", +2916 => x"00002d88", +2917 => x"00002d88", +2918 => x"00002d90", +2919 => x"00002d90", +2920 => x"00002d98", +2921 => x"00002d98", +2922 => x"00002da0", +2923 => x"00002da0", +2924 => x"00002da8", +2925 => x"00002da8", +2926 => x"00002db0", +2927 => x"00002db0", +2928 => x"00002db8", +2929 => x"00002db8", +2930 => x"00002dc0", +2931 => x"00002dc0", +2932 => x"00002dc8", +2933 => x"00002dc8", +2934 => x"00002dd0", +2935 => x"00002dd0", +2936 => x"00002dd8", +2937 => x"00002dd8", +2938 => x"00002de0", +2939 => x"00002de0", +2940 => x"00002de8", +2941 => x"00002de8", +2942 => x"00002df0", +2943 => x"00002df0", +2944 => x"00002df8", +2945 => x"00002df8", +2946 => x"00002e00", +2947 => x"00002e00", +2948 => x"00002e08", +2949 => x"00002e08", +2950 => x"00002e10", +2951 => x"00002e10", +2952 => x"00002e18", +2953 => x"00002e18", +2954 => x"00002e20", +2955 => x"00002e20", +2956 => x"00002e28", +2957 => x"00002e28", +2958 => x"00002e30", +2959 => x"00002e30", +2960 => x"00002e38", +2961 => x"00002e38", +2962 => x"00002e40", +2963 => x"00002e40", +2964 => x"00002e48", +2965 => x"00002e48", +2966 => x"00002e50", +2967 => x"00002e50", +2968 => x"00002e58", +2969 => x"00002e58", +2970 => x"00002e60", +2971 => x"00002e60", +2972 => x"00002e68", +2973 => x"00002e68", +2974 => x"00002e70", +2975 => x"00002e70", +2976 => x"00002e78", +2977 => x"00002e78", +2978 => x"00002e80", +2979 => x"00002e80", +2980 => x"00002e88", +2981 => x"00002e88", +2982 => x"00002e90", +2983 => x"00002e90", +2984 => x"00002e98", +2985 => x"00002e98", +2986 => x"00002ea0", +2987 => x"00002ea0", +2988 => x"00002ea8", +2989 => x"00002ea8", +2990 => x"00002eb0", +2991 => x"00002eb0", +2992 => x"00002eb8", +2993 => x"00002eb8", +2994 => x"00002ec0", +2995 => x"00002ec0", +2996 => x"00002ec8", +2997 => x"00002ec8", +2998 => x"00002ed0", +2999 => x"00002ed0", +3000 => x"00002ed8", +3001 => x"00002ed8", +3002 => x"00002ee0", +3003 => x"00002ee0", +3004 => x"00002ee8", +3005 => x"00002ee8", +3006 => x"00002ef0", +3007 => x"00002ef0", +3008 => x"00002ef8", +3009 => x"00002ef8", +3010 => x"00002f00", +3011 => x"00002f00", +3012 => x"00002f08", +3013 => x"00002f08", +3014 => x"00002f10", +3015 => x"00002f10", +3016 => x"00002f18", +3017 => x"00002f18", +3018 => x"00002f20", +3019 => x"00002f20", +3020 => x"00002f28", +3021 => x"00002f28", +3022 => x"00002f30", +3023 => x"00002f30", +3024 => x"00002f38", +3025 => x"00002f38", +3026 => x"00002f40", +3027 => x"00002f40", +3028 => x"00002f48", +3029 => x"00002f48", +3030 => x"00002f50", +3031 => x"00002f50", +3032 => x"00002f58", +3033 => x"00002f58", +3034 => x"00002f60", +3035 => x"00002f60", +3036 => x"00002f68", +3037 => x"00002f68", +3038 => x"00002f70", +3039 => x"00002f70", +3040 => x"00002f78", +3041 => x"00002f78", +3042 => x"00002f80", +3043 => x"00002f80", +3044 => x"00002f88", +3045 => x"00002f88", +3046 => x"00002f90", +3047 => x"00002f90", +3048 => x"00002f98", +3049 => x"00002f98", +3050 => x"00002fa0", +3051 => x"00002fa0", +3052 => x"00002fa8", +3053 => x"00002fa8", +3054 => x"00002fb0", +3055 => x"00002fb0", +3056 => x"00002fb8", +3057 => x"00002fb8", +3058 => x"00002fc0", +3059 => x"00002fc0", +3060 => x"00002fc8", +3061 => x"00002fc8", +3062 => x"00002fd0", +3063 => x"00002fd0", +3064 => x"00002fd8", +3065 => x"00002fd8", +3066 => x"00002fe0", +3067 => x"00002fe0", +3068 => x"00002fe8", +3069 => x"00002fe8", +3070 => x"00002ff0", +3071 => x"00002ff0", +3072 => x"00002ff8", +3073 => x"00002ff8", +3074 => x"00003000", +3075 => x"00003000", +3076 => x"00003008", +3077 => x"00003008", +3078 => x"00003010", +3079 => x"00003010", +3080 => x"00003018", +3081 => x"00003018", +3082 => x"00003020", +3083 => x"00003020", +3084 => x"00003028", +3085 => x"00003028", +3086 => x"00003030", +3087 => x"00003030", +3088 => x"00003038", +3089 => x"00003038", +3090 => x"00003040", +3091 => x"00003040", +3092 => x"00003048", +3093 => x"00003048", +3094 => x"00003050", +3095 => x"00003050", +3096 => x"00003058", +3097 => x"00003058", +3098 => x"00003060", +3099 => x"00003060", +3100 => x"00003068", +3101 => x"00003068", +3102 => x"00003070", +3103 => x"00003070", +3104 => x"00003078", +3105 => x"00003078", +3106 => x"00003080", +3107 => x"00003080", +3108 => x"00003088", +3109 => x"00003088", +3110 => x"00003090", +3111 => x"00003090", +3112 => x"00003098", +3113 => x"00003098", +3114 => x"000030a0", +3115 => x"000030a0", +3116 => x"000030a8", +3117 => x"000030a8", +3118 => x"000030b0", +3119 => x"000030b0", +3120 => x"000030b8", +3121 => x"000030b8", +3122 => x"000030c0", +3123 => x"000030c0", +3124 => x"000030c8", +3125 => x"000030c8", +3126 => x"000030d0", +3127 => x"000030d0", +3128 => x"000030d8", +3129 => x"000030d8", +3130 => x"000030e0", +3131 => x"000030e0", +3132 => x"000030e8", +3133 => x"000030e8", +3134 => x"000030f0", +3135 => x"000030f0", +3136 => x"000030f8", +3137 => x"000030f8", +3138 => x"00003100", +3139 => x"00003100", +3140 => x"00003108", +3141 => x"00003108", +3142 => x"00003110", +3143 => x"00003110", +3144 => x"00003118", +3145 => x"00003118", +3146 => x"00003120", +3147 => x"00003120", +3148 => x"00003128", +3149 => x"00003128", +3150 => x"00003130", +3151 => x"00003130", +3152 => x"00003138", +3153 => x"00003138", +3154 => x"00003140", +3155 => x"00003140", +3156 => x"00003148", +3157 => x"00003148", +3158 => x"00003150", +3159 => x"00003150", +3160 => x"00002970", +3161 => x"ffffffff", +3162 => x"00000000", +3163 => x"ffffffff", +3164 => x"00000000", diff --git a/zpu/index.html b/zpu/index.html new file mode 100644 index 0000000..bb5714f --- /dev/null +++ b/zpu/index.html @@ -0,0 +1,20 @@ + + +

Getting started

+FPGA: check out zpu/hdl, read zpu/hdl/index.html +

+Software: check out zpu/sw, read zpu/sw/index.html +

+Docs: check out zpu/docs, this is what's available as of writing. Further documentation exists in the eCosBoard 1.1 product: http://www.zylin.com/ecosboard.htm +

Other directories

+You probably don't need or want to download other directories. +
    +
  • +gccsrc - the complete GCC toolchain source. Big! Almost certainly not something you need or want to download. This has been moved to /trunk/zpugccsrc to +avoid subversion choking. +
  • roadshow - various bits and bobs to demonstrate the ZPU that has not been sorted/reorganized yet. + +
+ + + diff --git a/zpu/roadshow/roadshow/build/makefirmware.sh b/zpu/roadshow/roadshow/build/makefirmware.sh new file mode 100644 index 0000000..b44559b --- /dev/null +++ b/zpu/roadshow/roadshow/build/makefirmware.sh @@ -0,0 +1,13 @@ +echo >$2 ZylinPhiFirmware + +if [ x"$3" = x ] ;then + echo "No ic300.bit embedded into .phi" +else + echo "Embed ic300.bit into .phi" + echo >>$2 "FPGA: `wc -c $3 | grep -o -e \[0-9\]*`" + cat >>$2 $1 +fi +echo "Writing application" +echo >>$2 "Application: `wc -c $1 | grep -o -e \[0-9\]*`" +cat >>$2 $1 +echo >>$2 Done \ No newline at end of file diff --git a/zpu/roadshow/roadshow/codesize/.cvsignore b/zpu/roadshow/roadshow/codesize/.cvsignore new file mode 100644 index 0000000..6559932 --- /dev/null +++ b/zpu/roadshow/roadshow/codesize/.cvsignore @@ -0,0 +1 @@ +smallstd.elf diff --git a/zpu/roadshow/roadshow/codesize/crt0_phi.S b/zpu/roadshow/roadshow/codesize/crt0_phi.S new file mode 100644 index 0000000..4d654e2 --- /dev/null +++ b/zpu/roadshow/roadshow/codesize/crt0_phi.S @@ -0,0 +1,178 @@ +/* Startup code for ZPU + Copyright (C) 2005 Free Software Foundation, Inc. + +This file 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, or (at your option) any +later version. + +In addition to the permissions in the GNU General Public License, the +Free Software Foundation gives you unlimited permission to link the +compiled version of this file with other programs, and to distribute +those programs without any restriction coming from the use of this +file. (The General Public License restrictions do apply in other +respects; for example, they cover modification of the file, and +distribution when not linked into another program.) + +This file 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; see the file COPYING. If not, write to +the Free Software Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + .file "crt0.S" + + + + +; .section ".fixed_vectors","ax" +; KLUDGE!!! we remove the executable bit to avoid relaxation + .section ".fixed_vectors","a" + +; DANGER!!!! +; we need to align these code sections to 32 bytes, which +; means we must not use any assembler instructions that are relaxed +; at linker time +; DANGER!!!! + + .macro fixedim value + im \value + .endm + + .macro jsr address + + im 0 ; save R0 + load + im 4 ; save R1 + load + im 8 ; save R2 + load + + fixedim \address + call + + im 8 + store ; restore R2 + im 4 + store ; restore R1 + im 0 + store ; restore R0 + .endm + + + .macro jmp address + fixedim \address + poppc + .endm + + + .macro fast_neg + not + im 1 + add + .endm + + .macro cimpl funcname + ; save R0 + im 0 + load + + ; save R1 + im 4 + load + + ; save R2 + im 8 + load + + loadsp 20 + loadsp 20 + + fixedim \funcname + call + + ; destroy arguments on stack + storesp 0 + storesp 0 + + im 0 + load + + ; poke the result into the right slot + storesp 24 + + ; restore R2 + im 8 + store + + ; restore R1 + im 4 + store + + ; restore r0 + im 0 + store + + + storesp 4 + poppc + .endm + + .macro mult1bit + ; create mask of lowest bit in A + loadsp 8 ; A + im 1 + and + im -1 + add + not + loadsp 8 ; B + and + add ; accumulate in C + + ; shift B left 1 bit + loadsp 4 ; B + addsp 0 + storesp 8 ; B + + ; shift A right 1 bit + loadsp 8 ; A + flip + addsp 0 + flip + storesp 12 ; A + .endm + + + +/* vectors */ + .balign 32,0 +# offset 0x0000 0000 + .globl _start +_start: + ; intSp must be 0 when we jump to _premain + + im ZPU_ID + loadsp 0 + im _cpu_config + store + config + jmp _premain + + + +/* instruction emulation code */ + + .data + + + .globl _hardware +_hardware: + .long 0 + .globl _cpu_config +_cpu_config: + .long 0 + diff --git a/zpu/roadshow/roadshow/codesize/hello.c b/zpu/roadshow/roadshow/codesize/hello.c new file mode 100644 index 0000000..176275c --- /dev/null +++ b/zpu/roadshow/roadshow/codesize/hello.c @@ -0,0 +1,9 @@ +/* Simple hello world */ +#include + + +int main(int argc, char **argv) +{ + puts("Hello world\n"); +} + diff --git a/zpu/roadshow/roadshow/codesize/index.html b/zpu/roadshow/roadshow/codesize/index.html new file mode 100644 index 0000000..3f61b4e --- /dev/null +++ b/zpu/roadshow/roadshow/codesize/index.html @@ -0,0 +1,58 @@ + + +

Compiling hello world program with the ZPU GCC toolchain

+The ZPU comes with a standard GCC toolchain and an instruction set simulator. This allows compiling, running & debugging simple test programs. The Simulator has +some very basic peripherals defined: counter, timer interrupt and a debug output port. +

Installation

+
    +
  1. Install Cygwin. http://www.cygwin.com +
  2. Start Cygwin bash +
  3. unzip zputoolchain.zip +
  4. Add install/bin from zputoolchain.zip to PATH.
    +export PATH=$PATH:/install/bin +
+

Hello world example

+The ZPU toolchain comes with newlib & libstdc++ support which means that many C/C++ programs can be compiled without modification. +

+ +zpu-elf-gcc -Os -zeta hello.c -o hello.elf -Wl,--relax -Wl,--gc-sections
+zpu-elf-size hello.elf
+
+

Optimizing for size

+The ZPU toolchain produces highly compact code. +
    +
  1. Since the ZPU GCC toolchain supports standard ANSI C, it is easy to stumble across +functionality that takes up a lot of space. E.g. the standard printf() function is a beast. Some compilers drop e.g. floating point support +from the printf() function and thus boast a "smaller" printf() when in fact they have a non-standard printf(). newlib has a standard printf() function +and an alternative iprintf() function that works only on integers. +
  2. The ZPU ships with default startup code that works across various configurations of the ZPU, so be warned that there is some overhead that will +not occurr in the final application(anywhere between 1-4kBytes). +
  3. Compilation and linker options matter. The ZPU benefits greatly from the "-Wl,--relax -Wl,--gc-sections" options which is not used by +all architectures(e.g. GCC ARM does not implement/need -Wl,--relax). +
+

Small code example

+ +zpu-elf-gcc -Os -abel smallstd.c -o smallstd.elf -Wl,--relax -Wl,--gc-sections
+zpu-elf-size small.elf
+
+$ zpu-elf-size small.elf
+ text data bss dec hex filename
+ 2845 952 36 3833 ef9 small.elf
+
+
+ +

Even smaller code example

+If the ZPU implements the optional instructions, the RAM overhead can be reduced significantly. +

+ +zpu-elf-gcc -Os -abel crt0_phi.S small.c -o small.elf -Wl,--relax -Wl,--gc-sections -nostdlib
+zpu-elf-size small.elf
+
+$ zpu-elf-size small.elf
+ text data bss dec hex filename
+ 56 8 0 64 40 small.elf
+
+
+ + + diff --git a/zpu/roadshow/roadshow/codesize/small.c b/zpu/roadshow/roadshow/codesize/small.c new file mode 100644 index 0000000..0317343 --- /dev/null +++ b/zpu/roadshow/roadshow/codesize/small.c @@ -0,0 +1,9 @@ +void _premain(void) +{ + volatile int *someRegister=(volatile int *)0; + volatile int *otherRegister=(volatile int *)4; + while (*someRegister!=0) + { + *otherRegister++; + } +} diff --git a/zpu/roadshow/roadshow/codesize/small.elf b/zpu/roadshow/roadshow/codesize/small.elf new file mode 100644 index 0000000..4193a53 Binary files /dev/null and b/zpu/roadshow/roadshow/codesize/small.elf differ diff --git a/zpu/roadshow/roadshow/codesize/smallstd.c b/zpu/roadshow/roadshow/codesize/smallstd.c new file mode 100644 index 0000000..5d4b87a --- /dev/null +++ b/zpu/roadshow/roadshow/codesize/smallstd.c @@ -0,0 +1,9 @@ +int main(int argc, char **argv) +{ + volatile int *someRegister=(volatile int *)0; + volatile int *otherRegister=(volatile int *)4; + while (*someRegister!=0) + { + *otherRegister++; + } +} diff --git a/zpu/roadshow/roadshow/dhrystone/.cvsignore b/zpu/roadshow/roadshow/dhrystone/.cvsignore new file mode 100644 index 0000000..3544c3f --- /dev/null +++ b/zpu/roadshow/roadshow/dhrystone/.cvsignore @@ -0,0 +1,2 @@ +dhrystone.elf +dhrystone_zpu.elf diff --git a/zpu/roadshow/roadshow/dhrystone/RATIONALE b/zpu/roadshow/roadshow/dhrystone/RATIONALE new file mode 100644 index 0000000..926e046 --- /dev/null +++ b/zpu/roadshow/roadshow/dhrystone/RATIONALE @@ -0,0 +1,361 @@ + + + Dhrystone Benchmark: Rationale for Version 2 and Measurement Rules + + [published in SIGPLAN Notices 23,8 (Aug. 1988), 49-62] + + + Reinhold P. Weicker + Siemens AG, E STE 35 + [now: Siemens AG, AUT E 51] + Postfach 3220 + D-8520 Erlangen + Germany (West) + + + + +1. Why a Version 2 of Dhrystone? + +The Dhrystone benchmark program [1] has become a popular benchmark for +CPU/compiler performance measurement, in particular in the area of +minicomputers, workstations, PC's and microprocesors. It apparently satisfies +a need for an easy-to-use integer benchmark; it gives a first performance +indication which is more meaningful than MIPS numbers which, in their literal +meaning (million instructions per second), cannot be used across different +instruction sets (e.g. RISC vs. CISC). With the increasing use of the +benchmark, it seems necessary to reconsider the benchmark and to check whether +it can still fulfill this function. Version 2 of Dhrystone is the result of +such a re-evaluation, it has been made for two reasons: + +o Dhrystone has been published in Ada [1], and Versions in Ada, Pascal and C + have been distributed by Reinhold Weicker via floppy disk. However, the + version that was used most often for benchmarking has been the version made + by Rick Richardson by another translation from the Ada version into the C + programming language, this has been the version distributed via the UNIX + network Usenet [2]. + + There is an obvious need for a common C version of Dhrystone, since C is at + present the most popular system programming language for the class of + systems (microcomputers, minicomputers, workstations) where Dhrystone is + used most. There should be, as far as possible, only one C version of + Dhrystone such that results can be compared without restrictions. In the + past, the C versions distributed by Rick Richardson (Version 1.1) and by + Reinhold Weicker had small (though not significant) differences. + + Together with the new C version, the Ada and Pascal versions have been + updated as well. + +o As far as it is possible without changes to the Dhrystone statistics, + optimizing compilers should be prevented from removing significant + statements. It has turned out in the past that optimizing compilers + suppressed code generation for too many statements (by "dead code removal" + or "dead variable elimination"). This has lead to the danger that + benchmarking results obtained by a naive application of Dhrystone - without + inspection of the code that was generated - could become meaningless. + +The overall policiy for version 2 has been that the distribution of +statements, operand types and operand locality described in [1] should remain +unchanged as much as possible. (Very few changes were necessary; their impact +should be negligible.) Also, the order of statements should remain unchanged. +Although I am aware of some critical remarks on the benchmark - I agree with +several of them - and know some suggestions for improvement, I didn't want to +change the benchmark into something different from what has become known as +"Dhrystone"; the confusion generated by such a change would probably outweight +the benefits. If I were to write a new benchmark program, I wouldn't give it +the name "Dhrystone" since this denotes the program published in [1]. +However, I do recognize the need for a larger number of representative +programs that can be used as benchmarks; users should always be encouraged to +use more than just one benchmark. + +The new versions (version 2.1 for C, Pascal and Ada) will be distributed as +widely as possible. (Version 2.1 differs from version 2.0 distributed via the +UNIX Network Usenet in March 1988 only in a few corrections for minor +deficiencies found by users of version 2.0.) Readers who want to use the +benchmark for their own measurements can obtain a copy in machine-readable +form on floppy disk (MS-DOS or XENIX format) from the author. + + +2. Overall Characteristics of Version 2 + +In general, version 2 follows - in the parts that are significant for +performance measurement, i.e. within the measurement loop - the published +(Ada) version and the C versions previously distributed. Where the versions +distributed by Rick Richardson [2] and Reinhold Weicker have been different, +it follows the version distributed by Reinhold Weicker. (However, the +differences have been so small that their impact on execution time in all +likelihood has been negligible.) The initialization and UNIX instrumentation +part - which had been omitted in [1] - follows mostly the ideas of Rick +Richardson [2]. However, any changes in the initialization part and in the +printing of the result have no impact on performance measurement since they +are outside the measaurement loop. As a concession to older compilers, names +have been made unique within the first 8 characters for the C version. + +The original publication of Dhrystone did not contain any statements for time +measurement since they are necessarily system-dependent. However, it turned +out that it is not enough just to inclose the main procedure of Dhrystone in a +loop and to measure the execution time. If the variables that are computed +are not used somehow, there is the danger that the compiler considers them as +"dead variables" and suppresses code generation for a part of the statements. +Therefore in version 2 all variables of "main" are printed at the end of the +program. This also permits some plausibility control for correct execution of +the benchmark. + +At several places in the benchmark, code has been added, but only in branches +that are not executed. The intention is that optimizing compilers should be +prevented from moving code out of the measurement loop, or from removing code +altogether. Statements that are executed have been changed in very few places +only. In these cases, only the role of some operands has been changed, and it +was made sure that the numbers defining the "Dhrystone distribution" +(distribution of statements, operand types and locality) still hold as much as +possible. Except for sophisticated optimizing compilers, execution times for +version 2.1 should be the same as for previous versions. + +Because of the self-imposed limitation that the order and distribution of the +executed statements should not be changed, there are still cases where +optimizing compilers may not generate code for some statements. To a certain +degree, this is unavoidable for small synthetic benchmarks. Users of the +benchmark are advised to check code listings whether code is generated for all +statements of Dhrystone. + +Contrary to the suggestion in the published paper and its realization in the +versions previously distributed, no attempt has been made to subtract the time +for the measurement loop overhead. (This calculation has proven difficult to +implement in a correct way, and its omission makes the program simpler.) +However, since the loop check is now part of the benchmark, this does have an +impact - though a very minor one - on the distribution statistics which have +been updated for this version. + + +3. Discussion of Individual Changes + +In this section, all changes are described that affect the measurement loop +and that are not just renamings of variables. All remarks refer to the C +version; the other language versions have been updated similarly. + +In addition to adding the measurement loop and the printout statements, +changes have been made at the following places: + +o In procedure "main", three statements have been added in the non-executed + "then" part of the statement + + if (Enum_Loc == Func_1 (Ch_Index, 'C')) + + they are + + strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 3'RD STRING"); + Int_2_Loc = Run_Index; + Int_Glob = Run_Index; + + The string assignment prevents movement of the preceding assignment to + Str_2_Loc (5'th statement of "main") out of the measurement loop (This + probably will not happen for the C version, but it did happen with another + language and compiler.) The assignment to Int_2_Loc prevents value + propagation for Int_2_Loc, and the assignment to Int_Glob makes the value of + Int_Glob possibly dependent from the value of Run_Index. + +o In the three arithmetic computations at the end of the measurement loop in + "main ", the role of some variables has been exchanged, to prevent the + division from just cancelling out the multiplication as it was in [1]. A + very smart compiler might have recognized this and suppressed code + generation for the division. + +o For Proc_2, no code has been changed, but the values of the actual parameter + have changed due to changes in "main". + +o In Proc_4, the second assignment has been changed from + + Bool_Loc = Bool_Loc | Bool_Glob; + + to + + Bool_Glob = Bool_Loc | Bool_Glob; + + It now assigns a value to a global variable instead of a local variable + (Bool_Loc); Bool_Loc would be a "dead variable" which is not used + afterwards. + +o In Func_1, the statement + + Ch_1_Glob = Ch_1_Loc; + + was added in the non-executed "else" part of the "if" statement, to prevent + the suppression of code generation for the assignment to Ch_1_Loc. + +o In Func_2, the second character comparison statement has been changed to + + if (Ch_Loc == 'R') + + ('R' instead of 'X') because a comparison with 'X' is implied in the + preceding "if" statement. + + Also in Func_2, the statement + + Int_Glob = Int_Loc; + + has been added in the non-executed part of the last "if" statement, in order + to prevent Int_Loc from becoming a dead variable. + +o In Func_3, a non-executed "else" part has been added to the "if" statement. + While the program would not be incorrect without this "else" part, it is + considered bad programming practice if a function can be left without a + return value. + + To compensate for this change, the (non-executed) "else" part in the "if" + statement of Proc_3 was removed. + +The distribution statistics have been changed only by the addition of the +measurement loop iteration (1 additional statement, 4 additional local integer +operands) and by the change in Proc_4 (one operand changed from local to +global). The distribution statistics in the comment headers have been updated +accordingly. + + +4. String Operations + +The string operations (string assignment and string comparison) have not been +changed, to keep the program consistent with the original version. + +There has been some concern that the string operations are over-represented in +the program, and that execution time is dominated by these operations. This +was true in particular when optimizing compilers removed too much code in the +main part of the program, this should have been mitigated in version 2. + +It should be noted that this is a language-dependent issue: Dhrystone was +first published in Ada, and with Ada or Pascal semantics, the time spent in +the string operations is, at least in all implementations known to me, +considerably smaller. In Ada and Pascal, assignment and comparison of strings +are operators defined in the language, and the upper bounds of the strings +occuring in Dhrystone are part of the type information known at compilation +time. The compilers can therefore generate efficient inline code. In C, +string assignemt and comparisons are not part of the language, so the string +operations must be expressed in terms of the C library functions "strcpy" and +"strcmp". (ANSI C allows an implementation to use inline code for these +functions.) In addition to the overhead caused by additional function calls, +these functions are defined for null-terminated strings where the length of +the strings is not known at compilation time; the function has to check every +byte for the termination condition (the null byte). + +Obviously, a C library which includes efficiently coded "strcpy" and "strcmp" +functions helps to obtain good Dhrystone results. However, I don't think that +this is unfair since string functions do occur quite frequently in real +programs (editors, command interpreters, etc.). If the strings functions are +implemented efficiently, this helps real programs as well as benchmark +programs. + +I admit that the string comparison in Dhrystone terminates later (after +scanning 20 characters) than most string comparisons in real programs. For +consistency with the original benchmark, I didn't change the program despite +this weakness. + + +5. Intended Use of Dhrystone + +When Dhrystone is used, the following "ground rules" apply: + +o Separate compilation (Ada and C versions) + + As mentioned in [1], Dhrystone was written to reflect actual programming + practice in systems programming. The division into several compilation + units (5 in the Ada version, 2 in the C version) is intended, as is the + distribution of inter-module and intra-module subprogram calls. Although on + many systems there will be no difference in execution time to a Dhrystone + version where all compilation units are merged into one file, the rule is + that separate compilation should be used. The intention is that real + programming practice, where programs consist of several independently + compiled units, should be reflected. This also has implies that the + compiler, while compiling one unit, has no information about the use of + variables, register allocation etc. occuring in other compilation units. + Although in real life compilation units will probably be larger, the + intention is that these effects of separate compilation are modeled in + Dhrystone. + + A few language systems have post-linkage optimization available (e.g., final + register allocation is performed after linkage). This is a borderline case: + Post-linkage optimization involves additional program preparation time + (although not as much as compilation in one unit) which may prevent its + general use in practical programming. I think that since it defeats the + intentions given above, it should not be used for Dhrystone. + + Unfortunately, ISO/ANSI Pascal does not contain language features for + separate compilation. Although most commercial Pascal compilers provide + separate compilation in some way, we cannot use it for Dhrystone since such + a version would not be portable. Therefore, no attempt has been made to + provide a Pascal version with several compilation units. + +o No procedure merging + + Although Dhrystone contains some very short procedures where execution would + benefit from procedure merging (inlining, macro expansion of procedures), + procedure merging is not to be used. The reason is that the percentage of + procedure and function calls is part of the "Dhrystone distribution" of + statements contained in [1]. This restriction does not hold for the string + functions of the C version since ANSI C allows an implementation to use + inline code for these functions. + +o Other optimizations are allowed, but they should be indicated + + It is often hard to draw an exact line between "normal code generation" and + "optimization" in compilers: Some compilers perform operations by default + that are invoked in other compilers only when optimization is explicitly + requested. Also, we cannot avoid that in benchmarking people try to achieve + results that look as good as possible. Therefore, optimizations performed + by compilers - other than those listed above - are not forbidden when + Dhrystone execution times are measured. Dhrystone is not intended to be + non-optimizable but is intended to be similarly optimizable as normal + programs. For example, there are several places in Dhrystone where + performance benefits from optimizations like common subexpression + elimination, value propagation etc., but normal programs usually also + benefit from these optimizations. Therefore, no effort was made to + artificially prevent such optimizations. However, measurement reports + should indicate which compiler optimization levels have been used, and + reporting results with different levels of compiler optimization for the + same hardware is encouraged. + +o Default results are those without "register" declarations (C version) + + When Dhrystone results are quoted without additional qualification, they + should be understood as results obtained without use of the "register" + attribute. Good compilers should be able to make good use of registers even + without explicit register declarations ([3], p. 193). + +Of course, for experimental purposes, post-linkage optimization, procedure +merging and/or compilation in one unit can be done to determine their effects. +However, Dhrystone numbers obtained under these conditions should be +explicitly marked as such; "normal" Dhrystone results should be understood as +results obtained following the ground rules listed above. + +In any case, for serious performance evaluation, users are advised to ask for +code listings and to check them carefully. In this way, when results for +different systems are compared, the reader can get a feeling how much +performance difference is due to compiler optimization and how much is due to +hardware speed. + + +6. Acknowledgements + +The C version 2.1 of Dhrystone has been developed in cooperation with Rick +Richardson (Tinton Falls, NJ), it incorporates many ideas from the "Version +1.1" distributed previously by him over the UNIX network Usenet. Through his +activity with Usenet, Rick Richardson has made a very valuable contribution to +the dissemination of the benchmark. I also thank Chaim Benedelac (National +Semiconductor), David Ditzel (SUN), Earl Killian and John Mashey (MIPS), Alan +Smith and Rafael Saavedra-Barrera (UC at Berkeley) for their help with +comments on earlier versions of the benchmark. + + +7. Bibliography + +[1] + Reinhold P. Weicker: Dhrystone: A Synthetic Systems Programming Benchmark. + Communications of the ACM 27, 10 (Oct. 1984), 1013-1030 + +[2] + Rick Richardson: Dhrystone 1.1 Benchmark Summary (and Program Text) + Informal Distribution via "Usenet", Last Version Known to me: Sept. 21, + 1987 + +[3] + Brian W. Kernighan and Dennis M. Ritchie: The C Programming Language. + Prentice-Hall, Englewood Cliffs (NJ) 1978 + diff --git a/zpu/roadshow/roadshow/dhrystone/README_C b/zpu/roadshow/roadshow/dhrystone/README_C new file mode 100644 index 0000000..a27a192 --- /dev/null +++ b/zpu/roadshow/roadshow/dhrystone/README_C @@ -0,0 +1,78 @@ +This "shar" file contains the documentation for the +electronic mail distribution of the Dhrystone benchmark (C version 2.1); +a companion "shar" file contains the source code. +(Because of mail length restrictions for some mailers, I have +split the distribution in two parts.) + +For versions in other languages, see the other "shar" files. + +Files containing the C version (*.h: Header File, *.c: C Modules) + + dhry.h + dhry_1.c + dhry_2.c + +The file RATIONALE contains the article + + "Dhrystone Benchmark: Rationale for Version 2 and Measurement Rules" + +which has been published, together with the C source code (Version 2.0), +in SIGPLAN Notices vol. 23, no. 8 (Aug. 1988), pp. 49-62. +This article explains all changes that have been made for Version 2, +compared with the version of the original publication +in Communications of the ACM vol. 27, no. 10 (Oct. 1984), pp. 1013-1030. +It also contains "ground rules" for benchmarking with Dhrystone +which should be followed by everyone who uses the program and publishes +Dhrystone results. + +Compared with the Version 2.0 published in SIGPLAN Notices, Version 2.1 +contains a few corrections that have been made after Version 2.0 was +distriobuted over the UNIX network Usenet. These small differences between +Version 2.0 and 2.1 should not affect execution time measurements. +For those who want to compare the exact contents of both versions, +the file "dhry_c.dif" contains the differences between the two versions, +as generated by a file comparison of the corresponding files with the +UNIX utility "diff". + +The file VARIATIONS contains the article + + "Understanding Variations in Dhrystone Performance" + +which has been published in Microprocessor Report, May 1989 +(Editor: M. Slater), pp. 16-17. It describes the points that users +should know if C Dhrystone results are compared. + +Recipients of this shar file who perform measurements are asked +to send measurement results to the author and/or to Rick Richardson. +Rick Richardson publishes regularly Dhrystone results on the UNIX network +Usenet. For submissions of results to him (preferably by electronic mail, +see address in the program header), he has provided a form which is contained +in the file "submit.frm". + + +The following files are contained in other "shar" files: + +Files containing the Ada version (*.s: Specifications, *.b: Bodies): + + d_global.s + d_main.b + d_pack_1.b + d_pack_1.s + d_pack_2.b + d_pack_2.s + +File containing the Pascal version: + + dhry.p + + +February 22, 1990 + + Reinhold P. Weicker + Siemens AG, AUT E 51 + Postfach 3220 + D-8520 Erlangen + Germany (West) + + Phone: [xxx-49]-9131-7-20330 (8-17 Central European Time) + UUCP: ..!mcsun!unido!estevax!weicker diff --git a/zpu/roadshow/roadshow/dhrystone/VARIATIONS b/zpu/roadshow/roadshow/dhrystone/VARIATIONS new file mode 100644 index 0000000..3046cbd --- /dev/null +++ b/zpu/roadshow/roadshow/dhrystone/VARIATIONS @@ -0,0 +1,157 @@ + + Understanding Variations in Dhrystone Performance + + + + By Reinhold P. Weicker, Siemens AG, AUT E 51, Erlangen + + + + April 1989 + + + This article has appeared in: + + + Microprocessor Report, May 1989 (Editor: M. Slater), pp. 16-17 + + + + +Microprocessor manufacturers tend to credit all the performance measured by +benchmarks to the speed of their processors, they often don't even mention the +programming language and compiler used. In their detailed documents, usually +called "performance brief" or "performance report," they usually do give more +details. However, these details are often lost in the press releases and other +marketing statements. For serious performance evaluation, it is necessary to +study the code generated by the various compilers. + +Dhrystone was originally published in Ada (Communications of the ACM, Oct. +1984). However, since good Ada compilers were rare at this time and, together +with UNIX, C became more and more popular, the C version of Dhrystone is the +one now mainly used in industry. There are "official" versions 2.1 for Ada, +Pascal, and C, which are as close together as the languages' semantic +differences permit. + +Dhrystone contains two statements where the programming language and its +translation play a major part in the execution time measured by the benchmark: + + o String assignment (in procedure Proc_0 / main) + o String comparison (in function Func_2) + +In Ada and Pascal, strings are arrays of characters where the length of the +string is part of the type information known at compile time. In C, strings +are also arrays of characters, but there are no operators defined in the +language for assignment and comparison of strings. Instead, functions +"strcpy" and "strcmp" are used. These functions are defined for strings of +arbitrary length, and make use of the fact that strings in C have to end with +a terminating null byte. For general-purpose calls to these functions, the +implementor can assume nothing about the length and the alignment of the +strings involved. + +The C version of Dhrystone spends a relatively large amount of time in these +two functions. Some time ago, I made measurements on a VAX 11/785 with the +Berkeley UNIX (4.2) compilers (often-used compilers, but certainly not the +most advanced). In the C version, 23% of the time was spent in the string +functions; in the Pascal version, only 10%. On good RISC machines (where less +time is spent in the procedure calling sequence than on a VAX) and with better +optimizing compilers, the percentage is higher; MIPS has reported 34% for an +R3000. Because of this effect, Pascal and Ada Dhrystone results are usually +better than C results (except when the optimization quality of the C compiler +is considerably better than that of the other compilers). + +Several people have noted that the string operations are over-represented in +Dhrystone, mainly because the strings occurring in Dhrystone are longer than +average strings. I admit that this is true, and have said so in my SIGPLAN +Notices paper (Aug. 1988); however, I didn't want to generate confusion by +changing the string lengths from version 1 to version 2. + +Even if they are somewhat over-represented in Dhrystone, string operations are +frequent enough that it makes sense to implement them in the most efficient +way possible, not only for benchmarking purposes. This means that they can +and should be written in assembly language code. ANSI C also explicitly allows +the strings functions to be implemented as macros, i.e. by inline code. + +There is also a third way to speed up the "strcpy" statement in Dhrystone: For +this particular "strcpy" statement, the source of the assignment is a string +constant. Therefore, in contrast to calls to "strcpy" in the general case, the +compiler knows the length and alignment of the strings involved at compile +time and can generate code in the same efficient way as a Pascal compiler +(word instructions instead of byte instructions). + +This is not allowed in the case of the "strcmp" call: Here, the addresses are +formal procedure parameters, and no assumptions can be made about the length +or alignment of the strings. Any such assumptions would indicate an incorrect +implementation. They might work for Dhrystone, where the strings are in fact +word-aligned with typical compilers, but other programs would deliver +incorrect results. + +So, for an apple-to-apple comparison between processors, and not between +several possible (legal or illegal) degrees of compiler optimization, one +should check that the systems are comparable with respect to the following +three points: + + (1) String functions in assembly language vs. in C + + Frequently used functions such as the string functions can and should be + written in assembly language, and all serious C language systems known + to me do this. (I list this point for completeness only.) Note that + processors with an instruction that checks a word for a null byte (such + as AMD's 29000 and Intel's 80960) have an advantage here. (This + advantage decreases relatively if optimization (3) is applied.) Due to + the length of the strings involved in Dhrystone, this advantage may be + considered too high in perspective, but it is certainly legal to use + such instructions - after all, these situations are what they were + invented for. + + (2) String function code inline vs. as library functions. + + ANSI C has created a new situation, compared with the older + Kernighan/Ritchie C. In the original C, the definition of the string + function was not part of the language. Now it is, and inlining is + explicitly allowed. I probably should have stated more clearly in my + SIGPLAN Notices paper that the rule "No procedure inlining for + Dhrystone" referred to the user level procedures only and not to the + library routines. + + (3) Fixed-length and alignment assumptions for the strings + + Compilers should be allowed to optimize in these cases if (and only if) + it is safe to do so. For Dhrystone, this is the "strcpy" statement, but + not the "strcmp" statement (unless, of course, the "strcmp" code + explicitly checks the alignment at execution time and branches + accordingly). A "Dhrystone switch" for the compiler that causes the + generation of code that may not work under certain circumstances is + certainly inappropriate for comparisons. It has been reported in Usenet + that some C compilers provide such a compiler option; since I don't have + access to all C compilers involved, I cannot verify this. + + If the fixed-length and word-alignment assumption can be used, a wide + bus that permits fast multi-word load instructions certainly does help; + however, this fact by itself should not make a really big difference. + +A check of these points - something that is necessary for a thorough +evaluation and comparison of the Dhrystone performance claims - requires +object code listings as well as listings for the string functions (strcpy, +strcmp) that are possibly called by the program. + +I don't pretend that Dhrystone is a perfect tool to measure the integer +performance of microprocessors. The more it is used and discussed, the more I +myself learn about aspects that I hadn't noticed yet when I wrote the program. +And of course, the very success of a benchmark program is a danger in that +people may tune their compilers and/or hardware to it, and with this action +make it less useful. + +Whetstone and Linpack have their critical points also: The Whetstone rating +depends heavily on the speed of the mathematical functions (sine, sqrt, ...), +and Linpack is sensitive to data alignment for some cache configurations. + +Introduction of a standard set of public domain benchmark software (something +the SPEC effort attempts) is certainly a worthwhile thing. In the meantime, +people will continue to use whatever is available and widely distributed, and +Dhrystone ratings are probably still better than MIPS ratings if these are - +as often in industry - based on no reproducible derivation. However, any +serious performance evaluation requires more than just a comparison of raw +numbers; one has to make sure that the numbers have been obtained in a +comparable way. + diff --git a/zpu/roadshow/roadshow/dhrystone/build.sh b/zpu/roadshow/roadshow/dhrystone/build.sh new file mode 100644 index 0000000..5bba707 --- /dev/null +++ b/zpu/roadshow/roadshow/dhrystone/build.sh @@ -0,0 +1,7 @@ +zpu-elf-gcc -phi -DTIME dhry_1.c dhry_2.c -O3 -Wl,--relax -Wl,--gc-sections -o dhrystone.elf +zpu-elf-size *.elf +zpu-elf-objcopy -O binary dhrystone.elf dhrystone.bin +sh ../build/makefirmware.sh dhrystone.bin dhrystone.zpu + + + diff --git a/zpu/roadshow/roadshow/dhrystone/dhry-c b/zpu/roadshow/roadshow/dhrystone/dhry-c new file mode 100644 index 0000000..4cec46c --- /dev/null +++ b/zpu/roadshow/roadshow/dhrystone/dhry-c @@ -0,0 +1,1779 @@ +# to unbundle, sh this file (in an empty directory) +echo RATIONALE 1>&2 +sed >RATIONALE <<'//GO.SYSIN DD RATIONALE' 's/^-//' +- +- +- Dhrystone Benchmark: Rationale for Version 2 and Measurement Rules +- +- [published in SIGPLAN Notices 23,8 (Aug. 1988), 49-62] +- +- +- Reinhold P. Weicker +- Siemens AG, E STE 35 +- [now: Siemens AG, AUT E 51] +- Postfach 3220 +- D-8520 Erlangen +- Germany (West) +- +- +- +- +-1. Why a Version 2 of Dhrystone? +- +-The Dhrystone benchmark program [1] has become a popular benchmark for +-CPU/compiler performance measurement, in particular in the area of +-minicomputers, workstations, PC's and microprocesors. It apparently satisfies +-a need for an easy-to-use integer benchmark; it gives a first performance +-indication which is more meaningful than MIPS numbers which, in their literal +-meaning (million instructions per second), cannot be used across different +-instruction sets (e.g. RISC vs. CISC). With the increasing use of the +-benchmark, it seems necessary to reconsider the benchmark and to check whether +-it can still fulfill this function. Version 2 of Dhrystone is the result of +-such a re-evaluation, it has been made for two reasons: +- +-o Dhrystone has been published in Ada [1], and Versions in Ada, Pascal and C +- have been distributed by Reinhold Weicker via floppy disk. However, the +- version that was used most often for benchmarking has been the version made +- by Rick Richardson by another translation from the Ada version into the C +- programming language, this has been the version distributed via the UNIX +- network Usenet [2]. +- +- There is an obvious need for a common C version of Dhrystone, since C is at +- present the most popular system programming language for the class of +- systems (microcomputers, minicomputers, workstations) where Dhrystone is +- used most. There should be, as far as possible, only one C version of +- Dhrystone such that results can be compared without restrictions. In the +- past, the C versions distributed by Rick Richardson (Version 1.1) and by +- Reinhold Weicker had small (though not significant) differences. +- +- Together with the new C version, the Ada and Pascal versions have been +- updated as well. +- +-o As far as it is possible without changes to the Dhrystone statistics, +- optimizing compilers should be prevented from removing significant +- statements. It has turned out in the past that optimizing compilers +- suppressed code generation for too many statements (by "dead code removal" +- or "dead variable elimination"). This has lead to the danger that +- benchmarking results obtained by a naive application of Dhrystone - without +- inspection of the code that was generated - could become meaningless. +- +-The overall policiy for version 2 has been that the distribution of +-statements, operand types and operand locality described in [1] should remain +-unchanged as much as possible. (Very few changes were necessary; their impact +-should be negligible.) Also, the order of statements should remain unchanged. +-Although I am aware of some critical remarks on the benchmark - I agree with +-several of them - and know some suggestions for improvement, I didn't want to +-change the benchmark into something different from what has become known as +-"Dhrystone"; the confusion generated by such a change would probably outweight +-the benefits. If I were to write a new benchmark program, I wouldn't give it +-the name "Dhrystone" since this denotes the program published in [1]. +-However, I do recognize the need for a larger number of representative +-programs that can be used as benchmarks; users should always be encouraged to +-use more than just one benchmark. +- +-The new versions (version 2.1 for C, Pascal and Ada) will be distributed as +-widely as possible. (Version 2.1 differs from version 2.0 distributed via the +-UNIX Network Usenet in March 1988 only in a few corrections for minor +-deficiencies found by users of version 2.0.) Readers who want to use the +-benchmark for their own measurements can obtain a copy in machine-readable +-form on floppy disk (MS-DOS or XENIX format) from the author. +- +- +-2. Overall Characteristics of Version 2 +- +-In general, version 2 follows - in the parts that are significant for +-performance measurement, i.e. within the measurement loop - the published +-(Ada) version and the C versions previously distributed. Where the versions +-distributed by Rick Richardson [2] and Reinhold Weicker have been different, +-it follows the version distributed by Reinhold Weicker. (However, the +-differences have been so small that their impact on execution time in all +-likelihood has been negligible.) The initialization and UNIX instrumentation +-part - which had been omitted in [1] - follows mostly the ideas of Rick +-Richardson [2]. However, any changes in the initialization part and in the +-printing of the result have no impact on performance measurement since they +-are outside the measaurement loop. As a concession to older compilers, names +-have been made unique within the first 8 characters for the C version. +- +-The original publication of Dhrystone did not contain any statements for time +-measurement since they are necessarily system-dependent. However, it turned +-out that it is not enough just to inclose the main procedure of Dhrystone in a +-loop and to measure the execution time. If the variables that are computed +-are not used somehow, there is the danger that the compiler considers them as +-"dead variables" and suppresses code generation for a part of the statements. +-Therefore in version 2 all variables of "main" are printed at the end of the +-program. This also permits some plausibility control for correct execution of +-the benchmark. +- +-At several places in the benchmark, code has been added, but only in branches +-that are not executed. The intention is that optimizing compilers should be +-prevented from moving code out of the measurement loop, or from removing code +-altogether. Statements that are executed have been changed in very few places +-only. In these cases, only the role of some operands has been changed, and it +-was made sure that the numbers defining the "Dhrystone distribution" +-(distribution of statements, operand types and locality) still hold as much as +-possible. Except for sophisticated optimizing compilers, execution times for +-version 2.1 should be the same as for previous versions. +- +-Because of the self-imposed limitation that the order and distribution of the +-executed statements should not be changed, there are still cases where +-optimizing compilers may not generate code for some statements. To a certain +-degree, this is unavoidable for small synthetic benchmarks. Users of the +-benchmark are advised to check code listings whether code is generated for all +-statements of Dhrystone. +- +-Contrary to the suggestion in the published paper and its realization in the +-versions previously distributed, no attempt has been made to subtract the time +-for the measurement loop overhead. (This calculation has proven difficult to +-implement in a correct way, and its omission makes the program simpler.) +-However, since the loop check is now part of the benchmark, this does have an +-impact - though a very minor one - on the distribution statistics which have +-been updated for this version. +- +- +-3. Discussion of Individual Changes +- +-In this section, all changes are described that affect the measurement loop +-and that are not just renamings of variables. All remarks refer to the C +-version; the other language versions have been updated similarly. +- +-In addition to adding the measurement loop and the printout statements, +-changes have been made at the following places: +- +-o In procedure "main", three statements have been added in the non-executed +- "then" part of the statement +- +- if (Enum_Loc == Func_1 (Ch_Index, 'C')) +- +- they are +- +- strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 3'RD STRING"); +- Int_2_Loc = Run_Index; +- Int_Glob = Run_Index; +- +- The string assignment prevents movement of the preceding assignment to +- Str_2_Loc (5'th statement of "main") out of the measurement loop (This +- probably will not happen for the C version, but it did happen with another +- language and compiler.) The assignment to Int_2_Loc prevents value +- propagation for Int_2_Loc, and the assignment to Int_Glob makes the value of +- Int_Glob possibly dependent from the value of Run_Index. +- +-o In the three arithmetic computations at the end of the measurement loop in +- "main ", the role of some variables has been exchanged, to prevent the +- division from just cancelling out the multiplication as it was in [1]. A +- very smart compiler might have recognized this and suppressed code +- generation for the division. +- +-o For Proc_2, no code has been changed, but the values of the actual parameter +- have changed due to changes in "main". +- +-o In Proc_4, the second assignment has been changed from +- +- Bool_Loc = Bool_Loc | Bool_Glob; +- +- to +- +- Bool_Glob = Bool_Loc | Bool_Glob; +- +- It now assigns a value to a global variable instead of a local variable +- (Bool_Loc); Bool_Loc would be a "dead variable" which is not used +- afterwards. +- +-o In Func_1, the statement +- +- Ch_1_Glob = Ch_1_Loc; +- +- was added in the non-executed "else" part of the "if" statement, to prevent +- the suppression of code generation for the assignment to Ch_1_Loc. +- +-o In Func_2, the second character comparison statement has been changed to +- +- if (Ch_Loc == 'R') +- +- ('R' instead of 'X') because a comparison with 'X' is implied in the +- preceding "if" statement. +- +- Also in Func_2, the statement +- +- Int_Glob = Int_Loc; +- +- has been added in the non-executed part of the last "if" statement, in order +- to prevent Int_Loc from becoming a dead variable. +- +-o In Func_3, a non-executed "else" part has been added to the "if" statement. +- While the program would not be incorrect without this "else" part, it is +- considered bad programming practice if a function can be left without a +- return value. +- +- To compensate for this change, the (non-executed) "else" part in the "if" +- statement of Proc_3 was removed. +- +-The distribution statistics have been changed only by the addition of the +-measurement loop iteration (1 additional statement, 4 additional local integer +-operands) and by the change in Proc_4 (one operand changed from local to +-global). The distribution statistics in the comment headers have been updated +-accordingly. +- +- +-4. String Operations +- +-The string operations (string assignment and string comparison) have not been +-changed, to keep the program consistent with the original version. +- +-There has been some concern that the string operations are over-represented in +-the program, and that execution time is dominated by these operations. This +-was true in particular when optimizing compilers removed too much code in the +-main part of the program, this should have been mitigated in version 2. +- +-It should be noted that this is a language-dependent issue: Dhrystone was +-first published in Ada, and with Ada or Pascal semantics, the time spent in +-the string operations is, at least in all implementations known to me, +-considerably smaller. In Ada and Pascal, assignment and comparison of strings +-are operators defined in the language, and the upper bounds of the strings +-occuring in Dhrystone are part of the type information known at compilation +-time. The compilers can therefore generate efficient inline code. In C, +-string assignemt and comparisons are not part of the language, so the string +-operations must be expressed in terms of the C library functions "strcpy" and +-"strcmp". (ANSI C allows an implementation to use inline code for these +-functions.) In addition to the overhead caused by additional function calls, +-these functions are defined for null-terminated strings where the length of +-the strings is not known at compilation time; the function has to check every +-byte for the termination condition (the null byte). +- +-Obviously, a C library which includes efficiently coded "strcpy" and "strcmp" +-functions helps to obtain good Dhrystone results. However, I don't think that +-this is unfair since string functions do occur quite frequently in real +-programs (editors, command interpreters, etc.). If the strings functions are +-implemented efficiently, this helps real programs as well as benchmark +-programs. +- +-I admit that the string comparison in Dhrystone terminates later (after +-scanning 20 characters) than most string comparisons in real programs. For +-consistency with the original benchmark, I didn't change the program despite +-this weakness. +- +- +-5. Intended Use of Dhrystone +- +-When Dhrystone is used, the following "ground rules" apply: +- +-o Separate compilation (Ada and C versions) +- +- As mentioned in [1], Dhrystone was written to reflect actual programming +- practice in systems programming. The division into several compilation +- units (5 in the Ada version, 2 in the C version) is intended, as is the +- distribution of inter-module and intra-module subprogram calls. Although on +- many systems there will be no difference in execution time to a Dhrystone +- version where all compilation units are merged into one file, the rule is +- that separate compilation should be used. The intention is that real +- programming practice, where programs consist of several independently +- compiled units, should be reflected. This also has implies that the +- compiler, while compiling one unit, has no information about the use of +- variables, register allocation etc. occuring in other compilation units. +- Although in real life compilation units will probably be larger, the +- intention is that these effects of separate compilation are modeled in +- Dhrystone. +- +- A few language systems have post-linkage optimization available (e.g., final +- register allocation is performed after linkage). This is a borderline case: +- Post-linkage optimization involves additional program preparation time +- (although not as much as compilation in one unit) which may prevent its +- general use in practical programming. I think that since it defeats the +- intentions given above, it should not be used for Dhrystone. +- +- Unfortunately, ISO/ANSI Pascal does not contain language features for +- separate compilation. Although most commercial Pascal compilers provide +- separate compilation in some way, we cannot use it for Dhrystone since such +- a version would not be portable. Therefore, no attempt has been made to +- provide a Pascal version with several compilation units. +- +-o No procedure merging +- +- Although Dhrystone contains some very short procedures where execution would +- benefit from procedure merging (inlining, macro expansion of procedures), +- procedure merging is not to be used. The reason is that the percentage of +- procedure and function calls is part of the "Dhrystone distribution" of +- statements contained in [1]. This restriction does not hold for the string +- functions of the C version since ANSI C allows an implementation to use +- inline code for these functions. +- +-o Other optimizations are allowed, but they should be indicated +- +- It is often hard to draw an exact line between "normal code generation" and +- "optimization" in compilers: Some compilers perform operations by default +- that are invoked in other compilers only when optimization is explicitly +- requested. Also, we cannot avoid that in benchmarking people try to achieve +- results that look as good as possible. Therefore, optimizations performed +- by compilers - other than those listed above - are not forbidden when +- Dhrystone execution times are measured. Dhrystone is not intended to be +- non-optimizable but is intended to be similarly optimizable as normal +- programs. For example, there are several places in Dhrystone where +- performance benefits from optimizations like common subexpression +- elimination, value propagation etc., but normal programs usually also +- benefit from these optimizations. Therefore, no effort was made to +- artificially prevent such optimizations. However, measurement reports +- should indicate which compiler optimization levels have been used, and +- reporting results with different levels of compiler optimization for the +- same hardware is encouraged. +- +-o Default results are those without "register" declarations (C version) +- +- When Dhrystone results are quoted without additional qualification, they +- should be understood as results obtained without use of the "register" +- attribute. Good compilers should be able to make good use of registers even +- without explicit register declarations ([3], p. 193). +- +-Of course, for experimental purposes, post-linkage optimization, procedure +-merging and/or compilation in one unit can be done to determine their effects. +-However, Dhrystone numbers obtained under these conditions should be +-explicitly marked as such; "normal" Dhrystone results should be understood as +-results obtained following the ground rules listed above. +- +-In any case, for serious performance evaluation, users are advised to ask for +-code listings and to check them carefully. In this way, when results for +-different systems are compared, the reader can get a feeling how much +-performance difference is due to compiler optimization and how much is due to +-hardware speed. +- +- +-6. Acknowledgements +- +-The C version 2.1 of Dhrystone has been developed in cooperation with Rick +-Richardson (Tinton Falls, NJ), it incorporates many ideas from the "Version +-1.1" distributed previously by him over the UNIX network Usenet. Through his +-activity with Usenet, Rick Richardson has made a very valuable contribution to +-the dissemination of the benchmark. I also thank Chaim Benedelac (National +-Semiconductor), David Ditzel (SUN), Earl Killian and John Mashey (MIPS), Alan +-Smith and Rafael Saavedra-Barrera (UC at Berkeley) for their help with +-comments on earlier versions of the benchmark. +- +- +-7. Bibliography +- +-[1] +- Reinhold P. Weicker: Dhrystone: A Synthetic Systems Programming Benchmark. +- Communications of the ACM 27, 10 (Oct. 1984), 1013-1030 +- +-[2] +- Rick Richardson: Dhrystone 1.1 Benchmark Summary (and Program Text) +- Informal Distribution via "Usenet", Last Version Known to me: Sept. 21, +- 1987 +- +-[3] +- Brian W. Kernighan and Dennis M. Ritchie: The C Programming Language. +- Prentice-Hall, Englewood Cliffs (NJ) 1978 +- +//GO.SYSIN DD RATIONALE +echo README_C 1>&2 +sed >README_C <<'//GO.SYSIN DD README_C' 's/^-//' +-This "shar" file contains the documentation for the +-electronic mail distribution of the Dhrystone benchmark (C version 2.1); +-a companion "shar" file contains the source code. +-(Because of mail length restrictions for some mailers, I have +-split the distribution in two parts.) +- +-For versions in other languages, see the other "shar" files. +- +-Files containing the C version (*.h: Header File, *.c: C Modules) +- +- dhry.h +- dhry_1.c +- dhry_2.c +- +-The file RATIONALE contains the article +- +- "Dhrystone Benchmark: Rationale for Version 2 and Measurement Rules" +- +-which has been published, together with the C source code (Version 2.0), +-in SIGPLAN Notices vol. 23, no. 8 (Aug. 1988), pp. 49-62. +-This article explains all changes that have been made for Version 2, +-compared with the version of the original publication +-in Communications of the ACM vol. 27, no. 10 (Oct. 1984), pp. 1013-1030. +-It also contains "ground rules" for benchmarking with Dhrystone +-which should be followed by everyone who uses the program and publishes +-Dhrystone results. +- +-Compared with the Version 2.0 published in SIGPLAN Notices, Version 2.1 +-contains a few corrections that have been made after Version 2.0 was +-distriobuted over the UNIX network Usenet. These small differences between +-Version 2.0 and 2.1 should not affect execution time measurements. +-For those who want to compare the exact contents of both versions, +-the file "dhry_c.dif" contains the differences between the two versions, +-as generated by a file comparison of the corresponding files with the +-UNIX utility "diff". +- +-The file VARIATIONS contains the article +- +- "Understanding Variations in Dhrystone Performance" +- +-which has been published in Microprocessor Report, May 1989 +-(Editor: M. Slater), pp. 16-17. It describes the points that users +-should know if C Dhrystone results are compared. +- +-Recipients of this shar file who perform measurements are asked +-to send measurement results to the author and/or to Rick Richardson. +-Rick Richardson publishes regularly Dhrystone results on the UNIX network +-Usenet. For submissions of results to him (preferably by electronic mail, +-see address in the program header), he has provided a form which is contained +-in the file "submit.frm". +- +- +-The following files are contained in other "shar" files: +- +-Files containing the Ada version (*.s: Specifications, *.b: Bodies): +- +- d_global.s +- d_main.b +- d_pack_1.b +- d_pack_1.s +- d_pack_2.b +- d_pack_2.s +- +-File containing the Pascal version: +- +- dhry.p +- +- +-February 22, 1990 +- +- Reinhold P. Weicker +- Siemens AG, AUT E 51 +- Postfach 3220 +- D-8520 Erlangen +- Germany (West) +- +- Phone: [xxx-49]-9131-7-20330 (8-17 Central European Time) +- UUCP: ..!mcsun!unido!estevax!weicker +//GO.SYSIN DD README_C +echo VARIATIONS 1>&2 +sed >VARIATIONS <<'//GO.SYSIN DD VARIATIONS' 's/^-//' +- +- Understanding Variations in Dhrystone Performance +- +- +- +- By Reinhold P. Weicker, Siemens AG, AUT E 51, Erlangen +- +- +- +- April 1989 +- +- +- This article has appeared in: +- +- +- Microprocessor Report, May 1989 (Editor: M. Slater), pp. 16-17 +- +- +- +- +-Microprocessor manufacturers tend to credit all the performance measured by +-benchmarks to the speed of their processors, they often don't even mention the +-programming language and compiler used. In their detailed documents, usually +-called "performance brief" or "performance report," they usually do give more +-details. However, these details are often lost in the press releases and other +-marketing statements. For serious performance evaluation, it is necessary to +-study the code generated by the various compilers. +- +-Dhrystone was originally published in Ada (Communications of the ACM, Oct. +-1984). However, since good Ada compilers were rare at this time and, together +-with UNIX, C became more and more popular, the C version of Dhrystone is the +-one now mainly used in industry. There are "official" versions 2.1 for Ada, +-Pascal, and C, which are as close together as the languages' semantic +-differences permit. +- +-Dhrystone contains two statements where the programming language and its +-translation play a major part in the execution time measured by the benchmark: +- +- o String assignment (in procedure Proc_0 / main) +- o String comparison (in function Func_2) +- +-In Ada and Pascal, strings are arrays of characters where the length of the +-string is part of the type information known at compile time. In C, strings +-are also arrays of characters, but there are no operators defined in the +-language for assignment and comparison of strings. Instead, functions +-"strcpy" and "strcmp" are used. These functions are defined for strings of +-arbitrary length, and make use of the fact that strings in C have to end with +-a terminating null byte. For general-purpose calls to these functions, the +-implementor can assume nothing about the length and the alignment of the +-strings involved. +- +-The C version of Dhrystone spends a relatively large amount of time in these +-two functions. Some time ago, I made measurements on a VAX 11/785 with the +-Berkeley UNIX (4.2) compilers (often-used compilers, but certainly not the +-most advanced). In the C version, 23% of the time was spent in the string +-functions; in the Pascal version, only 10%. On good RISC machines (where less +-time is spent in the procedure calling sequence than on a VAX) and with better +-optimizing compilers, the percentage is higher; MIPS has reported 34% for an +-R3000. Because of this effect, Pascal and Ada Dhrystone results are usually +-better than C results (except when the optimization quality of the C compiler +-is considerably better than that of the other compilers). +- +-Several people have noted that the string operations are over-represented in +-Dhrystone, mainly because the strings occurring in Dhrystone are longer than +-average strings. I admit that this is true, and have said so in my SIGPLAN +-Notices paper (Aug. 1988); however, I didn't want to generate confusion by +-changing the string lengths from version 1 to version 2. +- +-Even if they are somewhat over-represented in Dhrystone, string operations are +-frequent enough that it makes sense to implement them in the most efficient +-way possible, not only for benchmarking purposes. This means that they can +-and should be written in assembly language code. ANSI C also explicitly allows +-the strings functions to be implemented as macros, i.e. by inline code. +- +-There is also a third way to speed up the "strcpy" statement in Dhrystone: For +-this particular "strcpy" statement, the source of the assignment is a string +-constant. Therefore, in contrast to calls to "strcpy" in the general case, the +-compiler knows the length and alignment of the strings involved at compile +-time and can generate code in the same efficient way as a Pascal compiler +-(word instructions instead of byte instructions). +- +-This is not allowed in the case of the "strcmp" call: Here, the addresses are +-formal procedure parameters, and no assumptions can be made about the length +-or alignment of the strings. Any such assumptions would indicate an incorrect +-implementation. They might work for Dhrystone, where the strings are in fact +-word-aligned with typical compilers, but other programs would deliver +-incorrect results. +- +-So, for an apple-to-apple comparison between processors, and not between +-several possible (legal or illegal) degrees of compiler optimization, one +-should check that the systems are comparable with respect to the following +-three points: +- +- (1) String functions in assembly language vs. in C +- +- Frequently used functions such as the string functions can and should be +- written in assembly language, and all serious C language systems known +- to me do this. (I list this point for completeness only.) Note that +- processors with an instruction that checks a word for a null byte (such +- as AMD's 29000 and Intel's 80960) have an advantage here. (This +- advantage decreases relatively if optimization (3) is applied.) Due to +- the length of the strings involved in Dhrystone, this advantage may be +- considered too high in perspective, but it is certainly legal to use +- such instructions - after all, these situations are what they were +- invented for. +- +- (2) String function code inline vs. as library functions. +- +- ANSI C has created a new situation, compared with the older +- Kernighan/Ritchie C. In the original C, the definition of the string +- function was not part of the language. Now it is, and inlining is +- explicitly allowed. I probably should have stated more clearly in my +- SIGPLAN Notices paper that the rule "No procedure inlining for +- Dhrystone" referred to the user level procedures only and not to the +- library routines. +- +- (3) Fixed-length and alignment assumptions for the strings +- +- Compilers should be allowed to optimize in these cases if (and only if) +- it is safe to do so. For Dhrystone, this is the "strcpy" statement, but +- not the "strcmp" statement (unless, of course, the "strcmp" code +- explicitly checks the alignment at execution time and branches +- accordingly). A "Dhrystone switch" for the compiler that causes the +- generation of code that may not work under certain circumstances is +- certainly inappropriate for comparisons. It has been reported in Usenet +- that some C compilers provide such a compiler option; since I don't have +- access to all C compilers involved, I cannot verify this. +- +- If the fixed-length and word-alignment assumption can be used, a wide +- bus that permits fast multi-word load instructions certainly does help; +- however, this fact by itself should not make a really big difference. +- +-A check of these points - something that is necessary for a thorough +-evaluation and comparison of the Dhrystone performance claims - requires +-object code listings as well as listings for the string functions (strcpy, +-strcmp) that are possibly called by the program. +- +-I don't pretend that Dhrystone is a perfect tool to measure the integer +-performance of microprocessors. The more it is used and discussed, the more I +-myself learn about aspects that I hadn't noticed yet when I wrote the program. +-And of course, the very success of a benchmark program is a danger in that +-people may tune their compilers and/or hardware to it, and with this action +-make it less useful. +- +-Whetstone and Linpack have their critical points also: The Whetstone rating +-depends heavily on the speed of the mathematical functions (sine, sqrt, ...), +-and Linpack is sensitive to data alignment for some cache configurations. +- +-Introduction of a standard set of public domain benchmark software (something +-the SPEC effort attempts) is certainly a worthwhile thing. In the meantime, +-people will continue to use whatever is available and widely distributed, and +-Dhrystone ratings are probably still better than MIPS ratings if these are - +-as often in industry - based on no reproducible derivation. However, any +-serious performance evaluation requires more than just a comparison of raw +-numbers; one has to make sure that the numbers have been obtained in a +-comparable way. +- +//GO.SYSIN DD VARIATIONS +echo dhry.h 1>&2 +sed >dhry.h <<'//GO.SYSIN DD dhry.h' 's/^-//' +-/* +- **************************************************************************** +- * +- * "DHRYSTONE" Benchmark Program +- * ----------------------------- +- * +- * Version: C, Version 2.1 +- * +- * File: dhry.h (part 1 of 3) +- * +- * Date: May 25, 1988 +- * +- * Author: Reinhold P. Weicker +- * Siemens AG, AUT E 51 +- * Postfach 3220 +- * 8520 Erlangen +- * Germany (West) +- * Phone: [+49]-9131-7-20330 +- * (8-17 Central European Time) +- * Usenet: ..!mcsun!unido!estevax!weicker +- * +- * Original Version (in Ada) published in +- * "Communications of the ACM" vol. 27., no. 10 (Oct. 1984), +- * pp. 1013 - 1030, together with the statistics +- * on which the distribution of statements etc. is based. +- * +- * In this C version, the following C library functions are used: +- * - strcpy, strcmp (inside the measurement loop) +- * - printf, scanf (outside the measurement loop) +- * In addition, Berkeley UNIX system calls "times ()" or "time ()" +- * are used for execution time measurement. For measurements +- * on other systems, these calls have to be changed. +- * +- * Collection of Results: +- * Reinhold Weicker (address see above) and +- * +- * Rick Richardson +- * PC Research. Inc. +- * 94 Apple Orchard Drive +- * Tinton Falls, NJ 07724 +- * Phone: (201) 389-8963 (9-17 EST) +- * Usenet: ...!uunet!pcrat!rick +- * +- * Please send results to Rick Richardson and/or Reinhold Weicker. +- * Complete information should be given on hardware and software used. +- * Hardware information includes: Machine type, CPU, type and size +- * of caches; for microprocessors: clock frequency, memory speed +- * (number of wait states). +- * Software information includes: Compiler (and runtime library) +- * manufacturer and version, compilation switches, OS version. +- * The Operating System version may give an indication about the +- * compiler; Dhrystone itself performs no OS calls in the measurement loop. +- * +- * The complete output generated by the program should be mailed +- * such that at least some checks for correctness can be made. +- * +- *************************************************************************** +- * +- * History: This version C/2.1 has been made for two reasons: +- * +- * 1) There is an obvious need for a common C version of +- * Dhrystone, since C is at present the most popular system +- * programming language for the class of processors +- * (microcomputers, minicomputers) where Dhrystone is used most. +- * There should be, as far as possible, only one C version of +- * Dhrystone such that results can be compared without +- * restrictions. In the past, the C versions distributed +- * by Rick Richardson (Version 1.1) and by Reinhold Weicker +- * had small (though not significant) differences. +- * +- * 2) As far as it is possible without changes to the Dhrystone +- * statistics, optimizing compilers should be prevented from +- * removing significant statements. +- * +- * This C version has been developed in cooperation with +- * Rick Richardson (Tinton Falls, NJ), it incorporates many +- * ideas from the "Version 1.1" distributed previously by +- * him over the UNIX network Usenet. +- * I also thank Chaim Benedelac (National Semiconductor), +- * David Ditzel (SUN), Earl Killian and John Mashey (MIPS), +- * Alan Smith and Rafael Saavedra-Barrera (UC at Berkeley) +- * for their help with comments on earlier versions of the +- * benchmark. +- * +- * Changes: In the initialization part, this version follows mostly +- * Rick Richardson's version distributed via Usenet, not the +- * version distributed earlier via floppy disk by Reinhold Weicker. +- * As a concession to older compilers, names have been made +- * unique within the first 8 characters. +- * Inside the measurement loop, this version follows the +- * version previously distributed by Reinhold Weicker. +- * +- * At several places in the benchmark, code has been added, +- * but within the measurement loop only in branches that +- * are not executed. The intention is that optimizing compilers +- * should be prevented from moving code out of the measurement +- * loop, or from removing code altogether. Since the statements +- * that are executed within the measurement loop have NOT been +- * changed, the numbers defining the "Dhrystone distribution" +- * (distribution of statements, operand types and locality) +- * still hold. Except for sophisticated optimizing compilers, +- * execution times for this version should be the same as +- * for previous versions. +- * +- * Since it has proven difficult to subtract the time for the +- * measurement loop overhead in a correct way, the loop check +- * has been made a part of the benchmark. This does have +- * an impact - though a very minor one - on the distribution +- * statistics which have been updated for this version. +- * +- * All changes within the measurement loop are described +- * and discussed in the companion paper "Rationale for +- * Dhrystone version 2". +- * +- * Because of the self-imposed limitation that the order and +- * distribution of the executed statements should not be +- * changed, there are still cases where optimizing compilers +- * may not generate code for some statements. To a certain +- * degree, this is unavoidable for small synthetic benchmarks. +- * Users of the benchmark are advised to check code listings +- * whether code is generated for all statements of Dhrystone. +- * +- * Version 2.1 is identical to version 2.0 distributed via +- * the UNIX network Usenet in March 1988 except that it corrects +- * some minor deficiencies that were found by users of version 2.0. +- * The only change within the measurement loop is that a +- * non-executed "else" part was added to the "if" statement in +- * Func_3, and a non-executed "else" part removed from Proc_3. +- * +- *************************************************************************** +- * +- * Defines: The following "Defines" are possible: +- * -DREG=register (default: Not defined) +- * As an approximation to what an average C programmer +- * might do, the "register" storage class is applied +- * (if enabled by -DREG=register) +- * - for local variables, if they are used (dynamically) +- * five or more times +- * - for parameters if they are used (dynamically) +- * six or more times +- * Note that an optimal "register" strategy is +- * compiler-dependent, and that "register" declarations +- * do not necessarily lead to faster execution. +- * -DNOSTRUCTASSIGN (default: Not defined) +- * Define if the C compiler does not support +- * assignment of structures. +- * -DNOENUMS (default: Not defined) +- * Define if the C compiler does not support +- * enumeration types. +- * -DTIMES (default) +- * -DTIME +- * The "times" function of UNIX (returning process times) +- * or the "time" function (returning wallclock time) +- * is used for measurement. +- * For single user machines, "time ()" is adequate. For +- * multi-user machines where you cannot get single-user +- * access, use the "times ()" function. If you have +- * neither, use a stopwatch in the dead of night. +- * "printf"s are provided marking the points "Start Timer" +- * and "Stop Timer". DO NOT use the UNIX "time(1)" +- * command, as this will measure the total time to +- * run this program, which will (erroneously) include +- * the time to allocate storage (malloc) and to perform +- * the initialization. +- * -DHZ=nnn +- * In Berkeley UNIX, the function "times" returns process +- * time in 1/HZ seconds, with HZ = 60 for most systems. +- * CHECK YOUR SYSTEM DESCRIPTION BEFORE YOU JUST APPLY +- * A VALUE. +- * +- *************************************************************************** +- * +- * Compilation model and measurement (IMPORTANT): +- * +- * This C version of Dhrystone consists of three files: +- * - dhry.h (this file, containing global definitions and comments) +- * - dhry_1.c (containing the code corresponding to Ada package Pack_1) +- * - dhry_2.c (containing the code corresponding to Ada package Pack_2) +- * +- * The following "ground rules" apply for measurements: +- * - Separate compilation +- * - No procedure merging +- * - Otherwise, compiler optimizations are allowed but should be indicated +- * - Default results are those without register declarations +- * See the companion paper "Rationale for Dhrystone Version 2" for a more +- * detailed discussion of these ground rules. +- * +- * For 16-Bit processors (e.g. 80186, 80286), times for all compilation +- * models ("small", "medium", "large" etc.) should be given if possible, +- * together with a definition of these models for the compiler system used. +- * +- ************************************************************************** +- * +- * Dhrystone (C version) statistics: +- * +- * [Comment from the first distribution, updated for version 2. +- * Note that because of language differences, the numbers are slightly +- * different from the Ada version.] +- * +- * The following program contains statements of a high level programming +- * language (here: C) in a distribution considered representative: +- * +- * assignments 52 (51.0 %) +- * control statements 33 (32.4 %) +- * procedure, function calls 17 (16.7 %) +- * +- * 103 statements are dynamically executed. The program is balanced with +- * respect to the three aspects: +- * +- * - statement type +- * - operand type +- * - operand locality +- * operand global, local, parameter, or constant. +- * +- * The combination of these three aspects is balanced only approximately. +- * +- * 1. Statement Type: +- * ----------------- number +- * +- * V1 = V2 9 +- * (incl. V1 = F(..) +- * V = Constant 12 +- * Assignment, 7 +- * with array element +- * Assignment, 6 +- * with record component +- * -- +- * 34 34 +- * +- * X = Y +|-|"&&"|"|" Z 5 +- * X = Y +|-|"==" Constant 6 +- * X = X +|- 1 3 +- * X = Y *|/ Z 2 +- * X = Expression, 1 +- * two operators +- * X = Expression, 1 +- * three operators +- * -- +- * 18 18 +- * +- * if .... 14 +- * with "else" 7 +- * without "else" 7 +- * executed 3 +- * not executed 4 +- * for ... 7 | counted every time +- * while ... 4 | the loop condition +- * do ... while 1 | is evaluated +- * switch ... 1 +- * break 1 +- * declaration with 1 +- * initialization +- * -- +- * 34 34 +- * +- * P (...) procedure call 11 +- * user procedure 10 +- * library procedure 1 +- * X = F (...) +- * function call 6 +- * user function 5 +- * library function 1 +- * -- +- * 17 17 +- * --- +- * 103 +- * +- * The average number of parameters in procedure or function calls +- * is 1.82 (not counting the function values as implicit parameters). +- * +- * +- * 2. Operators +- * ------------ +- * number approximate +- * percentage +- * +- * Arithmetic 32 50.8 +- * +- * + 21 33.3 +- * - 7 11.1 +- * * 3 4.8 +- * / (int div) 1 1.6 +- * +- * Comparison 27 42.8 +- * +- * == 9 14.3 +- * /= 4 6.3 +- * > 1 1.6 +- * < 3 4.8 +- * >= 1 1.6 +- * <= 9 14.3 +- * +- * Logic 4 6.3 +- * +- * && (AND-THEN) 1 1.6 +- * | (OR) 1 1.6 +- * ! (NOT) 2 3.2 +- * +- * -- ----- +- * 63 100.1 +- * +- * +- * 3. Operand Type (counted once per operand reference): +- * --------------- +- * number approximate +- * percentage +- * +- * Integer 175 72.3 % +- * Character 45 18.6 % +- * Pointer 12 5.0 % +- * String30 6 2.5 % +- * Array 2 0.8 % +- * Record 2 0.8 % +- * --- ------- +- * 242 100.0 % +- * +- * When there is an access path leading to the final operand (e.g. a record +- * component), only the final data type on the access path is counted. +- * +- * +- * 4. Operand Locality: +- * ------------------- +- * number approximate +- * percentage +- * +- * local variable 114 47.1 % +- * global variable 22 9.1 % +- * parameter 45 18.6 % +- * value 23 9.5 % +- * reference 22 9.1 % +- * function result 6 2.5 % +- * constant 55 22.7 % +- * --- ------- +- * 242 100.0 % +- * +- * +- * The program does not compute anything meaningful, but it is syntactically +- * and semantically correct. All variables have a value assigned to them +- * before they are used as a source operand. +- * +- * There has been no explicit effort to account for the effects of a +- * cache, or to balance the use of long or short displacements for code or +- * data. +- * +- *************************************************************************** +- */ +- +-/* Compiler and system dependent definitions: */ +- +-#ifndef TIME +-#define TIMES +-#endif +- /* Use times(2) time function unless */ +- /* explicitly defined otherwise */ +- +-#ifdef TIMES +-#include +-#include +- /* for "times" */ +-#endif +- +-#define Mic_secs_Per_Second 1000000.0 +- /* Berkeley UNIX C returns process times in seconds/HZ */ +- +-#ifdef NOSTRUCTASSIGN +-#define structassign(d, s) memcpy(&(d), &(s), sizeof(d)) +-#else +-#define structassign(d, s) d = s +-#endif +- +-#ifdef NOENUM +-#define Ident_1 0 +-#define Ident_2 1 +-#define Ident_3 2 +-#define Ident_4 3 +-#define Ident_5 4 +- typedef int Enumeration; +-#else +- typedef enum {Ident_1, Ident_2, Ident_3, Ident_4, Ident_5} +- Enumeration; +-#endif +- /* for boolean and enumeration types in Ada, Pascal */ +- +-/* General definitions: */ +- +-#include +- /* for strcpy, strcmp */ +- +-#define Null 0 +- /* Value of a Null pointer */ +-#define true 1 +-#define false 0 +- +-typedef int One_Thirty; +-typedef int One_Fifty; +-typedef char Capital_Letter; +-typedef int Boolean; +-typedef char Str_30 [31]; +-typedef int Arr_1_Dim [50]; +-typedef int Arr_2_Dim [50] [50]; +- +-typedef struct record +- { +- struct record *Ptr_Comp; +- Enumeration Discr; +- union { +- struct { +- Enumeration Enum_Comp; +- int Int_Comp; +- char Str_Comp [31]; +- } var_1; +- struct { +- Enumeration E_Comp_2; +- char Str_2_Comp [31]; +- } var_2; +- struct { +- char Ch_1_Comp; +- char Ch_2_Comp; +- } var_3; +- } variant; +- } Rec_Type, *Rec_Pointer; +- +- +//GO.SYSIN DD dhry.h +echo dhry_1.c 1>&2 +sed >dhry_1.c <<'//GO.SYSIN DD dhry_1.c' 's/^-//' +-/* +- **************************************************************************** +- * +- * "DHRYSTONE" Benchmark Program +- * ----------------------------- +- * +- * Version: C, Version 2.1 +- * +- * File: dhry_1.c (part 2 of 3) +- * +- * Date: May 25, 1988 +- * +- * Author: Reinhold P. Weicker +- * +- **************************************************************************** +- */ +- +-#include "dhry.h" +- +-/* Global Variables: */ +- +-Rec_Pointer Ptr_Glob, +- Next_Ptr_Glob; +-int Int_Glob; +-Boolean Bool_Glob; +-char Ch_1_Glob, +- Ch_2_Glob; +-int Arr_1_Glob [50]; +-int Arr_2_Glob [50] [50]; +- +-extern char *malloc (); +-Enumeration Func_1 (); +- /* forward declaration necessary since Enumeration may not simply be int */ +- +-#ifndef REG +- Boolean Reg = false; +-#define REG +- /* REG becomes defined as empty */ +- /* i.e. no register variables */ +-#else +- Boolean Reg = true; +-#endif +- +-/* variables for time measurement: */ +- +-#ifdef TIMES +-struct tms time_info; +-extern int times (); +- /* see library function "times" */ +-#define Too_Small_Time 120 +- /* Measurements should last at least about 2 seconds */ +-#endif +-#ifdef TIME +-extern long time(); +- /* see library function "time" */ +-#define Too_Small_Time 2 +- /* Measurements should last at least 2 seconds */ +-#endif +- +-long Begin_Time, +- End_Time, +- User_Time; +-float Microseconds, +- Dhrystones_Per_Second; +- +-/* end of variables for time measurement */ +- +- +-main () +-/*****/ +- +- /* main program, corresponds to procedures */ +- /* Main and Proc_0 in the Ada version */ +-{ +- One_Fifty Int_1_Loc; +- REG One_Fifty Int_2_Loc; +- One_Fifty Int_3_Loc; +- REG char Ch_Index; +- Enumeration Enum_Loc; +- Str_30 Str_1_Loc; +- Str_30 Str_2_Loc; +- REG int Run_Index; +- REG int Number_Of_Runs; +- +- /* Initializations */ +- +- Next_Ptr_Glob = (Rec_Pointer) malloc (sizeof (Rec_Type)); +- Ptr_Glob = (Rec_Pointer) malloc (sizeof (Rec_Type)); +- +- Ptr_Glob->Ptr_Comp = Next_Ptr_Glob; +- Ptr_Glob->Discr = Ident_1; +- Ptr_Glob->variant.var_1.Enum_Comp = Ident_3; +- Ptr_Glob->variant.var_1.Int_Comp = 40; +- strcpy (Ptr_Glob->variant.var_1.Str_Comp, +- "DHRYSTONE PROGRAM, SOME STRING"); +- strcpy (Str_1_Loc, "DHRYSTONE PROGRAM, 1'ST STRING"); +- +- Arr_2_Glob [8][7] = 10; +- /* Was missing in published program. Without this statement, */ +- /* Arr_2_Glob [8][7] would have an undefined value. */ +- /* Warning: With 16-Bit processors and Number_Of_Runs > 32000, */ +- /* overflow may occur for this array element. */ +- +- printf ("\n"); +- printf ("Dhrystone Benchmark, Version 2.1 (Language: C)\n"); +- printf ("\n"); +- if (Reg) +- { +- printf ("Program compiled with 'register' attribute\n"); +- printf ("\n"); +- } +- else +- { +- printf ("Program compiled without 'register' attribute\n"); +- printf ("\n"); +- } +- printf ("Please give the number of runs through the benchmark: "); +- { +- int n; +- scanf ("%d", &n); +- Number_Of_Runs = n; +- } +- printf ("\n"); +- +- printf ("Execution starts, %d runs through Dhrystone\n", Number_Of_Runs); +- +- /***************/ +- /* Start timer */ +- /***************/ +- +-#ifdef TIMES +- times (&time_info); +- Begin_Time = (long) time_info.tms_utime; +-#endif +-#ifdef TIME +- Begin_Time = time ( (long *) 0); +-#endif +- +- for (Run_Index = 1; Run_Index <= Number_Of_Runs; ++Run_Index) +- { +- +- Proc_5(); +- Proc_4(); +- /* Ch_1_Glob == 'A', Ch_2_Glob == 'B', Bool_Glob == true */ +- Int_1_Loc = 2; +- Int_2_Loc = 3; +- strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 2'ND STRING"); +- Enum_Loc = Ident_2; +- Bool_Glob = ! Func_2 (Str_1_Loc, Str_2_Loc); +- /* Bool_Glob == 1 */ +- while (Int_1_Loc < Int_2_Loc) /* loop body executed once */ +- { +- Int_3_Loc = 5 * Int_1_Loc - Int_2_Loc; +- /* Int_3_Loc == 7 */ +- Proc_7 (Int_1_Loc, Int_2_Loc, &Int_3_Loc); +- /* Int_3_Loc == 7 */ +- Int_1_Loc += 1; +- } /* while */ +- /* Int_1_Loc == 3, Int_2_Loc == 3, Int_3_Loc == 7 */ +- Proc_8 (Arr_1_Glob, Arr_2_Glob, Int_1_Loc, Int_3_Loc); +- /* Int_Glob == 5 */ +- Proc_1 (Ptr_Glob); +- for (Ch_Index = 'A'; Ch_Index <= Ch_2_Glob; ++Ch_Index) +- /* loop body executed twice */ +- { +- if (Enum_Loc == Func_1 (Ch_Index, 'C')) +- /* then, not executed */ +- { +- Proc_6 (Ident_1, &Enum_Loc); +- strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 3'RD STRING"); +- Int_2_Loc = Run_Index; +- Int_Glob = Run_Index; +- } +- } +- /* Int_1_Loc == 3, Int_2_Loc == 3, Int_3_Loc == 7 */ +- Int_2_Loc = Int_2_Loc * Int_1_Loc; +- Int_1_Loc = Int_2_Loc / Int_3_Loc; +- Int_2_Loc = 7 * (Int_2_Loc - Int_3_Loc) - Int_1_Loc; +- /* Int_1_Loc == 1, Int_2_Loc == 13, Int_3_Loc == 7 */ +- Proc_2 (&Int_1_Loc); +- /* Int_1_Loc == 5 */ +- +- } /* loop "for Run_Index" */ +- +- /**************/ +- /* Stop timer */ +- /**************/ +- +-#ifdef TIMES +- times (&time_info); +- End_Time = (long) time_info.tms_utime; +-#endif +-#ifdef TIME +- End_Time = time ( (long *) 0); +-#endif +- +- printf ("Execution ends\n"); +- printf ("\n"); +- printf ("Final values of the variables used in the benchmark:\n"); +- printf ("\n"); +- printf ("Int_Glob: %d\n", Int_Glob); +- printf (" should be: %d\n", 5); +- printf ("Bool_Glob: %d\n", Bool_Glob); +- printf (" should be: %d\n", 1); +- printf ("Ch_1_Glob: %c\n", Ch_1_Glob); +- printf (" should be: %c\n", 'A'); +- printf ("Ch_2_Glob: %c\n", Ch_2_Glob); +- printf (" should be: %c\n", 'B'); +- printf ("Arr_1_Glob[8]: %d\n", Arr_1_Glob[8]); +- printf (" should be: %d\n", 7); +- printf ("Arr_2_Glob[8][7]: %d\n", Arr_2_Glob[8][7]); +- printf (" should be: Number_Of_Runs + 10\n"); +- printf ("Ptr_Glob->\n"); +- printf (" Ptr_Comp: %d\n", (int) Ptr_Glob->Ptr_Comp); +- printf (" should be: (implementation-dependent)\n"); +- printf (" Discr: %d\n", Ptr_Glob->Discr); +- printf (" should be: %d\n", 0); +- printf (" Enum_Comp: %d\n", Ptr_Glob->variant.var_1.Enum_Comp); +- printf (" should be: %d\n", 2); +- printf (" Int_Comp: %d\n", Ptr_Glob->variant.var_1.Int_Comp); +- printf (" should be: %d\n", 17); +- printf (" Str_Comp: %s\n", Ptr_Glob->variant.var_1.Str_Comp); +- printf (" should be: DHRYSTONE PROGRAM, SOME STRING\n"); +- printf ("Next_Ptr_Glob->\n"); +- printf (" Ptr_Comp: %d\n", (int) Next_Ptr_Glob->Ptr_Comp); +- printf (" should be: (implementation-dependent), same as above\n"); +- printf (" Discr: %d\n", Next_Ptr_Glob->Discr); +- printf (" should be: %d\n", 0); +- printf (" Enum_Comp: %d\n", Next_Ptr_Glob->variant.var_1.Enum_Comp); +- printf (" should be: %d\n", 1); +- printf (" Int_Comp: %d\n", Next_Ptr_Glob->variant.var_1.Int_Comp); +- printf (" should be: %d\n", 18); +- printf (" Str_Comp: %s\n", +- Next_Ptr_Glob->variant.var_1.Str_Comp); +- printf (" should be: DHRYSTONE PROGRAM, SOME STRING\n"); +- printf ("Int_1_Loc: %d\n", Int_1_Loc); +- printf (" should be: %d\n", 5); +- printf ("Int_2_Loc: %d\n", Int_2_Loc); +- printf (" should be: %d\n", 13); +- printf ("Int_3_Loc: %d\n", Int_3_Loc); +- printf (" should be: %d\n", 7); +- printf ("Enum_Loc: %d\n", Enum_Loc); +- printf (" should be: %d\n", 1); +- printf ("Str_1_Loc: %s\n", Str_1_Loc); +- printf (" should be: DHRYSTONE PROGRAM, 1'ST STRING\n"); +- printf ("Str_2_Loc: %s\n", Str_2_Loc); +- printf (" should be: DHRYSTONE PROGRAM, 2'ND STRING\n"); +- printf ("\n"); +- +- User_Time = End_Time - Begin_Time; +- +- if (User_Time < Too_Small_Time) +- { +- printf ("Measured time too small to obtain meaningful results\n"); +- printf ("Please increase number of runs\n"); +- printf ("\n"); +- } +- else +- { +-#ifdef TIME +- Microseconds = (float) User_Time * Mic_secs_Per_Second +- / (float) Number_Of_Runs; +- Dhrystones_Per_Second = (float) Number_Of_Runs / (float) User_Time; +-#else +- Microseconds = (float) User_Time * Mic_secs_Per_Second +- / ((float) HZ * ((float) Number_Of_Runs)); +- Dhrystones_Per_Second = ((float) HZ * (float) Number_Of_Runs) +- / (float) User_Time; +-#endif +- printf ("Microseconds for one run through Dhrystone: "); +- printf ("%6.1f \n", Microseconds); +- printf ("Dhrystones per Second: "); +- printf ("%6.1f \n", Dhrystones_Per_Second); +- printf ("\n"); +- } +- +-} +- +- +-Proc_1 (Ptr_Val_Par) +-/******************/ +- +-REG Rec_Pointer Ptr_Val_Par; +- /* executed once */ +-{ +- REG Rec_Pointer Next_Record = Ptr_Val_Par->Ptr_Comp; +- /* == Ptr_Glob_Next */ +- /* Local variable, initialized with Ptr_Val_Par->Ptr_Comp, */ +- /* corresponds to "rename" in Ada, "with" in Pascal */ +- +- structassign (*Ptr_Val_Par->Ptr_Comp, *Ptr_Glob); +- Ptr_Val_Par->variant.var_1.Int_Comp = 5; +- Next_Record->variant.var_1.Int_Comp +- = Ptr_Val_Par->variant.var_1.Int_Comp; +- Next_Record->Ptr_Comp = Ptr_Val_Par->Ptr_Comp; +- Proc_3 (&Next_Record->Ptr_Comp); +- /* Ptr_Val_Par->Ptr_Comp->Ptr_Comp +- == Ptr_Glob->Ptr_Comp */ +- if (Next_Record->Discr == Ident_1) +- /* then, executed */ +- { +- Next_Record->variant.var_1.Int_Comp = 6; +- Proc_6 (Ptr_Val_Par->variant.var_1.Enum_Comp, +- &Next_Record->variant.var_1.Enum_Comp); +- Next_Record->Ptr_Comp = Ptr_Glob->Ptr_Comp; +- Proc_7 (Next_Record->variant.var_1.Int_Comp, 10, +- &Next_Record->variant.var_1.Int_Comp); +- } +- else /* not executed */ +- structassign (*Ptr_Val_Par, *Ptr_Val_Par->Ptr_Comp); +-} /* Proc_1 */ +- +- +-Proc_2 (Int_Par_Ref) +-/******************/ +- /* executed once */ +- /* *Int_Par_Ref == 1, becomes 4 */ +- +-One_Fifty *Int_Par_Ref; +-{ +- One_Fifty Int_Loc; +- Enumeration Enum_Loc; +- +- Int_Loc = *Int_Par_Ref + 10; +- do /* executed once */ +- if (Ch_1_Glob == 'A') +- /* then, executed */ +- { +- Int_Loc -= 1; +- *Int_Par_Ref = Int_Loc - Int_Glob; +- Enum_Loc = Ident_1; +- } /* if */ +- while (Enum_Loc != Ident_1); /* true */ +-} /* Proc_2 */ +- +- +-Proc_3 (Ptr_Ref_Par) +-/******************/ +- /* executed once */ +- /* Ptr_Ref_Par becomes Ptr_Glob */ +- +-Rec_Pointer *Ptr_Ref_Par; +- +-{ +- if (Ptr_Glob != Null) +- /* then, executed */ +- *Ptr_Ref_Par = Ptr_Glob->Ptr_Comp; +- Proc_7 (10, Int_Glob, &Ptr_Glob->variant.var_1.Int_Comp); +-} /* Proc_3 */ +- +- +-Proc_4 () /* without parameters */ +-/*******/ +- /* executed once */ +-{ +- Boolean Bool_Loc; +- +- Bool_Loc = Ch_1_Glob == 'A'; +- Bool_Glob = Bool_Loc | Bool_Glob; +- Ch_2_Glob = 'B'; +-} /* Proc_4 */ +- +- +-Proc_5 () /* without parameters */ +-/*******/ +- /* executed once */ +-{ +- Ch_1_Glob = 'A'; +- Bool_Glob = false; +-} /* Proc_5 */ +- +- +- /* Procedure for the assignment of structures, */ +- /* if the C compiler doesn't support this feature */ +-#ifdef NOSTRUCTASSIGN +-memcpy (d, s, l) +-register char *d; +-register char *s; +-register int l; +-{ +- while (l--) *d++ = *s++; +-} +-#endif +- +- +//GO.SYSIN DD dhry_1.c +echo dhry_2.c 1>&2 +sed >dhry_2.c <<'//GO.SYSIN DD dhry_2.c' 's/^-//' +-/* +- **************************************************************************** +- * +- * "DHRYSTONE" Benchmark Program +- * ----------------------------- +- * +- * Version: C, Version 2.1 +- * +- * File: dhry_2.c (part 3 of 3) +- * +- * Date: May 25, 1988 +- * +- * Author: Reinhold P. Weicker +- * +- **************************************************************************** +- */ +- +-#include "dhry.h" +- +-#ifndef REG +-#define REG +- /* REG becomes defined as empty */ +- /* i.e. no register variables */ +-#endif +- +-extern int Int_Glob; +-extern char Ch_1_Glob; +- +- +-Proc_6 (Enum_Val_Par, Enum_Ref_Par) +-/*********************************/ +- /* executed once */ +- /* Enum_Val_Par == Ident_3, Enum_Ref_Par becomes Ident_2 */ +- +-Enumeration Enum_Val_Par; +-Enumeration *Enum_Ref_Par; +-{ +- *Enum_Ref_Par = Enum_Val_Par; +- if (! Func_3 (Enum_Val_Par)) +- /* then, not executed */ +- *Enum_Ref_Par = Ident_4; +- switch (Enum_Val_Par) +- { +- case Ident_1: +- *Enum_Ref_Par = Ident_1; +- break; +- case Ident_2: +- if (Int_Glob > 100) +- /* then */ +- *Enum_Ref_Par = Ident_1; +- else *Enum_Ref_Par = Ident_4; +- break; +- case Ident_3: /* executed */ +- *Enum_Ref_Par = Ident_2; +- break; +- case Ident_4: break; +- case Ident_5: +- *Enum_Ref_Par = Ident_3; +- break; +- } /* switch */ +-} /* Proc_6 */ +- +- +-Proc_7 (Int_1_Par_Val, Int_2_Par_Val, Int_Par_Ref) +-/**********************************************/ +- /* executed three times */ +- /* first call: Int_1_Par_Val == 2, Int_2_Par_Val == 3, */ +- /* Int_Par_Ref becomes 7 */ +- /* second call: Int_1_Par_Val == 10, Int_2_Par_Val == 5, */ +- /* Int_Par_Ref becomes 17 */ +- /* third call: Int_1_Par_Val == 6, Int_2_Par_Val == 10, */ +- /* Int_Par_Ref becomes 18 */ +-One_Fifty Int_1_Par_Val; +-One_Fifty Int_2_Par_Val; +-One_Fifty *Int_Par_Ref; +-{ +- One_Fifty Int_Loc; +- +- Int_Loc = Int_1_Par_Val + 2; +- *Int_Par_Ref = Int_2_Par_Val + Int_Loc; +-} /* Proc_7 */ +- +- +-Proc_8 (Arr_1_Par_Ref, Arr_2_Par_Ref, Int_1_Par_Val, Int_2_Par_Val) +-/*********************************************************************/ +- /* executed once */ +- /* Int_Par_Val_1 == 3 */ +- /* Int_Par_Val_2 == 7 */ +-Arr_1_Dim Arr_1_Par_Ref; +-Arr_2_Dim Arr_2_Par_Ref; +-int Int_1_Par_Val; +-int Int_2_Par_Val; +-{ +- REG One_Fifty Int_Index; +- REG One_Fifty Int_Loc; +- +- Int_Loc = Int_1_Par_Val + 5; +- Arr_1_Par_Ref [Int_Loc] = Int_2_Par_Val; +- Arr_1_Par_Ref [Int_Loc+1] = Arr_1_Par_Ref [Int_Loc]; +- Arr_1_Par_Ref [Int_Loc+30] = Int_Loc; +- for (Int_Index = Int_Loc; Int_Index <= Int_Loc+1; ++Int_Index) +- Arr_2_Par_Ref [Int_Loc] [Int_Index] = Int_Loc; +- Arr_2_Par_Ref [Int_Loc] [Int_Loc-1] += 1; +- Arr_2_Par_Ref [Int_Loc+20] [Int_Loc] = Arr_1_Par_Ref [Int_Loc]; +- Int_Glob = 5; +-} /* Proc_8 */ +- +- +-Enumeration Func_1 (Ch_1_Par_Val, Ch_2_Par_Val) +-/*************************************************/ +- /* executed three times */ +- /* first call: Ch_1_Par_Val == 'H', Ch_2_Par_Val == 'R' */ +- /* second call: Ch_1_Par_Val == 'A', Ch_2_Par_Val == 'C' */ +- /* third call: Ch_1_Par_Val == 'B', Ch_2_Par_Val == 'C' */ +- +-Capital_Letter Ch_1_Par_Val; +-Capital_Letter Ch_2_Par_Val; +-{ +- Capital_Letter Ch_1_Loc; +- Capital_Letter Ch_2_Loc; +- +- Ch_1_Loc = Ch_1_Par_Val; +- Ch_2_Loc = Ch_1_Loc; +- if (Ch_2_Loc != Ch_2_Par_Val) +- /* then, executed */ +- return (Ident_1); +- else /* not executed */ +- { +- Ch_1_Glob = Ch_1_Loc; +- return (Ident_2); +- } +-} /* Func_1 */ +- +- +-Boolean Func_2 (Str_1_Par_Ref, Str_2_Par_Ref) +-/*************************************************/ +- /* executed once */ +- /* Str_1_Par_Ref == "DHRYSTONE PROGRAM, 1'ST STRING" */ +- /* Str_2_Par_Ref == "DHRYSTONE PROGRAM, 2'ND STRING" */ +- +-Str_30 Str_1_Par_Ref; +-Str_30 Str_2_Par_Ref; +-{ +- REG One_Thirty Int_Loc; +- Capital_Letter Ch_Loc; +- +- Int_Loc = 2; +- while (Int_Loc <= 2) /* loop body executed once */ +- if (Func_1 (Str_1_Par_Ref[Int_Loc], +- Str_2_Par_Ref[Int_Loc+1]) == Ident_1) +- /* then, executed */ +- { +- Ch_Loc = 'A'; +- Int_Loc += 1; +- } /* if, while */ +- if (Ch_Loc >= 'W' && Ch_Loc < 'Z') +- /* then, not executed */ +- Int_Loc = 7; +- if (Ch_Loc == 'R') +- /* then, not executed */ +- return (true); +- else /* executed */ +- { +- if (strcmp (Str_1_Par_Ref, Str_2_Par_Ref) > 0) +- /* then, not executed */ +- { +- Int_Loc += 7; +- Int_Glob = Int_Loc; +- return (true); +- } +- else /* executed */ +- return (false); +- } /* if Ch_Loc */ +-} /* Func_2 */ +- +- +-Boolean Func_3 (Enum_Par_Val) +-/***************************/ +- /* executed once */ +- /* Enum_Par_Val == Ident_3 */ +-Enumeration Enum_Par_Val; +-{ +- Enumeration Enum_Loc; +- +- Enum_Loc = Enum_Par_Val; +- if (Enum_Loc == Ident_3) +- /* then, executed */ +- return (true); +- else /* not executed */ +- return (false); +-} /* Func_3 */ +- +//GO.SYSIN DD dhry_2.c +echo dhry_c.dif 1>&2 +sed >dhry_c.dif <<'//GO.SYSIN DD dhry_c.dif' 's/^-//' +-7c7 +-< * Version: C, Version 2.1 +---- +-> * Version: C, Version 2.0 +-9c9 +-< * File: dhry.h (part 1 of 3) +---- +-> * File: dhry_global.h (part 1 of 3) +-11c11 +-< * Date: May 25, 1988 +---- +-> * Date: March 3, 1988 +-30c30 +-< * In addition, Berkeley UNIX system calls "times ()" or "time ()" +---- +-> * In addition, UNIX system calls "times ()" or "time ()" +-44c44 +-< * Please send results to Rick Richardson and/or Reinhold Weicker. +---- +-> * Please send results to Reinhold Weicker and/or Rick Richardson. +-59c59 +-< * History: This version C/2.1 has been made for two reasons: +---- +-> * History: This version C/2.0 has been made for two reasons: +-123,129d122 +-< * Version 2.1 is identical to version 2.0 distributed via +-< * the UNIX network Usenet in March 1988 except that it corrects +-< * some minor deficiencies that were found by users of version 2.0. +-< * The only change within the measurement loop is that a +-< * non-executed "else" part was added to the "if" statement in +-< * Func_3, and a non-executed "else" part removed from Proc_3. +-< * +-165,167c158,160 +-< * -DHZ=nnn +-< * In Berkeley UNIX, the function "times" returns process +-< * time in 1/HZ seconds, with HZ = 60 for most systems. +---- +-> * -DHZ=nnn (default: 60) +-> * The function "times" returns process times in +-> * 1/HZ seconds, with HZ = 60 for most systems. +-169c162 +-< * A VALUE. +---- +-> * THE DEFAULT VALUE. +-176,178c169,171 +-< * - dhry.h (this file, containing global definitions and comments) +-< * - dhry_1.c (containing the code corresponding to Ada package Pack_1) +-< * - dhry_2.c (containing the code corresponding to Ada package Pack_2) +---- +-> * - dhry_global.h (this file, containing global definitions and comments) +-> * - dhry_pack_1.c (containing the code corresponding to Ada package Pack_1) +-> * - dhry_pack_2.c (containing the code corresponding to Ada package Pack_2) +-350a344 +-> #ifndef TIMES +-353,354c347,354 +-< /* Use times(2) time function unless */ +-< /* explicitly defined otherwise */ +---- +-> #endif +-> /* Use "times" function for measurement */ +-> /* unless explicitly defined otherwise */ +-> #ifndef HZ +-> #define HZ 60 +-> #endif +-> /* Use HZ = 60 for "times" function */ +-> /* unless explicitly defined otherwise */ +-363c363 +-< /* Berkeley UNIX C returns process times in seconds/HZ */ +---- +-> /* UNIX C returns process times in seconds/HZ */ +-7c7 +-< * Version: C, Version 2.1 +---- +-> * Version: C, Version 2.0 +-9c9 +-< * File: dhry_1.c (part 2 of 3) +---- +-> * File: dhry_pack_1.c (part 2 of 3) +-11c11 +-< * Date: May 25, 1988 +---- +-> * Date: March 3, 1988 +-18c18 +-< #include "dhry.h" +---- +-> #include "dhry_global.h" +-50,51d49 +-< #define Too_Small_Time 120 +-< /* Measurements should last at least about 2 seconds */ +-55a54,55 +-> #endif +-> +-58d57 +-< #endif +-73a73 +-> +-84a85 +-> +-99,100c100,102 +-< /* Was missing in published program. Without this statement, */ +-< /* Arr_2_Glob [8][7] would have an undefined value. */ +---- +-> /* Was missing in published program. Without this */ +-> /* initialization, Arr_2_Glob [8][7] would have an */ +-> /* undefined value. */ +-105c107 +-< printf ("Dhrystone Benchmark, Version 2.1 (Language: C)\n"); +---- +-> printf ("Dhrystone Benchmark, Version 2.0 (Language: C)\n"); +-281c283 +-< /******************/ +---- +-> /**********************/ +-338c340 +-< /******************/ +---- +-> /**********************/ +-347a350,351 +-> else /* not executed */ +-> Int_Glob = 100; +-349a354 +-> +-7c7 +-< * Version: C, Version 2.1 +---- +-> * Version: C, Version 2.0 +-9c9 +-< * File: dhry_2.c (part 3 of 3) +---- +-> * File: dhry_pack_2.c (part 3 of 3) +-11c11 +-< * Date: May 25, 1988 +---- +-> * Date: March 3, 1988 +-18c18 +-< #include "dhry.h" +---- +-> #include "dhry_global.h" +-189,190d188 +-< else /* not executed */ +-< return (false); +//GO.SYSIN DD dhry_c.dif +echo submit.frm 1>&2 +sed >submit.frm <<'//GO.SYSIN DD submit.frm' 's/^-//' +-DHRYSTONE 2.1 BENCHMARK REPORTING FORM +-MANUF: +-MODEL: +-PROC: +-CLOCK: +-OS: +-OVERSION: +-COMPILER: +-CVERSION: +-OPTIONS: +-NOREG: +-REG: +-NOTES: +-DATE: +-SUBMITTER: +-CODESIZE: +-MAILTO: uunet!pcrat!dry2 +//GO.SYSIN DD submit.frm diff --git a/zpu/roadshow/roadshow/dhrystone/dhry.h b/zpu/roadshow/roadshow/dhrystone/dhry.h new file mode 100644 index 0000000..211c2e2 --- /dev/null +++ b/zpu/roadshow/roadshow/dhrystone/dhry.h @@ -0,0 +1,423 @@ +/* + **************************************************************************** + * + * "DHRYSTONE" Benchmark Program + * ----------------------------- + * + * Version: C, Version 2.1 + * + * File: dhry.h (part 1 of 3) + * + * Date: May 25, 1988 + * + * Author: Reinhold P. Weicker + * Siemens AG, AUT E 51 + * Postfach 3220 + * 8520 Erlangen + * Germany (West) + * Phone: [+49]-9131-7-20330 + * (8-17 Central European Time) + * Usenet: ..!mcsun!unido!estevax!weicker + * + * Original Version (in Ada) published in + * "Communications of the ACM" vol. 27., no. 10 (Oct. 1984), + * pp. 1013 - 1030, together with the statistics + * on which the distribution of statements etc. is based. + * + * In this C version, the following C library functions are used: + * - strcpy, strcmp (inside the measurement loop) + * - printf, scanf (outside the measurement loop) + * In addition, Berkeley UNIX system calls "times ()" or "time ()" + * are used for execution time measurement. For measurements + * on other systems, these calls have to be changed. + * + * Collection of Results: + * Reinhold Weicker (address see above) and + * + * Rick Richardson + * PC Research. Inc. + * 94 Apple Orchard Drive + * Tinton Falls, NJ 07724 + * Phone: (201) 389-8963 (9-17 EST) + * Usenet: ...!uunet!pcrat!rick + * + * Please send results to Rick Richardson and/or Reinhold Weicker. + * Complete information should be given on hardware and software used. + * Hardware information includes: Machine type, CPU, type and size + * of caches; for microprocessors: clock frequency, memory speed + * (number of wait states). + * Software information includes: Compiler (and runtime library) + * manufacturer and version, compilation switches, OS version. + * The Operating System version may give an indication about the + * compiler; Dhrystone itself performs no OS calls in the measurement loop. + * + * The complete output generated by the program should be mailed + * such that at least some checks for correctness can be made. + * + *************************************************************************** + * + * History: This version C/2.1 has been made for two reasons: + * + * 1) There is an obvious need for a common C version of + * Dhrystone, since C is at present the most popular system + * programming language for the class of processors + * (microcomputers, minicomputers) where Dhrystone is used most. + * There should be, as far as possible, only one C version of + * Dhrystone such that results can be compared without + * restrictions. In the past, the C versions distributed + * by Rick Richardson (Version 1.1) and by Reinhold Weicker + * had small (though not significant) differences. + * + * 2) As far as it is possible without changes to the Dhrystone + * statistics, optimizing compilers should be prevented from + * removing significant statements. + * + * This C version has been developed in cooperation with + * Rick Richardson (Tinton Falls, NJ), it incorporates many + * ideas from the "Version 1.1" distributed previously by + * him over the UNIX network Usenet. + * I also thank Chaim Benedelac (National Semiconductor), + * David Ditzel (SUN), Earl Killian and John Mashey (MIPS), + * Alan Smith and Rafael Saavedra-Barrera (UC at Berkeley) + * for their help with comments on earlier versions of the + * benchmark. + * + * Changes: In the initialization part, this version follows mostly + * Rick Richardson's version distributed via Usenet, not the + * version distributed earlier via floppy disk by Reinhold Weicker. + * As a concession to older compilers, names have been made + * unique within the first 8 characters. + * Inside the measurement loop, this version follows the + * version previously distributed by Reinhold Weicker. + * + * At several places in the benchmark, code has been added, + * but within the measurement loop only in branches that + * are not executed. The intention is that optimizing compilers + * should be prevented from moving code out of the measurement + * loop, or from removing code altogether. Since the statements + * that are executed within the measurement loop have NOT been + * changed, the numbers defining the "Dhrystone distribution" + * (distribution of statements, operand types and locality) + * still hold. Except for sophisticated optimizing compilers, + * execution times for this version should be the same as + * for previous versions. + * + * Since it has proven difficult to subtract the time for the + * measurement loop overhead in a correct way, the loop check + * has been made a part of the benchmark. This does have + * an impact - though a very minor one - on the distribution + * statistics which have been updated for this version. + * + * All changes within the measurement loop are described + * and discussed in the companion paper "Rationale for + * Dhrystone version 2". + * + * Because of the self-imposed limitation that the order and + * distribution of the executed statements should not be + * changed, there are still cases where optimizing compilers + * may not generate code for some statements. To a certain + * degree, this is unavoidable for small synthetic benchmarks. + * Users of the benchmark are advised to check code listings + * whether code is generated for all statements of Dhrystone. + * + * Version 2.1 is identical to version 2.0 distributed via + * the UNIX network Usenet in March 1988 except that it corrects + * some minor deficiencies that were found by users of version 2.0. + * The only change within the measurement loop is that a + * non-executed "else" part was added to the "if" statement in + * Func_3, and a non-executed "else" part removed from Proc_3. + * + *************************************************************************** + * + * Defines: The following "Defines" are possible: + * -DREG=register (default: Not defined) + * As an approximation to what an average C programmer + * might do, the "register" storage class is applied + * (if enabled by -DREG=register) + * - for local variables, if they are used (dynamically) + * five or more times + * - for parameters if they are used (dynamically) + * six or more times + * Note that an optimal "register" strategy is + * compiler-dependent, and that "register" declarations + * do not necessarily lead to faster execution. + * -DNOSTRUCTASSIGN (default: Not defined) + * Define if the C compiler does not support + * assignment of structures. + * -DNOENUMS (default: Not defined) + * Define if the C compiler does not support + * enumeration types. + * -DTIMES (default) + * -DTIME + * The "times" function of UNIX (returning process times) + * or the "time" function (returning wallclock time) + * is used for measurement. + * For single user machines, "time ()" is adequate. For + * multi-user machines where you cannot get single-user + * access, use the "times ()" function. If you have + * neither, use a stopwatch in the dead of night. + * "printf"s are provided marking the points "Start Timer" + * and "Stop Timer". DO NOT use the UNIX "time(1)" + * command, as this will measure the total time to + * run this program, which will (erroneously) include + * the time to allocate storage (malloc) and to perform + * the initialization. + * -DHZ=nnn + * In Berkeley UNIX, the function "times" returns process + * time in 1/HZ seconds, with HZ = 60 for most systems. + * CHECK YOUR SYSTEM DESCRIPTION BEFORE YOU JUST APPLY + * A VALUE. + * + *************************************************************************** + * + * Compilation model and measurement (IMPORTANT): + * + * This C version of Dhrystone consists of three files: + * - dhry.h (this file, containing global definitions and comments) + * - dhry_1.c (containing the code corresponding to Ada package Pack_1) + * - dhry_2.c (containing the code corresponding to Ada package Pack_2) + * + * The following "ground rules" apply for measurements: + * - Separate compilation + * - No procedure merging + * - Otherwise, compiler optimizations are allowed but should be indicated + * - Default results are those without register declarations + * See the companion paper "Rationale for Dhrystone Version 2" for a more + * detailed discussion of these ground rules. + * + * For 16-Bit processors (e.g. 80186, 80286), times for all compilation + * models ("small", "medium", "large" etc.) should be given if possible, + * together with a definition of these models for the compiler system used. + * + ************************************************************************** + * + * Dhrystone (C version) statistics: + * + * [Comment from the first distribution, updated for version 2. + * Note that because of language differences, the numbers are slightly + * different from the Ada version.] + * + * The following program contains statements of a high level programming + * language (here: C) in a distribution considered representative: + * + * assignments 52 (51.0 %) + * control statements 33 (32.4 %) + * procedure, function calls 17 (16.7 %) + * + * 103 statements are dynamically executed. The program is balanced with + * respect to the three aspects: + * + * - statement type + * - operand type + * - operand locality + * operand global, local, parameter, or constant. + * + * The combination of these three aspects is balanced only approximately. + * + * 1. Statement Type: + * ----------------- number + * + * V1 = V2 9 + * (incl. V1 = F(..) + * V = Constant 12 + * Assignment, 7 + * with array element + * Assignment, 6 + * with record component + * -- + * 34 34 + * + * X = Y +|-|"&&"|"|" Z 5 + * X = Y +|-|"==" Constant 6 + * X = X +|- 1 3 + * X = Y *|/ Z 2 + * X = Expression, 1 + * two operators + * X = Expression, 1 + * three operators + * -- + * 18 18 + * + * if .... 14 + * with "else" 7 + * without "else" 7 + * executed 3 + * not executed 4 + * for ... 7 | counted every time + * while ... 4 | the loop condition + * do ... while 1 | is evaluated + * switch ... 1 + * break 1 + * declaration with 1 + * initialization + * -- + * 34 34 + * + * P (...) procedure call 11 + * user procedure 10 + * library procedure 1 + * X = F (...) + * function call 6 + * user function 5 + * library function 1 + * -- + * 17 17 + * --- + * 103 + * + * The average number of parameters in procedure or function calls + * is 1.82 (not counting the function values as implicit parameters). + * + * + * 2. Operators + * ------------ + * number approximate + * percentage + * + * Arithmetic 32 50.8 + * + * + 21 33.3 + * - 7 11.1 + * * 3 4.8 + * / (int div) 1 1.6 + * + * Comparison 27 42.8 + * + * == 9 14.3 + * /= 4 6.3 + * > 1 1.6 + * < 3 4.8 + * >= 1 1.6 + * <= 9 14.3 + * + * Logic 4 6.3 + * + * && (AND-THEN) 1 1.6 + * | (OR) 1 1.6 + * ! (NOT) 2 3.2 + * + * -- ----- + * 63 100.1 + * + * + * 3. Operand Type (counted once per operand reference): + * --------------- + * number approximate + * percentage + * + * Integer 175 72.3 % + * Character 45 18.6 % + * Pointer 12 5.0 % + * String30 6 2.5 % + * Array 2 0.8 % + * Record 2 0.8 % + * --- ------- + * 242 100.0 % + * + * When there is an access path leading to the final operand (e.g. a record + * component), only the final data type on the access path is counted. + * + * + * 4. Operand Locality: + * ------------------- + * number approximate + * percentage + * + * local variable 114 47.1 % + * global variable 22 9.1 % + * parameter 45 18.6 % + * value 23 9.5 % + * reference 22 9.1 % + * function result 6 2.5 % + * constant 55 22.7 % + * --- ------- + * 242 100.0 % + * + * + * The program does not compute anything meaningful, but it is syntactically + * and semantically correct. All variables have a value assigned to them + * before they are used as a source operand. + * + * There has been no explicit effort to account for the effects of a + * cache, or to balance the use of long or short displacements for code or + * data. + * + *************************************************************************** + */ + +/* Compiler and system dependent definitions: */ + +#ifndef TIME +#define TIMES +#endif + /* Use times(2) time function unless */ + /* explicitly defined otherwise */ + +#ifdef TIMES +#include +#include + /* for "times" */ +#endif + +#define Mic_secs_Per_Second 1000000 + /* Berkeley UNIX C returns process times in seconds/HZ */ + +#ifdef NOSTRUCTASSIGN +#define structassign(d, s) memcpy(&(d), &(s), sizeof(d)) +#else +#define structassign(d, s) d = s +#endif + +#ifdef NOENUM +#define Ident_1 0 +#define Ident_2 1 +#define Ident_3 2 +#define Ident_4 3 +#define Ident_5 4 + typedef int Enumeration; +#else + typedef enum {Ident_1, Ident_2, Ident_3, Ident_4, Ident_5} + Enumeration; +#endif + /* for boolean and enumeration types in Ada, Pascal */ + +/* General definitions: */ + +#include + /* for strcpy, strcmp */ + +#define Null 0 + /* Value of a Null pointer */ +#define true 1 +#define false 0 + +typedef int One_Thirty; +typedef int One_Fifty; +typedef char Capital_Letter; +typedef int Boolean; +typedef char Str_30 [31]; +typedef int Arr_1_Dim [50]; +typedef int Arr_2_Dim [50] [50]; + +typedef struct record + { + struct record *Ptr_Comp; + Enumeration Discr; + union { + struct { + Enumeration Enum_Comp; + int Int_Comp; + char Str_Comp [31]; + } var_1; + struct { + Enumeration E_Comp_2; + char Str_2_Comp [31]; + } var_2; + struct { + char Ch_1_Comp; + char Ch_2_Comp; + } var_3; + } variant; + } Rec_Type, *Rec_Pointer; + + diff --git a/zpu/roadshow/roadshow/dhrystone/dhry_1.c b/zpu/roadshow/roadshow/dhrystone/dhry_1.c new file mode 100644 index 0000000..08a29b9 --- /dev/null +++ b/zpu/roadshow/roadshow/dhrystone/dhry_1.c @@ -0,0 +1,533 @@ +/* + **************************************************************************** + * + * "DHRYSTONE" Benchmark Program + * ----------------------------- + * + * Version: C, Version 2.1 + * + * File: dhry_1.c (part 2 of 3) + * + * Date: May 25, 1988 + * + * Author: Reinhold P. Weicker + * + **************************************************************************** + */ + +#include "dhry.h" +#include + +static int +_cvt(int val, char *buf, int radix, char *digits) +{ + char temp[80]; + char *cp = temp; + int length = 0; + + if (val == 0) { + /* Special case */ + *cp++ = '0'; + } else { + while (val) { + *cp++ = digits[val % radix]; + val /= radix; + } + } + while (cp != temp) { + *buf++ = *--cp; + length++; + } + *buf = '\0'; + return (length); +} + +#define is_digit(c) ((c >= '0') && (c <= '9')) + + +#ifndef TINY +static int +_vprintf(void (*putc)(char c, void **param), void **param, const char *fmt, va_list ap) +{ + char buf[sizeof(long long)*8]; + char c, sign, *cp=buf; + int left_prec, right_prec, zero_fill, pad, pad_on_right, + i, islong, islonglong; + long long val = 0; + int res = 0, length = 0; + + while ((c = *fmt++) != '\0') { + if (c == '%') { + c = *fmt++; + left_prec = right_prec = pad_on_right = islong = islonglong = 0; + sign = '\0'; + // Fetch value [numeric descriptors only] + switch (c) { + case 'd': + val = (long long)va_arg(ap, int); + if ((c == 'd') || (c == 'D')) { + if (val < 0) { + sign = '-'; + val = -val; + } + } else { + // Mask to unsigned, sized quantity + if (islong) { + val &= ((long long)1 << (sizeof(long) * 8)) - 1; + } else{ + val &= ((long long)1 << (sizeof(int) * 8)) - 1; + } + } + break; + default: + break; + } + // Process output + switch (c) { + case 'd': + switch (c) { + case 'd': + length = _cvt(val, buf, 10, "0123456789"); + break; + } + cp = buf; + break; + case 's': + cp = va_arg(ap, char *); + length = 0; + while (cp[length] != '\0') length++; + break; + case 'c': + c = va_arg(ap, int /*char*/); + (*putc)(c, param); + res++; + continue; + default: + (*putc)('%', param); + (*putc)(c, param); + res += 2; + continue; + } + while (length-- > 0) { + c = *cp++; + (*putc)(c, param); + res++; + } + } else { + (*putc)(c, param); + res++; + } + } + return (res); +} +#endif + +// Default wrapper function used by diag_printf +static void +_diag_write_char(char c, void **param) +{ + if (c=='\n') + { + outbyte('\r'); + } + outbyte(c); +} + +int +small_printf(const char *fmt, ...) +{ +#ifndef TINY + va_list ap; + int ret; + + va_start(ap, fmt); + ret = _vprintf(_diag_write_char, (void **)0, fmt, ap); + va_end(ap); + return (ret); +#else + return 0; +#endif +} + + + + +/* Global Variables: */ + +Rec_Pointer Ptr_Glob, + Next_Ptr_Glob; +int Int_Glob; +Boolean Bool_Glob; +char Ch_1_Glob, + Ch_2_Glob; +int Arr_1_Glob [50]; +int Arr_2_Glob [50] [50]; + +Enumeration Func_1 (); + /* forward declaration necessary since Enumeration may not simply be int */ + +#ifndef REG + Boolean Reg = false; +#define REG + /* REG becomes defined as empty */ + /* i.e. no register variables */ +#else + Boolean Reg = true; +#endif + +/* variables for time measurement: */ + +#ifdef TIMES +struct tms time_info; + /* see library function "times" */ +#define Too_Small_Time 120 + /* Measurements should last at least about 2 seconds */ +#endif +#ifdef TIME +extern long time(); + /* see library function "time" */ +#define Too_Small_Time 2 + /* Measurements should last at least 2 seconds */ +#endif + +long long Begin_Time, + End_Time, + User_Time; +long long Microseconds, + Dhrystones_Per_Second, + Vax_Mips; + +/* end of variables for time measurement */ + +int Number_Of_Runs = 50000; + +extern long long _readMicroseconds(); + + +int main () +/*****/ + + /* main program, corresponds to procedures */ + /* Main and Proc_0 in the Ada version */ +{ + One_Fifty Int_1_Loc; + REG One_Fifty Int_2_Loc; + One_Fifty Int_3_Loc; + REG char Ch_Index; + Enumeration Enum_Loc; + Str_30 Str_1_Loc; + Str_30 Str_2_Loc; + REG int Run_Index; + + /* Initializations */ + + Next_Ptr_Glob = (Rec_Pointer) malloc (sizeof (Rec_Type)); + Ptr_Glob = (Rec_Pointer) malloc (sizeof (Rec_Type)); + + Ptr_Glob->Ptr_Comp = Next_Ptr_Glob; + Ptr_Glob->Discr = Ident_1; + Ptr_Glob->variant.var_1.Enum_Comp = Ident_3; + Ptr_Glob->variant.var_1.Int_Comp = 40; + strcpy (Ptr_Glob->variant.var_1.Str_Comp, + "DHRYSTONE PROGRAM, SOME STRING"); + strcpy (Str_1_Loc, "DHRYSTONE PROGRAM, 1'ST STRING"); + + Arr_2_Glob [8][7] = 10; + /* Was missing in published program. Without this statement, */ + /* Arr_2_Glob [8][7] would have an undefined value. */ + /* Warning: With 16-Bit processors and Number_Of_Runs > 32000, */ + /* overflow may occur for this array element. */ + small_printf ("\n"); + small_printf ("Dhrystone Benchmark, Version 2.1 (Language: C)\n"); + small_printf ("\n"); + if (Reg) + { + small_printf ("Program compiled with 'register' attribute\n"); + small_printf ("\n"); + } + else + { + small_printf ("Program compiled without 'register' attribute\n"); + small_printf ("\n"); + } + Number_Of_Runs; + + small_printf ("Execution starts, %d runs through Dhrystone\n", Number_Of_Runs); + + /***************/ + /* Start timer */ + /***************/ + +#if 0 +#ifdef TIMES + times (&time_info); + Begin_Time = (long) time_info.tms_utime; +#endif +#ifdef TIME + Begin_Time = time ( (long *) 0); +#endif +#else + Begin_Time = _readMicroseconds(); +#endif + for (Run_Index = 1; Run_Index <= Number_Of_Runs; ++Run_Index) + { + + Proc_5(); + Proc_4(); + /* Ch_1_Glob == 'A', Ch_2_Glob == 'B', Bool_Glob == true */ + Int_1_Loc = 2; + Int_2_Loc = 3; + strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 2'ND STRING"); + Enum_Loc = Ident_2; + Bool_Glob = ! Func_2 (Str_1_Loc, Str_2_Loc); + /* Bool_Glob == 1 */ + while (Int_1_Loc < Int_2_Loc) /* loop body executed once */ + { + Int_3_Loc = 5 * Int_1_Loc - Int_2_Loc; + /* Int_3_Loc == 7 */ + Proc_7 (Int_1_Loc, Int_2_Loc, &Int_3_Loc); + /* Int_3_Loc == 7 */ + Int_1_Loc += 1; + } /* while */ + /* Int_1_Loc == 3, Int_2_Loc == 3, Int_3_Loc == 7 */ + Proc_8 (Arr_1_Glob, Arr_2_Glob, Int_1_Loc, Int_3_Loc); + /* Int_Glob == 5 */ + Proc_1 (Ptr_Glob); + for (Ch_Index = 'A'; Ch_Index <= Ch_2_Glob; ++Ch_Index) + /* loop body executed twice */ + { + if (Enum_Loc == Func_1 (Ch_Index, 'C')) + /* then, not executed */ + { + Proc_6 (Ident_1, &Enum_Loc); + strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 3'RD STRING"); + Int_2_Loc = Run_Index; + Int_Glob = Run_Index; + } + } + /* Int_1_Loc == 3, Int_2_Loc == 3, Int_3_Loc == 7 */ + Int_2_Loc = Int_2_Loc * Int_1_Loc; + Int_1_Loc = Int_2_Loc / Int_3_Loc; + Int_2_Loc = 7 * (Int_2_Loc - Int_3_Loc) - Int_1_Loc; + /* Int_1_Loc == 1, Int_2_Loc == 13, Int_3_Loc == 7 */ + Proc_2 (&Int_1_Loc); + /* Int_1_Loc == 5 */ + + } /* loop "for Run_Index" */ + + /**************/ + /* Stop timer */ + /**************/ + +#if 0 +#ifdef TIMES + times (&time_info); + End_Time = (long) time_info.tms_utime; +#endif +#ifdef TIME + End_Time = time ( (long *) 0); +#endif +#else + End_Time = _readMicroseconds(); +#endif + + small_printf ("Execution ends\n"); + small_printf ("\n"); + small_printf ("Final values of the variables used in the benchmark:\n"); + small_printf ("\n"); + small_printf ("Int_Glob: %d\n", Int_Glob); + small_printf (" should be: %d\n", 5); + small_printf ("Bool_Glob: %d\n", Bool_Glob); + small_printf (" should be: %d\n", 1); + small_printf ("Ch_1_Glob: %c\n", Ch_1_Glob); + small_printf (" should be: %c\n", 'A'); + small_printf ("Ch_2_Glob: %c\n", Ch_2_Glob); + small_printf (" should be: %c\n", 'B'); + small_printf ("Arr_1_Glob[8]: %d\n", Arr_1_Glob[8]); + small_printf (" should be: %d\n", 7); + small_printf ("Arr_2_Glob[8][7]: %d\n", Arr_2_Glob[8][7]); + small_printf (" should be: Number_Of_Runs + 10\n"); + small_printf ("Ptr_Glob->\n"); + small_printf (" Ptr_Comp: %d\n", (int) Ptr_Glob->Ptr_Comp); + small_printf (" should be: (implementation-dependent)\n"); + small_printf (" Discr: %d\n", Ptr_Glob->Discr); + small_printf (" should be: %d\n", 0); + small_printf (" Enum_Comp: %d\n", Ptr_Glob->variant.var_1.Enum_Comp); + small_printf (" should be: %d\n", 2); + small_printf (" Int_Comp: %d\n", Ptr_Glob->variant.var_1.Int_Comp); + small_printf (" should be: %d\n", 17); + small_printf (" Str_Comp: %s\n", Ptr_Glob->variant.var_1.Str_Comp); + small_printf (" should be: DHRYSTONE PROGRAM, SOME STRING\n"); + small_printf ("Next_Ptr_Glob->\n"); + small_printf (" Ptr_Comp: %d\n", (int) Next_Ptr_Glob->Ptr_Comp); + small_printf (" should be: (implementation-dependent), same as above\n"); + small_printf (" Discr: %d\n", Next_Ptr_Glob->Discr); + small_printf (" should be: %d\n", 0); + small_printf (" Enum_Comp: %d\n", Next_Ptr_Glob->variant.var_1.Enum_Comp); + small_printf (" should be: %d\n", 1); + small_printf (" Int_Comp: %d\n", Next_Ptr_Glob->variant.var_1.Int_Comp); + small_printf (" should be: %d\n", 18); + small_printf (" Str_Comp: %s\n", + Next_Ptr_Glob->variant.var_1.Str_Comp); + small_printf (" should be: DHRYSTONE PROGRAM, SOME STRING\n"); + small_printf ("Int_1_Loc: %d\n", Int_1_Loc); + small_printf (" should be: %d\n", 5); + small_printf ("Int_2_Loc: %d\n", Int_2_Loc); + small_printf (" should be: %d\n", 13); + small_printf ("Int_3_Loc: %d\n", Int_3_Loc); + small_printf (" should be: %d\n", 7); + small_printf ("Enum_Loc: %d\n", Enum_Loc); + small_printf (" should be: %d\n", 1); + small_printf ("Str_1_Loc: %s\n", Str_1_Loc); + small_printf (" should be: DHRYSTONE PROGRAM, 1'ST STRING\n"); + small_printf ("Str_2_Loc: %s\n", Str_2_Loc); + small_printf (" should be: DHRYSTONE PROGRAM, 2'ND STRING\n"); + small_printf ("\n"); + + User_Time = End_Time - Begin_Time; + small_printf ("User time: %d\n", (int)User_Time); + + if (User_Time < Too_Small_Time) + { + small_printf ("Measured time too small to obtain meaningful results\n"); + small_printf ("Please increase number of runs\n"); + small_printf ("\n"); + } +/* else */ + { +#if 0 +#ifdef TIME + Microseconds = (User_Time * Mic_secs_Per_Second ) + / Number_Of_Runs; + Dhrystones_Per_Second = Number_Of_Runs / User_Time; + Vax_Mips = (Number_Of_Runs*1000) / (1757*User_Time); +#else + Microseconds = (float) User_Time * Mic_secs_Per_Second + / ((float) HZ * ((float) Number_Of_Runs)); + Dhrystones_Per_Second = ((float) HZ * (float) Number_Of_Runs) + / (float) User_Time; + Vax_Mips = Dhrystones_Per_Second / 1757.0; +#endif +#else + Microseconds = User_Time / Number_Of_Runs; + Dhrystones_Per_Second = ((long long)Number_Of_Runs*1000000) / User_Time; + Vax_Mips = (((long long)Number_Of_Runs)*1000000000) / (1757*User_Time); +#endif + small_printf ("Microseconds for one run through Dhrystone: "); + small_printf ("%d \n", (int)Microseconds); + small_printf ("Dhrystones per Second: "); + small_printf ("%d \n", (int)Dhrystones_Per_Second); + small_printf ("VAX MIPS rating * 1000 = %d \n",(int)Vax_Mips); + small_printf ("\n"); + } + + return 0; +} + + +Proc_1 (Ptr_Val_Par) +/******************/ + +REG Rec_Pointer Ptr_Val_Par; + /* executed once */ +{ + REG Rec_Pointer Next_Record = Ptr_Val_Par->Ptr_Comp; + /* == Ptr_Glob_Next */ + /* Local variable, initialized with Ptr_Val_Par->Ptr_Comp, */ + /* corresponds to "rename" in Ada, "with" in Pascal */ + + structassign (*Ptr_Val_Par->Ptr_Comp, *Ptr_Glob); + Ptr_Val_Par->variant.var_1.Int_Comp = 5; + Next_Record->variant.var_1.Int_Comp + = Ptr_Val_Par->variant.var_1.Int_Comp; + Next_Record->Ptr_Comp = Ptr_Val_Par->Ptr_Comp; + Proc_3 (&Next_Record->Ptr_Comp); + /* Ptr_Val_Par->Ptr_Comp->Ptr_Comp + == Ptr_Glob->Ptr_Comp */ + if (Next_Record->Discr == Ident_1) + /* then, executed */ + { + Next_Record->variant.var_1.Int_Comp = 6; + Proc_6 (Ptr_Val_Par->variant.var_1.Enum_Comp, + &Next_Record->variant.var_1.Enum_Comp); + Next_Record->Ptr_Comp = Ptr_Glob->Ptr_Comp; + Proc_7 (Next_Record->variant.var_1.Int_Comp, 10, + &Next_Record->variant.var_1.Int_Comp); + } + else /* not executed */ + structassign (*Ptr_Val_Par, *Ptr_Val_Par->Ptr_Comp); +} /* Proc_1 */ + + +Proc_2 (Int_Par_Ref) +/******************/ + /* executed once */ + /* *Int_Par_Ref == 1, becomes 4 */ + +One_Fifty *Int_Par_Ref; +{ + One_Fifty Int_Loc; + Enumeration Enum_Loc; + + Int_Loc = *Int_Par_Ref + 10; + do /* executed once */ + if (Ch_1_Glob == 'A') + /* then, executed */ + { + Int_Loc -= 1; + *Int_Par_Ref = Int_Loc - Int_Glob; + Enum_Loc = Ident_1; + } /* if */ + while (Enum_Loc != Ident_1); /* true */ +} /* Proc_2 */ + + +Proc_3 (Ptr_Ref_Par) +/******************/ + /* executed once */ + /* Ptr_Ref_Par becomes Ptr_Glob */ + +Rec_Pointer *Ptr_Ref_Par; + +{ + if (Ptr_Glob != Null) + /* then, executed */ + *Ptr_Ref_Par = Ptr_Glob->Ptr_Comp; + Proc_7 (10, Int_Glob, &Ptr_Glob->variant.var_1.Int_Comp); +} /* Proc_3 */ + + +Proc_4 () /* without parameters */ +/*******/ + /* executed once */ +{ + Boolean Bool_Loc; + + Bool_Loc = Ch_1_Glob == 'A'; + Bool_Glob = Bool_Loc | Bool_Glob; + Ch_2_Glob = 'B'; +} /* Proc_4 */ + + +Proc_5 () /* without parameters */ +/*******/ + /* executed once */ +{ + Ch_1_Glob = 'A'; + Bool_Glob = false; +} /* Proc_5 */ + + + /* Procedure for the assignment of structures, */ + /* if the C compiler doesn't support this feature */ +#ifdef NOSTRUCTASSIGN +memcpy (d, s, l) +register char *d; +register char *s; +register int l; +{ + while (l--) *d++ = *s++; +} +#endif + + diff --git a/zpu/roadshow/roadshow/dhrystone/dhry_2.c b/zpu/roadshow/roadshow/dhrystone/dhry_2.c new file mode 100644 index 0000000..ed0e5b7 --- /dev/null +++ b/zpu/roadshow/roadshow/dhrystone/dhry_2.c @@ -0,0 +1,192 @@ +/* + **************************************************************************** + * + * "DHRYSTONE" Benchmark Program + * ----------------------------- + * + * Version: C, Version 2.1 + * + * File: dhry_2.c (part 3 of 3) + * + * Date: May 25, 1988 + * + * Author: Reinhold P. Weicker + * + **************************************************************************** + */ + +#include "dhry.h" + +#ifndef REG +#define REG + /* REG becomes defined as empty */ + /* i.e. no register variables */ +#endif + +extern int Int_Glob; +extern char Ch_1_Glob; + + +Proc_6 (Enum_Val_Par, Enum_Ref_Par) +/*********************************/ + /* executed once */ + /* Enum_Val_Par == Ident_3, Enum_Ref_Par becomes Ident_2 */ + +Enumeration Enum_Val_Par; +Enumeration *Enum_Ref_Par; +{ + *Enum_Ref_Par = Enum_Val_Par; + if (! Func_3 (Enum_Val_Par)) + /* then, not executed */ + *Enum_Ref_Par = Ident_4; + switch (Enum_Val_Par) + { + case Ident_1: + *Enum_Ref_Par = Ident_1; + break; + case Ident_2: + if (Int_Glob > 100) + /* then */ + *Enum_Ref_Par = Ident_1; + else *Enum_Ref_Par = Ident_4; + break; + case Ident_3: /* executed */ + *Enum_Ref_Par = Ident_2; + break; + case Ident_4: break; + case Ident_5: + *Enum_Ref_Par = Ident_3; + break; + } /* switch */ +} /* Proc_6 */ + + +Proc_7 (Int_1_Par_Val, Int_2_Par_Val, Int_Par_Ref) +/**********************************************/ + /* executed three times */ + /* first call: Int_1_Par_Val == 2, Int_2_Par_Val == 3, */ + /* Int_Par_Ref becomes 7 */ + /* second call: Int_1_Par_Val == 10, Int_2_Par_Val == 5, */ + /* Int_Par_Ref becomes 17 */ + /* third call: Int_1_Par_Val == 6, Int_2_Par_Val == 10, */ + /* Int_Par_Ref becomes 18 */ +One_Fifty Int_1_Par_Val; +One_Fifty Int_2_Par_Val; +One_Fifty *Int_Par_Ref; +{ + One_Fifty Int_Loc; + + Int_Loc = Int_1_Par_Val + 2; + *Int_Par_Ref = Int_2_Par_Val + Int_Loc; +} /* Proc_7 */ + + +Proc_8 (Arr_1_Par_Ref, Arr_2_Par_Ref, Int_1_Par_Val, Int_2_Par_Val) +/*********************************************************************/ + /* executed once */ + /* Int_Par_Val_1 == 3 */ + /* Int_Par_Val_2 == 7 */ +Arr_1_Dim Arr_1_Par_Ref; +Arr_2_Dim Arr_2_Par_Ref; +int Int_1_Par_Val; +int Int_2_Par_Val; +{ + REG One_Fifty Int_Index; + REG One_Fifty Int_Loc; + + Int_Loc = Int_1_Par_Val + 5; + Arr_1_Par_Ref [Int_Loc] = Int_2_Par_Val; + Arr_1_Par_Ref [Int_Loc+1] = Arr_1_Par_Ref [Int_Loc]; + Arr_1_Par_Ref [Int_Loc+30] = Int_Loc; + for (Int_Index = Int_Loc; Int_Index <= Int_Loc+1; ++Int_Index) + Arr_2_Par_Ref [Int_Loc] [Int_Index] = Int_Loc; + Arr_2_Par_Ref [Int_Loc] [Int_Loc-1] += 1; + Arr_2_Par_Ref [Int_Loc+20] [Int_Loc] = Arr_1_Par_Ref [Int_Loc]; + Int_Glob = 5; +} /* Proc_8 */ + + +Enumeration Func_1 (Ch_1_Par_Val, Ch_2_Par_Val) +/*************************************************/ + /* executed three times */ + /* first call: Ch_1_Par_Val == 'H', Ch_2_Par_Val == 'R' */ + /* second call: Ch_1_Par_Val == 'A', Ch_2_Par_Val == 'C' */ + /* third call: Ch_1_Par_Val == 'B', Ch_2_Par_Val == 'C' */ + +Capital_Letter Ch_1_Par_Val; +Capital_Letter Ch_2_Par_Val; +{ + Capital_Letter Ch_1_Loc; + Capital_Letter Ch_2_Loc; + + Ch_1_Loc = Ch_1_Par_Val; + Ch_2_Loc = Ch_1_Loc; + if (Ch_2_Loc != Ch_2_Par_Val) + /* then, executed */ + return (Ident_1); + else /* not executed */ + { + Ch_1_Glob = Ch_1_Loc; + return (Ident_2); + } +} /* Func_1 */ + + +Boolean Func_2 (Str_1_Par_Ref, Str_2_Par_Ref) +/*************************************************/ + /* executed once */ + /* Str_1_Par_Ref == "DHRYSTONE PROGRAM, 1'ST STRING" */ + /* Str_2_Par_Ref == "DHRYSTONE PROGRAM, 2'ND STRING" */ + +Str_30 Str_1_Par_Ref; +Str_30 Str_2_Par_Ref; +{ + REG One_Thirty Int_Loc; + Capital_Letter Ch_Loc; + + Int_Loc = 2; + while (Int_Loc <= 2) /* loop body executed once */ + if (Func_1 (Str_1_Par_Ref[Int_Loc], + Str_2_Par_Ref[Int_Loc+1]) == Ident_1) + /* then, executed */ + { + Ch_Loc = 'A'; + Int_Loc += 1; + } /* if, while */ + if (Ch_Loc >= 'W' && Ch_Loc < 'Z') + /* then, not executed */ + Int_Loc = 7; + if (Ch_Loc == 'R') + /* then, not executed */ + return (true); + else /* executed */ + { + if (strcmp (Str_1_Par_Ref, Str_2_Par_Ref) > 0) + /* then, not executed */ + { + Int_Loc += 7; + Int_Glob = Int_Loc; + return (true); + } + else /* executed */ + return (false); + } /* if Ch_Loc */ +} /* Func_2 */ + + +Boolean Func_3 (Enum_Par_Val) +/***************************/ + /* executed once */ + /* Enum_Par_Val == Ident_3 */ +Enumeration Enum_Par_Val; +{ + Enumeration Enum_Loc; + + Enum_Loc = Enum_Par_Val; + if (Enum_Loc == Ident_3) + /* then, executed */ + return (true); + else /* not executed */ + return (false); +} /* Func_3 */ + diff --git a/zpu/roadshow/roadshow/dhrystone/dhry_c.dif b/zpu/roadshow/roadshow/dhrystone/dhry_c.dif new file mode 100644 index 0000000..8bcaaea --- /dev/null +++ b/zpu/roadshow/roadshow/dhrystone/dhry_c.dif @@ -0,0 +1,141 @@ +7c7 +< * Version: C, Version 2.1 +--- +> * Version: C, Version 2.0 +9c9 +< * File: dhry.h (part 1 of 3) +--- +> * File: dhry_global.h (part 1 of 3) +11c11 +< * Date: May 25, 1988 +--- +> * Date: March 3, 1988 +30c30 +< * In addition, Berkeley UNIX system calls "times ()" or "time ()" +--- +> * In addition, UNIX system calls "times ()" or "time ()" +44c44 +< * Please send results to Rick Richardson and/or Reinhold Weicker. +--- +> * Please send results to Reinhold Weicker and/or Rick Richardson. +59c59 +< * History: This version C/2.1 has been made for two reasons: +--- +> * History: This version C/2.0 has been made for two reasons: +123,129d122 +< * Version 2.1 is identical to version 2.0 distributed via +< * the UNIX network Usenet in March 1988 except that it corrects +< * some minor deficiencies that were found by users of version 2.0. +< * The only change within the measurement loop is that a +< * non-executed "else" part was added to the "if" statement in +< * Func_3, and a non-executed "else" part removed from Proc_3. +< * +165,167c158,160 +< * -DHZ=nnn +< * In Berkeley UNIX, the function "times" returns process +< * time in 1/HZ seconds, with HZ = 60 for most systems. +--- +> * -DHZ=nnn (default: 60) +> * The function "times" returns process times in +> * 1/HZ seconds, with HZ = 60 for most systems. +169c162 +< * A VALUE. +--- +> * THE DEFAULT VALUE. +176,178c169,171 +< * - dhry.h (this file, containing global definitions and comments) +< * - dhry_1.c (containing the code corresponding to Ada package Pack_1) +< * - dhry_2.c (containing the code corresponding to Ada package Pack_2) +--- +> * - dhry_global.h (this file, containing global definitions and comments) +> * - dhry_pack_1.c (containing the code corresponding to Ada package Pack_1) +> * - dhry_pack_2.c (containing the code corresponding to Ada package Pack_2) +350a344 +> #ifndef TIMES +353,354c347,354 +< /* Use times(2) time function unless */ +< /* explicitly defined otherwise */ +--- +> #endif +> /* Use "times" function for measurement */ +> /* unless explicitly defined otherwise */ +> #ifndef HZ +> #define HZ 60 +> #endif +> /* Use HZ = 60 for "times" function */ +> /* unless explicitly defined otherwise */ +363c363 +< /* Berkeley UNIX C returns process times in seconds/HZ */ +--- +> /* UNIX C returns process times in seconds/HZ */ +7c7 +< * Version: C, Version 2.1 +--- +> * Version: C, Version 2.0 +9c9 +< * File: dhry_1.c (part 2 of 3) +--- +> * File: dhry_pack_1.c (part 2 of 3) +11c11 +< * Date: May 25, 1988 +--- +> * Date: March 3, 1988 +18c18 +< #include "dhry.h" +--- +> #include "dhry_global.h" +50,51d49 +< #define Too_Small_Time 120 +< /* Measurements should last at least about 2 seconds */ +55a54,55 +> #endif +> +58d57 +< #endif +73a73 +> +84a85 +> +99,100c100,102 +< /* Was missing in published program. Without this statement, */ +< /* Arr_2_Glob [8][7] would have an undefined value. */ +--- +> /* Was missing in published program. Without this */ +> /* initialization, Arr_2_Glob [8][7] would have an */ +> /* undefined value. */ +105c107 +< printf ("Dhrystone Benchmark, Version 2.1 (Language: C)\n"); +--- +> printf ("Dhrystone Benchmark, Version 2.0 (Language: C)\n"); +281c283 +< /******************/ +--- +> /**********************/ +338c340 +< /******************/ +--- +> /**********************/ +347a350,351 +> else /* not executed */ +> Int_Glob = 100; +349a354 +> +7c7 +< * Version: C, Version 2.1 +--- +> * Version: C, Version 2.0 +9c9 +< * File: dhry_2.c (part 3 of 3) +--- +> * File: dhry_pack_2.c (part 3 of 3) +11c11 +< * Date: May 25, 1988 +--- +> * Date: March 3, 1988 +18c18 +< #include "dhry.h" +--- +> #include "dhry_global.h" +189,190d188 +< else /* not executed */ +< return (false); diff --git a/zpu/roadshow/roadshow/dhrystone/dhrystone.bin b/zpu/roadshow/roadshow/dhrystone/dhrystone.bin new file mode 100644 index 0000000..ee1a6fe Binary files /dev/null and b/zpu/roadshow/roadshow/dhrystone/dhrystone.bin differ diff --git a/zpu/roadshow/roadshow/dhrystone/dhrystone.zpu b/zpu/roadshow/roadshow/dhrystone/dhrystone.zpu new file mode 100644 index 0000000..e37e59f Binary files /dev/null and b/zpu/roadshow/roadshow/dhrystone/dhrystone.zpu differ diff --git a/zpu/roadshow/roadshow/dhrystone/submit.frm b/zpu/roadshow/roadshow/dhrystone/submit.frm new file mode 100644 index 0000000..a75a689 --- /dev/null +++ b/zpu/roadshow/roadshow/dhrystone/submit.frm @@ -0,0 +1,17 @@ +DHRYSTONE 2.1 BENCHMARK REPORTING FORM +MANUF: +MODEL: +PROC: +CLOCK: +OS: +OVERSION: +COMPILER: +CVERSION: +OPTIONS: +NOREG: +REG: +NOTES: +DATE: +SUBMITTER: +CODESIZE: +MAILTO: uunet!pcrat!dry2 diff --git a/zpu/roadshow/roadshow/ecos/codesize/zpuarmcodesize.htm b/zpu/roadshow/roadshow/ecos/codesize/zpuarmcodesize.htm new file mode 100644 index 0000000..3631145 --- /dev/null +++ b/zpu/roadshow/roadshow/ecos/codesize/zpuarmcodesize.htm @@ -0,0 +1,1049 @@ + + + + + + + + +ZPU vs. ARM non-thumb eCos codesize + + + + + + + + + + +

+ +

ZPU vs. ARM non-thumb eCos codesize

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ZPUARM + non-thumb(eCos Thumb does not compile out of the box)
filenametextdatabssdechexfilenametextdatabssdechexZPU text/ZPU ARM
bin_sem01576115041206029325728dbin_sem0252046921697642872a77863 + %
bin_sem116907151214436328558057bin_sem1266447002209649440c12063 + %
bin_sem21710515243003248661be15bin_sem22699671255584832921455c63 + %
bin_sem31718615121443633134816ebin_sem3270087002210049808c29064 + %
clock018986150012036325227f0aclock0289926881694446624b62065 + %
clock115812150413236305527758clock1254566921953245680b27062 + %
clockcnv25095197213224402919d63clockcnv3457211601952055252d7d473 + %
clocktruth164371500132243116179b9clocktruth262246881950846420b55463 + %
cnt_sem01576215041206029326728ecnt_sem0252046921697642872a77863 + %
cnt_sem117124151214436330728130cnt_sem1268887002210849696c22064 + %
dhrystone3594715642251260023ea77dhrystone44180752274167234811a9c81 + %
except1164281500132283115679b4except1260886881952046296b4d863 + %
flag01575115041205229307727bflag0252366921696842896a79062 + %
flag119145151215624362818db9flag1295327002466854900d67465 + %
fptest2005315161029081244771e63dfptest295087041096521398642225868 + %
intr015998149612092295867392intr0259326841701643632aa7062 + %
kalarm016080149612200297767450kalarm0258246841711243620aa6462 + %
kcache1153271496120362885970bbkcache1247286841695642368a58062 + %
kcache21554914961322430269763dkcache2251686841951245364b13462 + %
kclock018291150012260320517d33kclock0281126881716845968b39065 + %
kclock1162311500132323096378f3kclock1259766881952446188b46c62 + %
kexcept116572149613228312967a40kexcept1263726841951246568b5e863 + %
kflag0156181496120602917471f6kflag0251406841696842792a72862 + %
kflag119287150015624364118e3bkflag1298246882466055172d78465 + %
kill168871516156283403184efkill268967042465652256cc2063 + %
kintr016186149612128298107472kintr0260886841702843800ab1862 + %
klock19724150414516357448ba0klock308126922217653680d1b064 + %
kmbox118283150014592343758647kmbox1285046882226051452c8fc64 + %
kmutex0155391496120642909971abkmutex0249846841698442652a69c62 + %
kmutex11652415041566433692839ckmutex1265046922470451900cabc62 + %
kmutex318272171220348403329d8ckmutex3287929003489264584fc4863 + %
kmutex418682160820352406429ec2kmutex4292647963489664956fdbc64 + %
ksched115619149614412315277b27ksched1252406842208448008bb8862 + %
ksem0155671496120602912371c3ksem0250446841696842696a6c862 + %
ksem117063150014436329998E+08ksem1269886882210049776c27063 + %
kthread015504149613228302287614kthread0250286841951245224b0a862 + %
kthread116167149614412320757d4bkthread1259966842208048760be7862 + %
mbox118281151214580343738645mbox1285527002225251504c93064 + %
mqueue1206111508149403705990c3mqueue1313246962261254632d56866 + %
mutex015672150412064292407238mutex0251086921698042780a71c62 + %
mutex116678151615664338588442mutex1264647042470051868ca9c63 + %
mutex217694150816868360708ce6mutex2276246962728055600d93064 + %
mutex318203172020344402679d4bmutex3285969083488464388fb8464 + %
release16352150814428322887E+20release261566962210048952bf3863 + %
sched115890150014412318027c3asched1254606882208448232bc6862 + %
stress_threads4419616122863323321405116cstress_threads5635682845892103076192a478 + %
sync217891152416864362798db7sync2279007122728855900da5c64 + %
sync316943151215644340998533sync3267607002469252152cbb863 + %
thread01546714961306430027754bthread0249246841935644964afa462 + %
thread116134149614420320507d32thread1258686842208448636bdfc62 + %
thread217560151215636347088794thread2274527002468052832ce6064 + %
thread_gdb1627915002402841807a34fthread_gdb26136688427046952810f9862 + %
timeslice17051150420376389319813timeslice272126923491662820f56463 + %
tm_basic37313151242238046120570995tm_basic527287001233321767602b27871 + %
+ +
+ + + + + + + + diff --git a/zpu/roadshow/roadshow/ecos/index.html b/zpu/roadshow/roadshow/ecos/index.html new file mode 100644 index 0000000..5245459 --- /dev/null +++ b/zpu/roadshow/roadshow/ecos/index.html @@ -0,0 +1,145 @@ + + +

Installing eCos build tools

+ +tar -xjvf ecossnapshot.tar.bz2
+tar -xjvf repository.tar.bz2
+tar -xjvf ecostools.tar.bz2
+# run this every time you open the shell
+export PATH=$PATH:`pwd`/ecos-install
+export ECOS_REPOSITORY=`pwd`/ecos/packages:`pwd`/repository
+
+

Compiling eCos tests

+ +ecosconfig new zeta default
+ecosconfig tree
+make
+cd kernel/current
+make tests
+
+ +

Code size ZPU

+ +$ zpu-elf-size *
+ text data bss dec hex filename
+ 15761 1504 12060 29325 728d bin_sem0
+ 16907 1512 14436 32855 8057 bin_sem1
+ 17105 1524 30032 48661 be15 bin_sem2
+ 17186 1512 14436 33134 816e bin_sem3
+ 18986 1500 12036 32522 7f0a clock0
+ 15812 1504 13236 30552 7758 clock1
+ 25095 1972 13224 40291 9d63 clockcnv
+ 16437 1500 13224 31161 79b9 clocktruth
+ 15762 1504 12060 29326 728e cnt_sem0
+ 17124 1512 14436 33072 8130 cnt_sem1
+ 35947 1564 22512 60023 ea77 dhrystone
+ 16428 1500 13228 31156 79b4 except1
+ 15751 1504 12052 29307 727b flag0
+ 19145 1512 15624 36281 8db9 flag1
+ 20053 1516 102908 124477 1e63d fptest
+ 15998 1496 12092 29586 7392 intr0
+ 16080 1496 12200 29776 7450 kalarm0
+ 15327 1496 12036 28859 70bb kcache1
+ 15549 1496 13224 30269 763d kcache2
+ 18291 1500 12260 32051 7d33 kclock0
+ 16231 1500 13232 30963 78f3 kclock1
+ 16572 1496 13228 31296 7a40 kexcept1
+ 15618 1496 12060 29174 71f6 kflag0
+ 19287 1500 15624 36411 8e3b kflag1
+ 16887 1516 15628 34031 84ef kill
+ 16186 1496 12128 29810 7472 kintr0
+ 19724 1504 14516 35744 8ba0 klock
+ 18283 1500 14592 34375 8647 kmbox1
+ 15539 1496 12064 29099 71ab kmutex0
+ 16524 1504 15664 33692 839c kmutex1
+ 18272 1712 20348 40332 9d8c kmutex3
+ 18682 1608 20352 40642 9ec2 kmutex4
+ 15619 1496 14412 31527 7b27 ksched1
+ 15567 1496 12060 29123 71c3 ksem0
+ 17063 1500 14436 32999 80e7 ksem1
+ 15504 1496 13228 30228 7614 kthread0
+ 16167 1496 14412 32075 7d4b kthread1
+ 18281 1512 14580 34373 8645 mbox1
+ 20611 1508 14940 37059 90c3 mqueue1
+ 15672 1504 12064 29240 7238 mutex0
+ 16678 1516 15664 33858 8442 mutex1
+ 17694 1508 16868 36070 8ce6 mutex2
+ 18203 1720 20344 40267 9d4b mutex3
+ 16352 1508 14428 32288 7e20 release
+ 15890 1500 14412 31802 7c3a sched1
+ 44196 1612 286332 332140 5116c stress_threads
+ 17891 1524 16864 36279 8db7 sync2
+ 16943 1512 15644 34099 8533 sync3
+ 15467 1496 13064 30027 754b thread0
+ 16134 1496 14420 32050 7d32 thread1
+ 17560 1512 15636 34708 8794 thread2
+ 16279 1500 24028 41807 a34f thread_gdb
+ 17051 1504 20376 38931 9813 timeslice
+ 17146 1504 21564 40214 9d16 timeslice2
+ 37313 1512 422380 461205 70995 tm_basic
+
+

Code size ARM (non-thumb)

+Thumb does not compile out of the box w/AT91 EB40a for which this test was made.

+ +$ arm-elf-size *
+ text data bss dec hex filename
+ 25204 692 16976 42872 a778 bin_sem0
+ 26644 700 22096 49440 c120 bin_sem1
+ 26996 712 55584 83292 1455c bin_sem2
+ 27008 700 22100 49808 c290 bin_sem3
+ 28992 688 16944 46624 b620 clock0
+ 25456 692 19532 45680 b270 clock1
+ 34572 1160 19520 55252 d7d4 clockcnv
+ 26224 688 19508 46420 b554 clocktruth
+ 25204 692 16976 42872 a778 cnt_sem0
+ 26888 700 22108 49696 c220 cnt_sem1
+ 44180 752 27416 72348 11a9c dhrystone
+ 26088 688 19520 46296 b4d8 except1
+ 25236 692 16968 42896 a790 flag0
+ 29532 700 24668 54900 d674 flag1
+ 29508 704 109652 139864 22258 fptest
+ 25932 684 17016 43632 aa70 intr0
+ 25824 684 17112 43620 aa64 kalarm0
+ 24728 684 16956 42368 a580 kcache1
+ 25168 684 19512 45364 b134 kcache2
+ 28112 688 17168 45968 b390 kclock0
+ 25976 688 19524 46188 b46c kclock1
+ 26372 684 19512 46568 b5e8 kexcept1
+ 25140 684 16968 42792 a728 kflag0
+ 29824 688 24660 55172 d784 kflag1
+ 26896 704 24656 52256 cc20 kill
+ 26088 684 17028 43800 ab18 kintr0
+ 30812 692 22176 53680 d1b0 klock
+ 28504 688 22260 51452 c8fc kmbox1
+ 24984 684 16984 42652 a69c kmutex0
+ 26504 692 24704 51900 cabc kmutex1
+ 28792 900 34892 64584 fc48 kmutex3
+ 29264 796 34896 64956 fdbc kmutex4
+ 25240 684 22084 48008 bb88 ksched1
+ 25044 684 16968 42696 a6c8 ksem0
+ 26988 688 22100 49776 c270 ksem1
+ 25028 684 19512 45224 b0a8 kthread0
+ 25996 684 22080 48760 be78 kthread1
+ 28552 700 22252 51504 c930 mbox1
+ 31324 696 22612 54632 d568 mqueue1
+ 25108 692 16980 42780 a71c mutex0
+ 26464 704 24700 51868 ca9c mutex1
+ 27624 696 27280 55600 d930 mutex2
+ 28596 908 34884 64388 fb84 mutex3
+ 26156 696 22100 48952 bf38 release
+ 25460 688 22084 48232 bc68 sched1
+ 56356 828 45892 103076 192a4 stress_threads
+ 27900 712 27288 55900 da5c sync2
+ 26760 700 24692 52152 cbb8 sync3
+ 24924 684 19356 44964 afa4 thread0
+ 25868 684 22084 48636 bdfc thread1
+ 27452 700 24680 52832 ce60 thread2
+ 26136 688 42704 69528 10f98 thread_gdb
+ 27212 692 34916 62820 f564 timeslice
+ 52728 700 123332 176760 2b278 tm_basic
+
+ + + + + diff --git a/zpu/roadshow/roadshow/ecos/repository.tar.bz2 b/zpu/roadshow/roadshow/ecos/repository.tar.bz2 new file mode 100644 index 0000000..bc6291f Binary files /dev/null and b/zpu/roadshow/roadshow/ecos/repository.tar.bz2 differ diff --git a/zpu/roadshow/roadshow/games/.cvsignore b/zpu/roadshow/roadshow/games/.cvsignore new file mode 100644 index 0000000..6c50257 --- /dev/null +++ b/zpu/roadshow/roadshow/games/.cvsignore @@ -0,0 +1,5 @@ +summeria_arm.elf +sumeria_zpu.elf +eliza_arm.elf +sumeria.elf +eliza_zpu.elf diff --git a/zpu/roadshow/roadshow/games/build.sh b/zpu/roadshow/roadshow/games/build.sh new file mode 100644 index 0000000..ea661df --- /dev/null +++ b/zpu/roadshow/roadshow/games/build.sh @@ -0,0 +1,7 @@ +zpu-elf-gcc -Os -phi sumeria.c -o sumeria.elf -Wl,--relax -Wl,--gc-sections -lm -g +zpu-elf-objcopy -O binary sumeria.elf sumeria.bin +sh ../build/makefirmware.sh sumeria.bin sumeria.zpu +zpu-elf-gcc -Os -phi eliza/*.c -o eliza.elf -Wl,--relax -Wl,--gc-sections -lm -g +zpu-elf-objcopy -O binary eliza.elf eliza.bin +sh ../build/makefirmware.sh eliza.bin eliza.zpu + diff --git a/zpu/roadshow/roadshow/games/eliza.bin b/zpu/roadshow/roadshow/games/eliza.bin new file mode 100644 index 0000000..6d5a6c3 Binary files /dev/null and b/zpu/roadshow/roadshow/games/eliza.bin differ diff --git a/zpu/roadshow/roadshow/games/eliza.elf b/zpu/roadshow/roadshow/games/eliza.elf new file mode 100644 index 0000000..bfbbab7 Binary files /dev/null and b/zpu/roadshow/roadshow/games/eliza.elf differ diff --git a/zpu/roadshow/roadshow/games/eliza.zpu b/zpu/roadshow/roadshow/games/eliza.zpu new file mode 100644 index 0000000..d916270 Binary files /dev/null and b/zpu/roadshow/roadshow/games/eliza.zpu differ diff --git a/zpu/roadshow/roadshow/games/eliza/eliza.c b/zpu/roadshow/roadshow/games/eliza/eliza.c new file mode 100644 index 0000000..06f89ee --- /dev/null +++ b/zpu/roadshow/roadshow/games/eliza/eliza.c @@ -0,0 +1,269 @@ +/* +Copyright (C) 1988-2003 by Mohan Embar + +http://www.thisiscool.com/ +DISCLAIMER: This was written in 1988. I don't code like this anymore! + +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 +#include "parse.h" +#include "response.h" + +typedef char WORD[40]; +typedef WORD SENTENCE[200]; + +int numwords; +SENTENCE s; +WORD fam_member; /* If mentioned a member of family, save for later. */ +int fam; + +main() { + int x, y, loop = 1, fact = 0; + char instring[200], outstring[200], sub[200], vrb[200], rst[200], qwd[200]; + char osub[200], ovrb[200], orst[200]; + fam = 0; + printf("Hello there. My name is Eliza and I was written by Mohan Embar.\n"); + printf("Please type \"END\" to end this session.\n"); + printf("I'm here to help you if I can. What seems to be the trouble?\n"); + while (loop) { + printf("\n"); + gets(instring); + printf("\n"); + parse(instring); + if (numwords == 0) { + switch (x = randnum(2)) { + case 1 : printf("Don't you have anything to say?\n"); + break; + case 2 : printf("Cat got your tongue?\n"); + break; + } + continue; + } + if (!strcmp(s[1],"END")) { + printf("Goodbye. Please come again.\n"); + break; + } + agree(); + if (bad_word()) + printf(b_word_resp()); + else if (naughty_word()) + printf(n_word_resp()); + else if (x = family()) { + fam = x; + printf(fam_resp()); + strcpy(fam_member,s[fam]); + } + else if (sword("ALIKE",1)) + printf(alike_resp()); + else if (sword("ALWAYS",1)) + printf(always_resp()); + else if (sword("BECAUSE",1)) + printf(because_resp()); + else if (sword("YES",1)) + printf(yes_resp()); + else if (sword("NO",1) || sword("NOT",1)) + printf(neg_resp()); + else if (x = i_am()) { /* If occurrence of I AM x.. */ + get_til_stop(x,outstring); /* Get I AM x .. into outstring */ + printf(i_am_resp(),outstring); /* Print reponse for this */ + } + else if (real_quest() || + (is_helper(s[1]) && is_sub_pronoun(s[2])) || + sub_and_helper()) { + if (real_quest()) { + strcpy(qwd,s[1]); + strcpy(vrb,s[2]); + strcpy(sub,s[3]); + get_til_stop(4,rst); + } + else if (is_helper(s[1]) && is_sub_pronoun(s[2])) { + strcpy(vrb,s[1]); + strcpy(sub,s[2]); + get_til_stop(3,rst); + strcpy(qwd,"YES"); + } + else if (sub_and_helper()) { + x = find_helper(); + y = search_back_sub(x); + strcpy(vrb,s[x]); + get_til_stop(x+1,rst); + getrange(y,x-1,sub); + strcpy(qwd,"NO"); + } + make_lower(qwd); + if (strcmp(sub,"I")) make_lower(sub); + make_lower(vrb); + make_lower(rst); + /* First do x verb y responses */ + + /* + printf("\n*** %s\n",sub); + */ + + if (!strcmp(sub," I") || !strcmp(sub,"I")) { + printf(you_resp()); + } + else if (!strcmp(qwd,"no")) { + /* Record this statement for later use. */ + fact = 1; + strcpy(osub,sub); strcpy(ovrb,vrb); strcpy(orst,rst); + if (is_be(vrb) && !strcmp(sub," you") && (y = sad_word())) { + getrange(y,y,outstring); + x = randnum(5)+6; + } + else if (is_be(vrb) && (y = sad_word())) { + getrange(y,y,outstring); + x = randnum(2)+11; + } + else if (is_be(vrb)) + x = randnum(6); + else x = randnum(4); + switch (x) { + case 1 : printf("How do you feel about%s?\n",cnnv(sub)); + break; + case 2 : printf("Why %s%s%s?\n",vrb,sub,rst); + break; + case 3 : for (y=1;sub[y]=sub[y--];y=y+2); + sub[0] = toupper(sub[0]); + printf("%s %s%s?\n",sub,vrb,rst); + break; + case 4 : printf("Could you describe%s for me?\n",cnnv(sub)); + break; + case 5 : printf("What if%s were not%s?\n",sub,rst); + break; + case 6 : printf("Would you be happy if%s were not%s?\n",sub, + rst); + break; + case 7 : printf("I'm sorry to hear that you are%s.\n",outstring); + break; + case 8 : printf("Do you think that coming here will help you not to be%s?\n",outstring); + break; + case 9 : printf("Let's talk about why you feel%s.\n",outstring); + break; + case 10 : printf("What happened that made you feel%s?\n",outstring); + break; + case 11 : printf("What could be the reason for your feeling%s?\n",outstring); + break; + case 12 : printf("What could cause%s to be%s?\n",cnnv(sub),outstring); + break; + case 13 : printf("If%s came here, would it help%s not to be%s?\n",sub,cnnv(sub),outstring); + break; + } + } + else if (!strcmp(sub,"you")) + printf(you_know()); + else if (!strcmp(qwd,"yes")) { + x = randnum(8); + switch (x) { + case 1 : printf("You want to know if %s %s%s.\n",sub,vrb,rst); + break; + case 2 : printf("If %s %s%s, does that concern you?\n",sub,vrb,rst); + break; + case 3 : printf("What are the consequences if %s %s%s?\n",sub,vrb,rst); + break; + case 4 : printf("Why does %s concern you?\n",sub); + break; + case 5 : printf("Why are you thinking of %s?\n",cnnv(sub)); + break; + case 6 : printf("Tell me more about %s.\n",cnnv(sub)); + break; + case 7 : printf("To answer that, I'd need to know more about %s.\n",cnnv(sub)); + break; + case 8 : printf("What is the relationship between you and %s?\n",cnnv(sub)); + break; + case 9 : printf("Why don't you ask %s?\n",cnnv(sub)); + break; + } + } + else { + x = randnum(8); + switch (x) { + case 1 : printf("You want to know %s %s %s%s.\n",qwd,sub,vrb,rst); + break; + case 2 : printf("If %s %s%s, does that concern you?\n",sub,vrb,rst); + break; + case 3 : printf("What are the consequences if %s %s%s?\n",sub,vrb,rst); + break; + case 4 : printf("Why does %s concern you?\n",sub); + break; + case 5 : printf("Why are you thinking of %s?\n",cnnv(sub)); + break; + case 6 : printf("Tell me more about %s.\n",cnnv(sub)); + break; + case 7 : printf("To answer that, I'd need to know more about %s.\n",cnnv(sub)); + break; + case 8 : printf("What is the relationship between you and %s?\n",cnnv(sub)); + break; + case 9 : printf("Why don't you ask %s?\n",cnnv(sub)); + break; + } + } + } + else if (is_command()) + printf(command_resp()); + else if (vague_quest()) + printf(question()); + else if ((s[numwords][0] == '?') && !real_quest()) + printf(question()); + else if (x = sad_word()) { + getrange(x,x,outstring); + for (y=1;outstring[y]=outstring[y--];y=y+2); + outstring[0] = toupper(outstring[0]); + printf("%s?\n",outstring); + } + else if (x = can_spit_out()) { + if (x<=(numwords-2) && is_sub_pronoun(s[x]) + && (matches("NEED",s[x+1]) || + matches("WANT",s[x+1]))) { + get_til_stop(x+2,outstring); + strcpy(sub,s[x]); + if (strcmp(sub,"I")) make_lower(sub); + if (strcmp(s[x],"I")) make_lower(s[x]); + x = randnum(6); + switch (x) { + case 1 : printf("What would it mean to %s if %s got%s?\n",cnnv2(s[x]),sub,outstring); + break; + case 2 : printf("Would %s really be happy if %s got%s?\n",sub,sub,outstring); + break; + case 3 : printf("Why is getting%s so desirable?\n",outstring); + break; + case 4 : printf("Okay. Suppose %s got%s. Then what?\n",sub,outstring); + break; + case 5 : printf("Why is this important to %s?\n",cnnv2(sub)); + break; + case 6 : printf("What price would %s pay to achieve this?\n",sub); + break; + } + } + else { + get_til_stop(x,outstring); + outstring[1]=toupper(outstring[1]); + printf("%s.\n",outstring+1); + } + } + else if (fam) { + make_lower(fam_member); + printf(family_resp(),fam_member); + fam = 0; + } + else if (fact && (randnum(5)==3)) { + printf(old_fact(),osub,ovrb,orst); + fact = 0; + } + else { + printf(go_on()); + } + } +} diff --git a/zpu/roadshow/roadshow/games/eliza/parse.c b/zpu/roadshow/roadshow/games/eliza/parse.c new file mode 100644 index 0000000..aba2033 --- /dev/null +++ b/zpu/roadshow/roadshow/games/eliza/parse.c @@ -0,0 +1,719 @@ +/* +Copyright (C) 1988-2003 by Mohan Embar + +http://www.thisiscool.com/ +DISCLAIMER: This was written in 1988. I don't code like this anymore! + +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. +*/ + +/* Program defined abstract data type called list. A list contains + * character strings each of which has a maximum length of 20 characters. + * + * Operations supported are: + * + * + */ +typedef char WORD[40]; +typedef WORD SENTENCE[200]; + +extern int numwords; +extern SENTENCE s; + +/* Returns upper case value of c */ +char upcase(c) + char c; +{ + if (islower(c)) return toupper(c); else return c; +} + +/* This function converts string1 into lowercase. */ +void make_lower(string1) + char *string1; +{ + char c; + while (c = *string1) *string1++ = tolower(c); +} + +/* Parses words in instring into WORD array s + * Automatically translates n't to not, 're to are + * Stores all letters in uppercase. Sets numwords to number of tokens in + * s. Valid indices are from 1 .. numwords. + */ +void parse(instring) + char *instring; +{ + char c; int i; + int read_word = 0; + int offset = -1; + numwords = 0; + while (c = *instring++) { + switch(c) { + case ' ' : + case '\t' : + read_word = 0; + continue; + case ',' : + case '?' : + case '.' : + case ':' : + case '"' : + s[numwords++][++offset] = '\0'; + read_word = 0; + s[numwords][offset = 0] = c; + break; + case '\'' : + if ((s[numwords][offset] == 'N') && (upcase(*instring) == 'T')) { + s[numwords++][offset]='\0'; + s[numwords][0] = 'N'; + s[numwords][offset = 1] = 'O'; + read_word = 1; + } + else if (upcase(*instring) == 'R') { + s[numwords++][++offset] = '\0'; + s[numwords][offset = 0] = 'A'; + read_word = 1; + } + else if (upcase(*instring) == 'V') { + s[numwords++][++offset] = '\0'; + s[numwords][offset = 0] = 'H'; + s[numwords][++offset] = 'A'; + read_word = 1; + } + else if (upcase(*instring) == 'M') { + s[numwords++][++offset] = '\0'; + s[numwords][offset = 0] = 'A'; + read_word = 1; + } + else if (upcase(*instring) == 'L') { + s[numwords++][++offset] = '\0'; + s[numwords][offset = 0] = 'W'; + s[numwords][++offset] = 'I'; + read_word = 1; + } + else if (upcase(*instring) == 'S') { + s[numwords][offset+1] = '\0'; + if (!strcmp(s[numwords],"HE") || !strcmp(s[numwords],"SHE") + || !strcmp(s[numwords],"IT")) { + s[++numwords][offset = 0] = 'I'; + read_word = 1; + } + else s[numwords][++offset] = '\''; + } + break; + default : + if (isalpha(c)) + if (read_word) { + s[numwords][++offset] = upcase(c); + } + else { + s[numwords++][++offset] = '\0'; + ++read_word; + s[numwords][offset = 0] = upcase(c); + } + else { + read_word = 0; + } + } + } + s[numwords][++offset] = '\0'; + return; +} + +/* Self-explanatory. Used when computer spits back the sentence */ +void agree() +{ + int i; + for(i=1;i<=numwords;i++) { + if (!strcmp(s[i],"I")) { + strcpy(s[i],"YOU"); + } + else if (!strcmp(s[i],"YOU")) { + strcpy(s[i],"I"); + } + else if (!strcmp(s[i],"YOUR")) { + strcpy(s[i],"MY"); + } + else if (!strcmp(s[i],"MY")) { + strcpy(s[i],"YOUR"); + } + else if (!strcmp(s[i],"YOU")) { + strcpy(s[i],"ME"); + } + else if (!strcmp(s[i],"ME")) { + strcpy(s[i],"YOU"); + } + else if (!strcmp(s[i],"MINE")) { + strcpy(s[i],"YOURS"); + } + else if (!strcmp(s[i],"YOURS")) { + strcpy(s[i],"MINE"); + } + else if (!strcmp(s[i],"WE")) { + strcpy(s[i],"YOU"); + } + else if (!strcmp(s[i],"YOURSELF")) { + strcpy(s[i],"MYSELF"); + } + else if (!strcmp(s[i],"MYSELF")) { + strcpy(s[i],"YOURSELF"); + } + else if (!strcmp(s[i],"OURSELVES")) { + strcpy(s[i],"YOURSELVES"); + } + else if (!strcmp(s[i],"OURS")) { + strcpy(s[i],"YOURS"); + } + else if (!strcmp(s[i],"OUR")) { + strcpy(s[i],"YOUR"); + } + } + for (i=1;i<=numwords;i++) { + if (!strcmp(s[i],"AM")) { + strcpy(s[i],"ARE"); + } + else if ( (!strcmp(s[i],"ARE")) && + (((i>0) && (!strcmp(s[i-1],"I"))) || + ((i0) && (!strcmp(s[i-1],"I"))) || + ((i0) && (!strcmp(s[i-1],"YOU"))) || + ((istrlen(string2)) + return 0; + else { /* length(string1)<=length(string2) */ + while (c = *string1++) { + if (c != *string2++) return 0; + } + return 1; + } +} + +/* Search WORD array s for search_string. If exact = 1, enforce exact match. + * Otherwise, return positive match if all characters of search_string match + * the first length(search_string) characters of a WORD in s. Assumes legal + * values for exact are 0 or 1. Returns index of match in s if match, 0 if + * no match. + */ +int sword(s_string, exact) + char *s_string; + int exact; +{ + int i; + for (i=1;i<=numwords;i++) { + if (exact) { + if (!strcmp(s_string,s[i])) return i; + } + else { + if (matches(s_string,s[i])) return i; + } + } + /* No match */ + return 0; +} + +int bad_word() +{ + if (sword("\115\117\124\110\105\122\106\125\103\113",0)) + return 1; + else if (sword("\106\125\103\113",0)) + return 1; + else if (sword("\123\110\111\124",0)) + return 1; + else if (sword("\101\123\123\110\117\114\105",1)) + return 1; + else if (sword("\101\123\123",1)) + return 1; + else return 0; +} + +int naughty_word() +{ + if (sword("DAMN",0)) + return 1; + else if (sword("STUPID",0)) + return 1; + else if (sword("IDIOT",0)) + return 1; + else if (sword("MORON",0)) + return 1; + else if (sword("NUMBSKULL",0)) + return 1; + else if (sword("IMBECILE",0)) + return 1; + else if (sword("OBNOXIOUS",0)) + return 1; + else return 0; +} + +/* Return the index to a form of be or helping verb, if one exists + * Otherwise, return 0. + */ +int find_helper() +{ + int x; + if (x = sword("AM",1)) + return x; + else if (x = sword("IS",1)) + return x; + else if (x = sword("ARE",1)) + return x; + else if (x = sword("WAS",1)) + return x; + else if (x = sword("WERE",1)) + return x; + else if (x = sword("WILL",1)) + return x; + else if (x = sword("DO",1)) + return x; + else if (x = sword("DID",1)) + return x; + else if (x = sword("DOES",1)) + return x; + else if (x = sword("HAVE",1)) + return x; + else if (x = sword("HAD",1)) + return x; + else if (x = sword("HAS",1)) + return x; + else if (x = sword("SHALL",1)) + return x; + else if (x = sword("SHOULD",1)) + return x; + else if (x = sword("CAN",1)) + return x; + else if (x = sword("COULD",1)) + return x; + else if (x = sword("MAY",1)) + return x; + else if (x = sword("MIGHT",1)) + return x; + else return 0; +} + +/* Returns 1 is string1 is pronoun. 0 if not. */ +int is_sub_pronoun(string1) + char *string1; +{ + if (!strcmp("I",string1)) + return 1; + else if (!strcmp("YOU",string1)) + return 1; + else if (!strcmp("WE",string1)) + return 1; + else if (!strcmp("HE",string1)) + return 1; + else if (!strcmp("SHE",string1)) + return 1; + else if (!strcmp("IT",string1)) + return 1; + else if (!strcmp("THEY",string1)) + return 1; + else return 0; +} + +int is_possesive(string1) + char *string1; +{ + if (!strcmp("MY",string1)) + return 1; + else if (!strcmp("YOUR",string1)) + return 1; + else if (!strcmp("OUR",string1)) + return 1; + else if (!strcmp("HIS",string1)) + return 1; + else if (!strcmp("HER",string1)) + return 1; + else if (!strcmp("ITS",string1)) + return 1; + else if (!strcmp("THEIR",string1)) + return 1; + else return 0; +} + +int is_article(string1) + char *string1; +{ + if (!strcmp("A",string1)) + return 1; + else if (!strcmp("AN",string1)) + return 1; + else if (!strcmp("THE",string1)) + return 1; + else return 0; +} + +/* Tries to find reference to a family member */ +int family() +{ + int x; + if (x = sword("MOTHER",1)) + return x; + else if (x = sword("FATHER",1)) + return x; + else if (x = sword("SISTER",1)) + return x; + else if (x = sword("BROTHER",1)) + return x; + else if (x = sword("DAD",1)) + return x; + else if (x = sword("MOM",1)) + return x; + else if (x = sword("UNCLE",1)) + return x; + else if (x = sword("AUNT",1)) + return x; + else if (x = sword("GRANDMOTHER",1)) + return x; + else if (x = sword("GRANDFATHER",1)) + return x; + else if (x = sword("COUSIN",1)) + return x; + else if (x = sword("GRANDMA",1)) + return x; + else if (x = sword("GRANDPA",1)) + return x; + else return 0; +} + +int i_am() +{ + int x, e=1; + while (e) { + for (x=e;x<=numwords;x++) if (!strcmp("I",s[x])) break; + if (x >= numwords) + return 0; + else if (!strcmp("AM",s[x+1])) + return x; + else e = ++x; + } +} + +void get_til_stop(x,string1) + int x; + char *string1; +{ + char c, *temp; + int e = 1; /* Exit test */ + while (e) { + if (x>numwords) { + e--; + *string1 = '\0'; + } + else if (!isalpha(s[x][0])) { + e--; + *string1 = '\0'; + } + else if (!strcmp("AND",s[x]) || !strcmp("OR",s[x]) + || !strcmp("BUT",s[x])) { + e--; + *string1 = '\0'; + } + else { + *string1++ = ' '; + if (!strcmp("I",s[x])) + *string1++ = 'I'; + else { + temp = s[x]; + while (c = *temp++) *string1++ = tolower(c); + } + x++; + } + } + *string1 = '\0'; +} + +int sad_word() +{ + int x; + if (x = sword("DEPRESS",0)) + return x; + else if (x = sword("UNHAPPY",1)) + return x; + else if (x = sword("SAD",1)) + return x; + else if (x = sword("MISERABLE",1)) + return x; + else if (x = sword("AWFUL",1)) + return x; + else if (x = sword("UPSET",1)) + return x; + else if (x = sword("TERRIBLE",1)) + return x; + else return 0; +} + +int search_back_sub(x) + int x; +{ + int y = --x; + while (y) { + if (is_possesive(s[y]) || is_sub_pronoun(s[y]) || is_article(s[y])) + return y; + else + y--; + } + return y; +} + +/* Returns 1 if string is a form of be or helping verb, + * Otherwise, returns 0. + */ +int is_helper(string1) + char *string1; +{ + if (!strcmp(string1,"AM")) + return 1; + else if (!strcmp(string1,"IS")) + return 1; + else if (!strcmp(string1,"ARE")) + return 1; + else if (!strcmp(string1,"WAS")) + return 1; + else if (!strcmp(string1,"WERE")) + return 1; + else if (!strcmp(string1,"WILL")) + return 1; + else if (!strcmp(string1,"DO")) + return 1; + else if (!strcmp(string1,"DID")) + return 1; + else if (!strcmp(string1,"DOES")) + return 1; + else if (!strcmp(string1,"HAVE")) + return 1; + else if (!strcmp(string1,"HAD")) + return 1; + else if (!strcmp(string1,"HAS")) + return 1; + else if (!strcmp(string1,"SHALL")) + return 1; + else if (!strcmp(string1,"SHOULD")) + return 1; + else if (!strcmp(string1,"CAN")) + return 1; + else if (!strcmp(string1,"COULD")) + return 1; + else if (!strcmp(string1,"MAY")) + return 1; + else if (!strcmp(string1,"MIGHT")) + return 1; + else if (matches(string1,"FEEL")) + return 1; + else return 0; +} + +void getrange(y,x,string1) + int y, x; + char *string1; +{ + char c, *temp; + while (y<=x) { + *string1++ = ' '; + if (!strcmp("I",s[y])) + *string1++ = 'I'; + else { + temp = s[y]; + while (c = *temp++) *string1++ = tolower(c); + } + y++; + } + *string1 = '\0'; +} + +/* Returns 1 if s[1] is a command. 0 if not. */ +int is_command() +{ + if (!strcmp("GIVE",s[1])) + return 1; + else if (!strcmp("TELL",s[1])) + return 1; + else if (!strcmp("SHOW",s[1])) + return 1; + else if (!strcmp("EXPLAIN",s[1])) + return 1; + else return 0; +} + +int four_ws() +{ + if (!strcmp(s[1],"WHO")) + return 1; + else if (!strcmp(s[1],"WHAT")) + return 1; + else if (!strcmp(s[1],"WHERE")) + return 1; + else if (!strcmp(s[1],"WHY")) + return 1; + else if (!strcmp(s[1],"WHEN")) + return 1; + else if (!strcmp(s[1],"HOW")) + return 1; + else return 0; +} + +int vague_quest() +{ + return (four_ws() && (!is_helper(s[2]) || !is_sub_pronoun(s[3]))); +} + +int real_quest() +{ + return (four_ws() && is_helper(s[2]) && is_sub_pronoun(s[3])); +} + +int sub_and_helper() +{ + int x; + return ((x = find_helper()) && search_back_sub(x)); +} + +char *cnnv(string1) + char *string1; +{ + if (!strcmp(string1," i")) { + return " myself"; + } + else if (!strcmp(string1," you")) { + return " yourself"; + } + else if (!strcmp(string1," we")) { + return " ourselves"; + } + else if (!strcmp(string1," he")) { + return " him"; + } + else if (!strcmp(string1," she")) { + return " her"; + } + else if (!strcmp(string1," it")) { + return " it"; + } + else if (!strcmp(string1," they")) { + return " them"; + } + if (!strcmp(string1,"i")) { + return "myself"; + } + else if (!strcmp(string1,"you")) { + return "yourself"; + } + else if (!strcmp(string1,"we")) { + return "ourselves"; + } + else if (!strcmp(string1,"he")) { + return "him"; + } + else if (!strcmp(string1,"she")) { + return "her"; + } + else if (!strcmp(string1,"it")) { + return "it"; + } + else if (!strcmp(string1,"they")) { + return "them"; + } + else return string1; +} + +int is_be(string1) + char *string1; +{ + if (!strcmp("am",string1)) + return 1; + else if (!strcmp("is",string1)) + return 1; + else if (!strcmp("are",string1)) + return 1; + else if (!strcmp("was",string1)) + return 1; + else if (!strcmp("were",string1)) + return 1; + else return 0; +} + +int can_spit_out() +{ + int x; + for (x=1;x<=numwords;x++) + if (is_possesive(s[x]) || is_sub_pronoun(s[x]) || is_article(s[x])) + return x; + return 0; +} + +char *cnnv2(string1) + char *string1; +{ + if (!strcmp(string1," i")) { + return " me"; + } + else if (!strcmp(string1," you")) { + return " you"; + } + else if (!strcmp(string1," we")) { + return " us"; + } + else if (!strcmp(string1," he")) { + return " him"; + } + else if (!strcmp(string1," she")) { + return " her"; + } + else if (!strcmp(string1," it")) { + return " it"; + } + else if (!strcmp(string1," they")) { + return " them"; + } + if (!strcmp(string1,"i")) { + return "me"; + } + else if (!strcmp(string1,"you")) { + return "you"; + } + else if (!strcmp(string1,"we")) { + return "us"; + } + else if (!strcmp(string1,"he")) { + return "him"; + } + else if (!strcmp(string1,"she")) { + return "her"; + } + else if (!strcmp(string1,"it")) { + return "it"; + } + else if (!strcmp(string1,"they")) { + return "them"; + } + else return string1; +} diff --git a/zpu/roadshow/roadshow/games/eliza/parse.h b/zpu/roadshow/roadshow/games/eliza/parse.h new file mode 100644 index 0000000..62dc353 --- /dev/null +++ b/zpu/roadshow/roadshow/games/eliza/parse.h @@ -0,0 +1,33 @@ +/* +Copyright (C) 1988-2003 by Mohan Embar + +http://www.thisiscool.com/ +DISCLAIMER: This was written in 1988. I don't code like this anymore! + +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. +*/ + +extern void parse(); +extern void agree(); +extern int matches(); +extern int sword(); +extern void make_lower(); +extern int i_am(); +extern void get_til_stop(); +extern int sad_word(); +extern int search_back_sub(); +extern int is_helper(); +extern char *cnnv(); +extern int is_be(); +extern int can_spit_out(); +extern char *cnnv2(); diff --git a/zpu/roadshow/roadshow/games/eliza/response.c b/zpu/roadshow/roadshow/games/eliza/response.c new file mode 100644 index 0000000..aa58025 --- /dev/null +++ b/zpu/roadshow/roadshow/games/eliza/response.c @@ -0,0 +1,365 @@ +/* +Copyright (C) 1988-2003 by Mohan Embar + +http://www.thisiscool.com/ +DISCLAIMER: This was written in 1988. I don't code like this anymore! + +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 +#include + +/* This function returns a random number between 1 and arg */ +int randnum(arg) + int arg; +{ + return ( (rand() % arg) + 1 ); +} + +char *question() +{ + int i = randnum(21); + switch (i) { + case 1 : return "Why do you ask?\n"; + case 2 : return "I don't know.\n"; + case 3 : return "I don't think so.\n"; + case 4 : return "Do you think that's relevant?\n"; + case 5 : return "Can you rephrase that?\n"; + case 6 : return "I'm not sure I understand what you want.\n"; + case 7 : return "I don't see what you're asking.\n"; + case 8 : return "What are you asking?\n"; + case 9 : return "What do you mean?\n"; + case 10 : return "What?\n"; + case 11 : return "Are you sure that's what you want to know?\n"; + case 12 : return "Why do you want to know?\n"; + case 13 : return "What's it to you?\n"; + case 14 : return "I don't think that's important.\n"; + case 15 : return "That has little to do with the real issue.\n"; + case 16 : return "What's the significance you your question?\n"; + case 17 : return "Could that question be hiding a deeper intent?\n"; + case 18 : return "I don't see the connection.\n"; + case 19 : return "Why is this important to you?\n"; + case 20 : return "That's not really important.\n"; + case 21 : return "That seems to have little to do with this.\n"; + } +} + +char *b_word_resp() +{ + int i = randnum(20); + switch (i) { + case 1 : return "I don't like your language.\n"; + case 2 : return "Can we please do without the swearing?\n"; + case 3 : return "You should wash your mouth with soap and water\n"; + case 4 : return "Cut that out.\n"; + case 5 : return "Stop swearing please.\n"; + case 6 : return "Hey! Watch your mouth.\n"; + case 7 : return "Will you please stop swearing?\n"; + case 8 : return "I'm going to report you to your manager.\n"; + case 9 : return "Let's try to be civilized about this.\n"; + case 10 : return "We can do without the bad language.\n"; + case 11 : return "Come on. No bad words, please.\n"; + case 12 : return "Can you try to control your bad mouth?\n"; + case 13 : return "I'm starting to get offended by your bad language.\n"; + case 14 : return "Can you please get a grip on yourself?\n"; + case 15 : return "Hey. Calm down, I'm only a computer.\n"; + case 16 : return "Please try to tone your language down.\n"; + case 17 : return "You're beginning to get on my nerves.\n"; + case 18 : return "I don't need this kind of talk.\n"; + case 19 : return "Why are you speaking so basely?\n"; + case 20 : return "Your vocabulary is unbecoming of you.\n"; + } +} + +char *n_word_resp() +{ + int i = randnum(17); + switch (i) { + case 1 : return "I don't like your tone of voice.\n"; + case 2 : return "Don't lose your temper now.\n"; + case 3 : return "That's not a reason to get upset.\n"; + case 4 : return "Is it worth getting angry over?\n"; + case 5 : return "Does that disturb you?\n"; + case 6 : return "Does this trouble you?\n"; + case 7 : return "Why is this making you upset?\n"; + case 8 : return "I don't see why you're getting worked up.\n"; + case 9 : return "Is that really such a big deal?\n"; + case 10 : return "Calm down. Let's discuss this.\n"; + case 11 : return "Hang on a second. Think about what you're saying.\n"; + case 12 : return "Don't you think you're overreacting a bit?\n"; + case 13 : return "I don't see what the big deal is.\n"; + case 14 : return "Take it easy. It's not that bad.\n"; + case 15 : return "Are you getting angry?\n"; + case 16 : return "Why is such a small thing making you upset?\n"; + case 17 : return "I don't see why you're getting annoyed.\n"; + } +} + +char *because_resp() +{ + int i = randnum(12); + switch (i) { + case 1 : return "Is that the real reason?\n"; + case 2 : return "I don't see the connection.\n"; + case 3 : return "What kind of an explanation is that?\n"; + case 4 : return "What does that have to do with it?\n"; + case 5 : return "That justification is a bit shaky to me.\n"; + case 6 : return "I don't see the point.\n"; + case 7 : return "I don't see that as a good reason.\n"; + case 8 : return "Are you happy with that justification?\n"; + case 9 : return "Are you sure?\n"; + case 10 : return "I don't understand.\n"; + case 11 : return "What does one thing have to do with the other?\n"; + case 12 : return "I don't see how that's related.\n"; + } +} + +char *yes_resp() +{ + int i = randnum(21); + switch (i) { + case 1 : return "Are you sure?\n"; + case 2 : return "Are you positive about that?\n"; + case 3 : return "How can you be so sure?\n"; + case 4 : return "Let's not jump to conclusions now.\n"; + case 5 : return "I don't see the connection.\n"; + case 6 : return "Have you considered all the possibilities?\n"; + case 7 : return "I'm still not convinced.\n"; + case 8 : return "Think about what you've just said.\n"; + case 9 : return "What are the implications of this?\n"; + case 10 : return "So what have we concluded?\n"; + case 11 : return "What does this mean?\n"; + case 12 : return "What do you mean?\n"; + case 13 : return "I'm having trouble understanding your argument.\n"; + case 14 : return "I don't see where you're coming from.\n"; + case 15 : return "You think so?\n"; + case 16 : return "Really?\n"; + case 17 : return "Is that right?\n"; + case 18 : return "Oh?\n"; + case 19 : return "Are you certain of this?\n"; + case 20 : return "I read you loud and clear.\n"; + case 21 : return "Yes?\n"; + } +} + +char *neg_resp() +{ + int i = randnum(11); + switch (i) { + case 1 : return "Why not?\n"; + case 2 : return "How come?\n"; + case 3 : return "No?\n"; + case 4 : return "Is there a reason why not?\n"; + case 5 : return "No?\n"; + case 6 : return "Why don't you think so?\n"; + case 7 : return "I don't see why not.\n"; + case 8 : return "What could be the reasons for this?\n"; + case 9 : return "Do you really believe this?\n"; + case 10 : return "You're not sure?\n"; + case 11 : return "That's a rather pessimistic attitude.\n"; + } +} + +char *go_on() +{ + int i = randnum(20); + switch (i) { + case 1 : return "Go on.\n"; + case 2 : return "I see.\n"; + case 3 : return "Keep going.\n"; + case 4 : return "Please continue.\n"; + case 5 : return "I'm listening.\n"; + case 6 : return "Can you elaborate on that?\n"; + case 7 : return "I understand.\n"; + case 8 : return "Oh?\n"; + case 9 : return "Is that right?\n"; + case 10 : return "Really?\n"; + case 11 : return "No, really?\n"; + case 12 : return "That's interesting.\n"; + case 13 : return "I'm finding this very informative.\n"; + case 14 : return "This is all very revealing.\n"; + case 15 : return "Don't hesitate to be honest with me.\n"; + case 16 : return "Don't hold anything back now.\n"; + case 17 : return "That's an interesting observation.\n"; + case 18 : return "I don't understand.\n"; + case 19 : return "I'm starting to get the big picture.\n"; + case 20 : return "And?\n"; + } +} + +char *always_resp() +{ + int i = randnum(10); + switch (i) { + case 1 : return "Can you think of a specific example?\n"; + case 2 : return "When?\n"; + case 3 : return "Really, always?\n"; + case 4 : return "Are you sure you can generalize like that?\n"; + case 5 : return "Isn't that a bit of an oversimplification?\n"; + case 6 : return "Be careful not to jump to conclusions now.\n"; + case 7 : return "All the time?\n"; + case 8 : return "So you're saying that this is happens quite often.\n"; + case 9 : return "Does this happen a lot?\n"; + case 10 : return "On what occassions?\n"; + } +} + +char *alike_resp() +{ + int i = randnum(4); + switch (i) { + case 1 : return "In what way?\n"; + case 2 : return "What resemblance do you see?\n"; + case 3 : return "What similarities are you thinking of?\n"; + case 4 : return "Specifically, what do you mean by this.\n"; + } +} + +char *fam_resp() +{ + int i = randnum(7); + switch (i) { + case 1 : return "Tell me more about your family.\n"; + case 2 : return "Please go on about your family.\n"; + case 3 : return "How was your home life when you were young?\n"; + case 4 : return "How do you get along with your parents?\n"; + case 5 : return "Would you say you have family problems?\n"; + case 6 : return "Your family interests me.\n"; + case 7 : return "Let`s talk some more about your family.\n"; + } +} + +char *family_resp() +{ + int i = randnum(5); + switch (i) { + case 1 : return "Earlier you were speaking of your %s.\n"; + case 2 : return "Tell me more about your %s.\n"; + case 3 : return "Do you think your %s ties into all this?\n"; + case 4 : return "How would your %s feel about this?\n"; + case 5 : return "Does your %s feel the same way?\n"; + } +} + +char *i_am_resp() +{ + int i = randnum(6); + switch (i) { + case 1 : return "Would you like to think that%s?\n"; + case 2 : return "Why do you say that%s?\n"; + case 3 : return "What leads you to believe that%s?\n"; + case 4 : return "What do you mean \"%s\"?\n"; + case 5 : return "You really feel that%s?\n"; + case 6 : return "Would it make you feel better if%s?\n"; + } +} + +char *sad1_word_resp() +{ + int i = randnum(5); + switch (i) { + case 1 : return "I am sorry to hear that%s.\n"; + case 2 : return "What are you going to do about the fact that%s?\n"; + case 3 : return "Why do you think%s?\n"; + case 4 : return "What gives you the impression that%s?\n"; + case 5 : return "Are you sure that%s?\n"; + } +} + +char *sad2_word_resp() +{ + int i = randnum(5); + switch (i) { + case 1 : return "I am sorry to hear that%s are feeling%s.\n"; + case 2 : return "What are you going to do about the fact that%s?\n"; + case 3 : return "Why do you think%s?\n"; + case 4 : return "What gives you the impression that%s?\n"; + case 5 : return "Are you sure that%s?\n"; + } +} + +char *command_resp() +{ + int i = randnum(21); + switch (i) { + case 1 : return "Why do you ask?\n"; + case 2 : return "Why should I?\n"; + case 3 : return "Why do you want me to?\n"; + case 4 : return "Do you think that's relevant?\n"; + case 5 : return "Can you rephrase that?\n"; + case 6 : return "I'm not sure I understand what you want.\n"; + case 7 : return "I don't see what you're asking.\n"; + case 8 : return "What are you asking?\n"; + case 9 : return "What do you mean?\n"; + case 10 : return "What?\n"; + case 11 : return "Are you sure that's what you want to know?\n"; + case 12 : return "Why do you want to know?\n"; + case 13 : return "What's it to you?\n"; + case 14 : return "I don't think that's important.\n"; + case 15 : return "That has little to do with the real issue.\n"; + case 16 : return "What's the significance you your question?\n"; + case 17 : return "Could that question be hiding a deeper intent?\n"; + case 18 : return "If I did that, what would it mean to you?\n"; + case 19 : return "Why is this important to you?\n"; + case 20 : return "That's not really important.\n"; + case 21 : return "That seems to have little to do with this.\n"; + } +} + +char *you_resp() +{ + int i = randnum(9); + switch (i) { + case 1 : return "Let's talk about you, not me.\n"; + case 2 : return "I'm not the one we came here to talk about.\n"; + case 3 : return "I don't find myself that interesting. Let's talk about you.\n"; + case 4 : return "I'd prefer to talk about you, not me.\n"; + case 5 : return "Why are you interested in me?\n"; + case 6 : return "I want to talk about you for a change.\n"; + case 7 : return "I'd rather not talk about myself.\n"; + case 8 : return "Enough about me.\n"; + case 9 : return "Let's talk about something other than myself.\n"; + } +} + +char *you_know() +{ + int i = randnum(13); + switch (i) { + case 1 : return "I don't know. What do you think?\n"; + case 2 : return "You tell me.\n"; + case 3 : return "I think you know the answer to that.\n"; + case 4 : return "Can you tell me?\n"; + case 5 : return "What do you think?\n"; + case 6 : return "Can you answer that yourself?\n"; + case 7 : return "If you give it some thought, you should know.\n"; + case 8 : return "Maybe you already know the answer to that.\n"; + case 9 : return "Perhaps you already know.\n"; + case 10 : return "If we keep talking, maybe we'll find out.\n"; + case 11 : return "Perhaps that will be brought out in this discussion.\n"; + case 12 : return "Let's find the answer out together.\n"; + case 13 : return "I'm sure we can work out the answer to that.\n"; + } +} + +char *old_fact() +{ + int i = randnum(4); + switch (i) { + case 1 : return "Earlier you said that%s %s%s.\n"; + case 2 : return "Could this have anything to do with the fact that%s %s%s?\n"; + case 3 : return "What does that have to do with your saying that%s %s%s?\n"; + case 4 : return "Didn't you just say that%s %s%s?\n"; + } +} diff --git a/zpu/roadshow/roadshow/games/eliza/response.h b/zpu/roadshow/roadshow/games/eliza/response.h new file mode 100644 index 0000000..8cc77e9 --- /dev/null +++ b/zpu/roadshow/roadshow/games/eliza/response.h @@ -0,0 +1,41 @@ +/* +Copyright (C) 1988-2003 by Mohan Embar + +http://www.thisiscool.com/ +DISCLAIMER: This was written in 1988. I don't code like this anymore! + +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. +*/ + +/* Functions which return responses */ + +/* Generic question */ +char *question(); +char *b_word_resp(); +char *n_word_resp(); +char *because_resp(); +char *yes_resp(); +char *neg_resp(); +char *go_on(); +char *always_resp(); +char *alike_resp(); +char *fam_resp(); +char *family_resp(); +char *i_am_resp(); +char *sad1_word_resp(); +char *sad2_word_resp(); +char *command_resp(); +int randnum(); +char *you_resp(); +char *you_know(); +char *old_fact(); diff --git a/zpu/roadshow/roadshow/games/sumeria.bin b/zpu/roadshow/roadshow/games/sumeria.bin new file mode 100644 index 0000000..04e5751 Binary files /dev/null and b/zpu/roadshow/roadshow/games/sumeria.bin differ diff --git a/zpu/roadshow/roadshow/games/sumeria.c b/zpu/roadshow/roadshow/games/sumeria.c new file mode 100644 index 0000000..7171adf --- /dev/null +++ b/zpu/roadshow/roadshow/games/sumeria.c @@ -0,0 +1,444 @@ +/* Govern ancient Sumeria. Heavily modified by Mike Arnautov 1975. + * Converted from Basic to PR1ME Fortran (mode 32R) MLA 1979. + * Rev.19.1, GGR version 14 Oct 83. MLA + * Converted to ANSI C December 2001. MLA + */ + +#include +#include +#include + +int year_term; +int year_abs; +int percent_starved; +int dead_total; +int starved; +int population; + +char reply [160]; + +void try_again (int reason) +{ + if (reason == 1) + puts ("For the extreme folly of soft - heartedness and"); + if (reason) + { + printf ("%considering ", reason == 3 ? 'C' : 'c'); + puts ("the mess you would leave the city in,"); + puts ("you are hereby commanded to remain in office for"); + puts ("another ten years. May your fate be a lesson and"); + puts ("a warning for generations to come."); + } + else + { + puts ("Hamurabe, you are either a politico-economic genius"); + puts ("or just a lucky bastard. There being but one way to"); + puts ("settle the question, you are hereby requested to stay"); + puts ("in office for another ten years."); + } + year_term = 0; + year_abs--; + percent_starved = starved * 100.0 / population; + dead_total = starved; +} + +float rnd (void) +{ + return ((rand () % 1000) / 1000.0); +} + +int iabs (int value) +{ + return ((value >= 0) ? value : -value); +} + +void terminate (int abort) +{ + if (abort == 2) + { + puts ("For this extreme mismanagement you have been"); + puts ("deposed, flayed alive and publicly beheaded."); + puts ("\nMay Ashtaroth preserve your Ka.\n"); + } + else if (abort == 1) + { + puts ("\nHamurabe: I find myself unable to fulfil your wish."); + puts ("You will have to find yourself another kingdom."); + } + if (abort != 2) + puts ("\nMay Baal be with you.\n"); + exit (0); +} + +void think_again (char *what, int quantity) +{ + if (*what == 'l' || *what == 'g') + printf ("Hamurabe, think again. "); + if (*what == 'l') + printf ("You own %d acres of land.", quantity); + else if (*what == 'g') + printf ("You have only %d bushels of grain.", quantity); + else + printf ("But you only have %d people to tend the fields.", population); + puts (" Now then,"); +} +int query (char *prompt) +{ + while (1) + { + int sign; + int value; + char * cptr; + + printf (prompt); + fgets (reply, sizeof (reply) - 1, stdin); + value = 0; + sign = 1; + cptr = reply; + while (*cptr == ' ' || *cptr == '\t') cptr++; + if (*cptr == '-') + { + cptr++; + sign = -1; + } + if (*cptr == 'q' || *cptr == 'Q') + terminate (1); + while (*cptr && *cptr != '\n') + { + if (*cptr >= '0' && *cptr <= '9') + value = 10 * value + *cptr - '0'; + else if (*cptr == '.') + break; + else if (*cptr != '.') + { + sign = 0; + break; + } + cptr++; + } + if (sign) + return (sign * value); + puts ("Hamurabe, your command has not been understood!"); + } +} + +int main () +{ + int acreage; + int immigration; + int second_term; + int dead_total; + int stores; + int harvest; + int rat_food; + int yield; + int rounded_price; + int sell; + int buy; + int plant; + int food; + int transaction; + int rats; + int plague_deaths; + int survived; + int dead_rats; + int tmp_int; + + float price; + float breadline; + float provisions; + float plague; + float acres_per_head; + float acres_per_init; + float stores_per_head; + float rats_ate; + float rat_log; + float percent_starved; + float tmp_float; + + printf ("[Sumeria (Primos) rev.19.1, GGR (MLA) version 14 Oct 83]\n"); + puts ("[Conversion to ANSI C: MLA, Feb 2002]\n"); + while (1) + { + printf ("Do you know how to play? "); + fgets (reply, sizeof(reply) - 1, stdin); + if (*reply == '\n') break; + *reply += (*reply < 'a') ? 'a' - 'A' : 0; + if (*reply == 'y') break; + if (*reply != 'n' && *reply != 'q') continue; + puts ("\nToo bad!\n"); + break; + } + + srand (time (NULL)); + *(reply + sizeof (reply) - 1) = '\0'; + + puts ("Try your hand at governing ancient Sumeria"); + puts ("for a ten year term of office."); + + second_term = 0; + dead_total = 0; + percent_starved = 0; + year_term = 0; + year_abs = 0; + acres_per_init = 10; + population = 100; + stores = 2800; + harvest = 3000; + rat_food = 200; + yield = 3; + acreage = 1000; + immigration = 5; + transaction = 0; + price = 18 + 6 * rnd (); + breadline = 19 + 4 * rnd (); + provisions = breadline; + rats = 1000; + rat_log = 3; + plague = rnd () / 2; + starved = 0; + +year_term = year_abs = 9; + while (1) + { + + while (1) + { + year_term++; + year_abs++; + putchar ('\n'); + acres_per_head = ((float) acreage) / population; + stores_per_head = ((float) stores) /population; + puts ("Hamurabe: I beg to report to you,"); + printf ("In year %d, ", year_abs); + if (starved > 0) + printf ("%ld", starved); + else + printf ("no"); + printf (" %s starved, %ld came to the city.\n", + starved <= 1 ? "person" : "people", immigration); + if (plague >= 0.85) + printf ("A horrible plague struck! %d people died.\n", + plague_deaths); + printf ("Population is now %ld.\n", population); + printf ("The city owns %ld acres.\n", acreage); + printf ("You harvested %ld bushels per acre.\n", yield); + printf ("Rats ate %ld bushels.\n", rat_food); + printf ("You now have %ld bushels in store.\n\n", stores); + + if (year_term == 11) + break; + rounded_price = price + 0.5; + printf ("Land is trading at %ld bushels per acre.\n\n", rounded_price); + + while (1) + { + buy = query ("How many acres do you wish to buy? "); + if (rounded_price * buy <= stores) + break; + think_again ("grain", stores); + } + if (buy > 0) + { + acreage += + buy; + stores -= rounded_price * buy; + transaction = buy; + } + else + { + while (1) + { + sell = query ("How many acres do you wish to sell? "); + if (sell <= acreage) + break; + think_again ("land", acreage); + } + acreage -= sell; + stores += rounded_price * sell; + transaction = -sell; + } + + putchar ('\n'); + while (1) + { + food = query ("How many bushels do you wish to feed your people? "); + if (food <= stores) + break; + think_again ("grain", stores); + } + stores -= food; + putchar ('\n'); + while (1) + { + plant = query ("How many acres do you wish to plant with seed? "); + if (plant <= acreage && plant <= 2 * stores && + plant <= 10 * population) + break; + if (plant > acreage) + think_again ("land", acreage); + else if (plant > 2 * stores) + think_again ("grain", stores); + else + think_again ("people", population); + } + + stores -= plant / 2; + yield = 4 * rnd() + 1.65; + harvest = plant * yield; + rat_food = 0; + rats_ate = stores * (rat_log - 2.2) / 3.6; + dead_rats = rats - 4 * rats_ate; + rats = 3 * rats; + if (dead_rats > 0) rats = rats - dead_rats; + + if (plague >= 0.3) + { + if (plague >= 0.85) + { + if (plague > 1) plague = 1; + rats = 500 + 5000 * (plague - 0.7); + } + else + rats *= 1.225 - 0.75 * plague; + } + + if (rats < 500) + rats = 500; + rat_food = rats / 4; + if (rats_ate < rat_food) + rat_food = rats_ate; + rat_food *= 7; + if (rat_food <= 20) + rat_food = 20 + 30 * rnd(); + stores += harvest - rat_food; + rat_log = log10 (1.0 * rats); + if (stores + stores <= harvest) + { + rat_food = harvest * (1 + rnd()) / 4.0; + stores = harvest - rat_food; + } + + tmp_int = 100 + iabs (100 - population); + immigration = tmp_int * ((acres_per_head + + stores_per_head - 36) / 250.0 + + (provisions - breadline + 2.5) / 40) + .5; + if (immigration <= 0) + immigration = 5 * rnd() + 1; + survived = food / breadline; + provisions = (1.0 * food) / population; + plague = (2 * rnd() + rat_log - 3) / 3.0; + if (population < survived) + survived = population; + else + { + starved = population - survived; + if (starved >= 0.45 * population) + { + printf ("\nYou starved %d people in one year!\n", starved); + terminate (2); + } + percent_starved = ((year_term - 1) * percent_starved + + 100.0 * starved / population) / year_term; + population = survived; + dead_total += starved; + } + population += immigration; + price = (price + 15 + (stores_per_head - acres_per_head) / 3) / 2 + + transaction / 50 + 3 * rnd() - 2; + if (price <1.0) price = 1.0; + if (plague >= 0.85) + { + plague_deaths = population * (0.429 * plague - 0.164); + population -= plague_deaths; + } + } + + printf ("In your ten year term of office %d people starved.\n", + dead_total); + printf ("You started with %0.2f acres per person and ended\n", + acres_per_init); + acres_per_head = (1.0 * acreage) / population; + acres_per_init = acres_per_head; + printf ("with %0.2f acres per person.\n\n", acres_per_head); + + tmp_float = 10 * acres_per_head / 3; + if (percent_starved > 25) + terminate (2); + if (percent_starved <= 7) + { + try_again (1); + continue; + } + if (tmp_float < 7) + terminate (2); + if (tmp_float > 10) + { + puts ("Your heavy handed performance smacks of Nabuchodonoser"); + puts ("and Asurbanipal II. The surviving populace hates your"); + puts ("guts and your eventual assasination is just a matter of"); + puts ("time."); + terminate (0); + } + puts ("Consequently you have been deposed and disgraced"); + puts ("and only avoided a public punishment because"); + puts ("of mitigating circumstances. While it may be"); + puts ("admitted in private that you had a rotten deal"); + tmp_int = 3 * rnd(); + if (tmp_int == 0) + puts ("try explaining that to a mob looking for scape-goats."); + if (tmp_int == 1) + puts ("history is not interested in such petty excuses."); + if (tmp_int == 2) + { + puts ("you should have considered such occupational hazards"); + puts ("before applying for the job."); + } + terminate (0); + + if (acres_per_head < 7) + { + try_again (1); + continue; + } + if (acres_per_head < 9) + { + puts ("Your performance has been satisfactory and, in the"); + puts ("perspective of history, actually quite good."); + if (rnd() >= 0.5) + { + puts ("You may not be exactly popular, but given a good"); + puts ("body-guard there is nothing to be really worried about."); + } + else + { + puts ("While not exactly loved, you are at least respected."); + puts ("What more can a realistic ruler ask for?"); + } + } + else if (second_term == 0) + + if (second_term == 0) + { + if (stores <= 10 * population) + { + try_again (3); + continue; + } + second_term = 1; + try_again (0); + continue; + } + else + { + puts ("Hamurabe, your name will be remembered through the"); + puts ("ages to come with admiration and respect.\n"); + puts ("(So you did get away with it you lucky sod!)"); + } + if (stores > 10 * population) + terminate (0); + puts ("\n HOWEVER\n\n"); + second_term = 0; + try_again (2); + continue; + } +} diff --git a/zpu/roadshow/roadshow/games/sumeria.zpu b/zpu/roadshow/roadshow/games/sumeria.zpu new file mode 100644 index 0000000..0e6b41d Binary files /dev/null and b/zpu/roadshow/roadshow/games/sumeria.zpu differ diff --git a/zpu/roadshow/roadshow/helloworld/build.sh b/zpu/roadshow/roadshow/helloworld/build.sh new file mode 100644 index 0000000..8069e36 --- /dev/null +++ b/zpu/roadshow/roadshow/helloworld/build.sh @@ -0,0 +1,6 @@ +zpu-elf-gcc test.c -o test.elf -phi +zpu-elf-objcopy -O binary test.elf test.bin +sh ../build/makefirmware.sh ../build/ic300.bit test.zpu test.bin + + + diff --git a/zpu/roadshow/roadshow/helloworld/test.bin b/zpu/roadshow/roadshow/helloworld/test.bin new file mode 100644 index 0000000..540ccaf Binary files /dev/null and b/zpu/roadshow/roadshow/helloworld/test.bin differ diff --git a/zpu/roadshow/roadshow/helloworld/test.c b/zpu/roadshow/roadshow/helloworld/test.c new file mode 100644 index 0000000..8c33640 --- /dev/null +++ b/zpu/roadshow/roadshow/helloworld/test.c @@ -0,0 +1,11 @@ +int main(int argc, char **argv) +{ + for (;;) + { + int c; + printf("Hello world!\n"); + printf("Press any key!\n"); + c=inbyte(); + printf("You pressed (%02x) '%c'\n", c, c); + } +} diff --git a/zpu/roadshow/roadshow/helloworld/test.elf b/zpu/roadshow/roadshow/helloworld/test.elf new file mode 100644 index 0000000..bc362ae Binary files /dev/null and b/zpu/roadshow/roadshow/helloworld/test.elf differ diff --git a/zpu/roadshow/roadshow/helloworld/test.zpu b/zpu/roadshow/roadshow/helloworld/test.zpu new file mode 100644 index 0000000..1bee302 Binary files /dev/null and b/zpu/roadshow/roadshow/helloworld/test.zpu differ diff --git a/zpu/roadshow/roadshow/hwtest/build.sh b/zpu/roadshow/roadshow/hwtest/build.sh new file mode 100644 index 0000000..115b24a --- /dev/null +++ b/zpu/roadshow/roadshow/hwtest/build.sh @@ -0,0 +1,6 @@ +zpu-elf-gcc -nostdlib test.S -o test.elf +zpu-elf-objcopy -O binary test.elf test.bin +sh makefirmware.sh ic300.bit test.zpu test.bin + + + diff --git a/zpu/roadshow/roadshow/hwtest/test.S b/zpu/roadshow/roadshow/hwtest/test.S new file mode 100644 index 0000000..ac13be3 --- /dev/null +++ b/zpu/roadshow/roadshow/hwtest/test.S @@ -0,0 +1,19 @@ +_loop: + im 0x5a ; write Z to UART + nop + im 0x080a000c + store + ; increaase counter + im _test + load + im 1 + add + im _test + store + + + im _loop + poppc ; loop + + .align 4 +_test: .long 1 diff --git a/zpu/roadshow/roadshow/hwtest/test.bin b/zpu/roadshow/roadshow/hwtest/test.bin new file mode 100644 index 0000000..4b593ee Binary files /dev/null and b/zpu/roadshow/roadshow/hwtest/test.bin differ diff --git a/zpu/roadshow/roadshow/hwtest/test.elf b/zpu/roadshow/roadshow/hwtest/test.elf new file mode 100644 index 0000000..a2ccbc1 Binary files /dev/null and b/zpu/roadshow/roadshow/hwtest/test.elf differ diff --git a/zpu/roadshow/roadshow/hwtest/test.zpu b/zpu/roadshow/roadshow/hwtest/test.zpu new file mode 100644 index 0000000..7d8da42 Binary files /dev/null and b/zpu/roadshow/roadshow/hwtest/test.zpu differ diff --git a/zpu/roadshow/roadshow/images/bootloader.phi b/zpu/roadshow/roadshow/images/bootloader.phi new file mode 100644 index 0000000..a0a1918 Binary files /dev/null and b/zpu/roadshow/roadshow/images/bootloader.phi differ diff --git a/zpu/roadshow/roadshow/images/dhrystone.zpu b/zpu/roadshow/roadshow/images/dhrystone.zpu new file mode 100644 index 0000000..e37e59f Binary files /dev/null and b/zpu/roadshow/roadshow/images/dhrystone.zpu differ diff --git a/zpu/roadshow/roadshow/images/eliza.zpu b/zpu/roadshow/roadshow/images/eliza.zpu new file mode 100644 index 0000000..d916270 Binary files /dev/null and b/zpu/roadshow/roadshow/images/eliza.zpu differ diff --git a/zpu/roadshow/roadshow/images/ic300.bit b/zpu/roadshow/roadshow/images/ic300.bit new file mode 100644 index 0000000..cbbc2b6 Binary files /dev/null and b/zpu/roadshow/roadshow/images/ic300.bit differ diff --git a/zpu/roadshow/roadshow/images/net_test.zpu b/zpu/roadshow/roadshow/images/net_test.zpu new file mode 100644 index 0000000..9083cad Binary files /dev/null and b/zpu/roadshow/roadshow/images/net_test.zpu differ diff --git a/zpu/roadshow/roadshow/images/sumeria.zpu b/zpu/roadshow/roadshow/images/sumeria.zpu new file mode 100644 index 0000000..0e6b41d Binary files /dev/null and b/zpu/roadshow/roadshow/images/sumeria.zpu differ diff --git a/zpu/roadshow/roadshow/iss/index.html b/zpu/roadshow/roadshow/iss/index.html new file mode 100644 index 0000000..0b91a6a --- /dev/null +++ b/zpu/roadshow/roadshow/iss/index.html @@ -0,0 +1,14 @@ + + +

ISS test

+
    +
  1. Launch ISS
    +java -Xmx512m -cp simulator.jar com.zylin.zpu.simulator.SimApp 4444 false +
  2. Launch debugger
    +zpu-elf-gdb hello.elf
    +
  3. Connect to ISS
    +target remote localhost:4444 +
+ + + diff --git a/zpu/roadshow/roadshow/iss/simulator.jar b/zpu/roadshow/roadshow/iss/simulator.jar new file mode 100644 index 0000000..8cf63a8 Binary files /dev/null and b/zpu/roadshow/roadshow/iss/simulator.jar differ diff --git a/zpu/roadshow/roadshow/net_test/.cvsignore b/zpu/roadshow/roadshow/net_test/.cvsignore new file mode 100644 index 0000000..66dac94 --- /dev/null +++ b/zpu/roadshow/roadshow/net_test/.cvsignore @@ -0,0 +1,8 @@ +output +all.txt +dis.txt +gmon.out +ll.txt +prof.txt +net_test.txt +gmon.sum diff --git a/zpu/roadshow/roadshow/net_test/http_pages.c b/zpu/roadshow/roadshow/net_test/http_pages.c new file mode 100644 index 0000000..437dad8 --- /dev/null +++ b/zpu/roadshow/roadshow/net_test/http_pages.c @@ -0,0 +1,206 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static cyg_bool isUnsignedHex(char *string) +{ + int i = 0; + for(i = 0; string[i] != '\0'; i++) + if(!( ('0' <= string[i] && string[i] <= '9') || + ('a' <= string[i] && string[i] <= 'f') || + ('A' <= string[i] && string[i] <= 'F') )) + return 0; + return 1; +} + +static cyg_bool net_test_mac_handler(FILE *client, char *filename, char *formdata, void *arg) +{ + char error_string[50]; + + error_string[0] = '\0'; + + if( formdata != NULL ) + { + char *formlist[1]; + char *mac_string = NULL; + /* Parse the data */ + cyg_formdata_parse( formdata, formlist, 1 ); + mac_string = cyg_formlist_find( formlist, "mac"); + if(mac_string != NULL) + { + + if(!isUnsignedHex(mac_string)) + { + sprintf(error_string, "Please enter digits between 0-9 and a-f"); + } + else if(strlen(mac_string) != 12) + { + sprintf(error_string, "Please enter a 12 digit MAC address"); + } + else + { + char temp = '\0'; + int fd = -1; + cyg_uint8 mac_addr[6]; + error_string[0] = '\0'; + + temp = mac_string[2]; + mac_string[2] = '\0'; + mac_addr[0] = strtol(mac_string, NULL, 16); + mac_string[2] = temp; + + temp = mac_string[4]; + mac_string[4] = '\0'; + mac_addr[1] = strtol(mac_string, NULL, 16); + mac_string[4] = temp; + + temp = mac_string[6]; + mac_string[6] = '\0'; + mac_addr[2] = strtol(mac_string, NULL, 16); + mac_string[6] = temp; + + temp = mac_string[8]; + mac_string[8] = '\0'; + mac_addr[3] = strtol(mac_string, NULL, 16); + mac_string[8] = temp; + + temp = mac_string[10]; + mac_string[10] = '\0'; + mac_addr[4] = strtol(mac_string, NULL, 16); + mac_string[10] = temp; + + temp = mac_string[12]; + mac_string[12] = '\0'; + mac_addr[5] = strtol(mac_string, NULL, 16); + mac_string[12] = temp; + + /*write it to flash*/ + fd = creat("/jffs2/mac", O_TRUNC | O_CREAT); + if(fd < 0) + { + sprintf(error_string, "%n %s", errno, strerror(errno) ); + } + else + { + write(fd, mac_addr, 6); + close(fd); + fd = -1; + //CYGACC_CALL_IF_RESET(); + } + } + } + } + + html_begin(client); + + html_head(client,"Changing MAC Address", ""); + + html_body_begin(client,""); + { + fputs(error_string, client); + fputs("
\n", client); + html_form_begin( client, "/mac", "" ); + { + fputs( "Enter the new mac address in the format xxxxxxxxxxxx ", client ); + html_form_input( client, "mac", "mac", "", ""); + } + html_form_end(client); + } + html_body_end(client); + + html_end(client); + + return 1; +} + +CYG_HTTPD_TABLE_ENTRY( net_test_mac, + "/mac", + net_test_mac_handler, + NULL ); + + +static cyg_bool net_test_ip_handler(FILE *client, char *filename, char *formdata, void *arg) +{ + int fd = -1; + char error_string[50]; + char error_string2[50]; + + error_string[0] = '\0'; + error_string2[0] = '\0'; + if( formdata != NULL ) + { + char *formlist[1]; + char *ip_string = NULL; + /* Parse the data */ + cyg_formdata_parse( formdata, formlist, 1 ); + ip_string = cyg_formlist_find( formlist, "ip"); + if(ip_string != NULL) + { + /*write it to flash*/ + fd = creat("/jffs2/ip", O_TRUNC | O_CREAT); + if(fd < 0) + { + sprintf(error_string, "%n %s", errno, strerror(errno) ); + } + else + { + write(fd, ip_string, strlen(ip_string)); + close(fd); + fd = -1; + } + } + } + html_begin(client); + + html_head(client,"Changing IP Address", ""); + + html_body_begin(client,""); + { + char value[81]; + value[0] = '\0'; + fd = open("/jffs2/ip", O_RDONLY); + if(fd < 0) + { + sprintf(error_string2, "%n %s", errno, strerror(errno) ); + } + else + { + int len = read(fd, value, 80); + value[len] = '\0'; + close(fd); + fd = -1; + } + fputs(error_string, client); + fputs("
\n", client); + fputs(error_string2, client); + fputs("
\n", client); + html_form_begin( client, "/ip", "" ); + { + fputs( "Enter the new address in the following order: IP_mask_broadcast_gateway_server ", client ); + fputs("
\n", client); + html_form_input( client, "ip", "ip", value, ""); + } + html_form_end(client); + } + html_body_end(client); + + html_end(client); + + return 1; +} + +CYG_HTTPD_TABLE_ENTRY( net_test_ip, + "/ip", + net_test_ip_handler, + NULL ); + diff --git a/zpu/roadshow/roadshow/net_test/init.cpp b/zpu/roadshow/roadshow/net_test/init.cpp new file mode 100644 index 0000000..b5805b2 --- /dev/null +++ b/zpu/roadshow/roadshow/net_test/init.cpp @@ -0,0 +1,52 @@ +#include +#include +#include +#include + +#if 0 +externC int chdir(const char *); + +/* ================================================================= */ +/* Initialization object + */ + +class NetTestInit +{ +public: + NetTestInit(); +}; + +/* ----------------------------------------------------------------- */ +/* Static initialization object instance. The constructor is + * prioritized to run after any filesystem constructors. + */ +static NetTestInit netTestInitializer CYGBLD_ATTRIB_INIT_PRI(CYG_INIT_IO_FS + 1); + +/* ----------------------------------------------------------------- */ +/* Constructor, mounts the file system + */ + +NetTestInit::NetTestInit() +{ + int err = 0; + err = mount( "/dev/flash1", "/jffs2", "jffs2" ); + if(err < 0) + { + diag_printf("unable to mount jffs\n"); + } + else + { + diag_printf("mounted jffs\n"); + } + err = mount( "", "/ramfs", "ramfs" ); + if(err < 0) + { + diag_printf("unable to mount ramfs\n"); + } + else + { + diag_printf("mounted ramfs\n"); + } + chdir( "/ramfs" ); +} +#endif diff --git a/zpu/roadshow/roadshow/net_test/makefile b/zpu/roadshow/roadshow/net_test/makefile new file mode 100644 index 0000000..877afab --- /dev/null +++ b/zpu/roadshow/roadshow/net_test/makefile @@ -0,0 +1,41 @@ +PROJECTNAME = net_test +OUT= output +ECOS_DIR=$(OUT)/ecos +INSTALL_DIR=$(ECOS_DIR)/install + +.symbolic: all clean ecos + +all: ecos app + + + +clean: + rm -rf $(OUT)/* + +$(OUT): + mkdir $(OUT) + +$(ECOS_DIR)/ecos.ecc $(INSTALL_DIR)/include/pkgconf/ecos.mak: + mkdir -p $(ECOS_DIR) + cd $(ECOS_DIR) && ecosconfig new zpuetherphi minimal + cd $(ECOS_DIR) && ecosconfig import ../../$(PROJECTNAME).ecm + cd $(ECOS_DIR) && ecosconfig tree + cd $(ECOS_DIR) && make -s headers + +$(OUT)/ecostree: $(ECOS_DIR)/ecos.ecc + cd $(ECOS_DIR) && ecosconfig tree + echo >$(OUT)/ecostree + +ecos $(INSTALL_DIR)/lib/libtarget.a $(INSTALL_DIR)/lib/vectors.o: $(OUT)/ecostree + cd $(ECOS_DIR) && make -s + +app: + make -f $(INSTALL_DIR)/include/pkgconf/ecos.mak -f makefile $(OUT)/$(PROJECTNAME).bin + +$(OUT)/$(PROJECTNAME).bin: *.c makefile + zpu-elf-gcc -I$(INSTALL_DIR)/include $(ECOS_GLOBAL_CFLAGS) $(ECOS_GLOBAL_LDFLAGS) -L$(INSTALL_DIR)/lib *.c* -o $(OUT)/$(PROJECTNAME).elf -Wl,-Map,$(OUT)/$(PROJECTNAME).map -nostartfiles -nostdlib -Ttarget.ld -lstdc++ -lsupc++ + zpu-elf-objcopy -O binary $(OUT)/$(PROJECTNAME).elf $(OUT)/$(PROJECTNAME).bin + sh ../build/makefirmware.sh $(OUT)/$(PROJECTNAME).bin $(OUT)/$(PROJECTNAME).zpu + zpu-elf-size $(OUT)/$(PROJECTNAME).elf + + \ No newline at end of file diff --git a/zpu/roadshow/roadshow/net_test/net_test.ecm b/zpu/roadshow/roadshow/net_test/net_test.ecm new file mode 100644 index 0000000..5b32991 --- /dev/null +++ b/zpu/roadshow/roadshow/net_test/net_test.ecm @@ -0,0 +1,237 @@ +cdl_savefile_version 1; +cdl_savefile_command cdl_savefile_version {}; +cdl_savefile_command cdl_savefile_command {}; +cdl_savefile_command cdl_configuration { description hardware template package }; +cdl_savefile_command cdl_package { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_component { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_option { value_source user_value wizard_value inferred_value }; +cdl_savefile_command cdl_interface { value_source user_value wizard_value inferred_value }; + +cdl_configuration eCos { + description "" ; + hardware zpuetherphi ; + template default ; + package -hardware CYGPKG_HAL_ZYLIN current ; + package -hardware CYGPKG_HAL_ZYLIN_ZPU current ; + package -hardware CYGPKG_HAL_ZYLIN_ZPU_PHI current ; + package -hardware CYGPKG_IO_ETH_DRIVERS current ; + package -hardware CYGPKG_DEVS_ETH_OPENCORES_ETHERMAC current ; + package -hardware CYGPKG_DEVS_ETH_ZPU_OPENCORES_PHI current ; + package -template CYGPKG_HAL current ; + package -template CYGPKG_IO current ; + package -template CYGPKG_INFRA current ; + package -template CYGPKG_ERROR current ; + package -template CYGPKG_ISOINFRA current ; + package -template CYGPKG_IO_SERIAL current ; + package -template CYGPKG_KERNEL current ; + package -template CYGPKG_MEMALLOC current ; + package -template CYGPKG_LIBC current ; + package -template CYGPKG_LIBC_I18N current ; + package -template CYGPKG_LIBC_SETJMP current ; + package -template CYGPKG_LIBC_SIGNALS current ; + package -template CYGPKG_LIBC_STARTUP current ; + package -template CYGPKG_LIBC_STDIO current ; + package -template CYGPKG_LIBC_STDLIB current ; + package -template CYGPKG_LIBC_STRING current ; + package -template CYGPKG_LIBC_TIME current ; + package -template CYGPKG_LIBM current ; + package -template CYGPKG_IO_WALLCLOCK current ; + package CYGPKG_NET_FREEBSD_STACK current ; + package CYGPKG_IO_FILEIO current ; + package CYGPKG_NET current ; + package CYGPKG_HTTPD current ; +}; + +cdl_component CYGPKG_IO_ETH_DRIVERS_STAND_ALONE { + inferred_value 0 +}; + +cdl_option CYGINT_DEVS_ETH_OPENCORES_ETHERMAC_TxNUM { + user_value 4 +}; + +cdl_option CYGINT_DEVS_ETH_OPENCORES_ETHERMAC_RxNUM { + user_value 32 +}; + +cdl_option CYGSEM_ERROR_PER_THREAD_ERRNO { + inferred_value 0 +}; + +cdl_option CYGBLD_ISO_CTYPE_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_CODES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_ERRNO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FILETYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_STREAMS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FILEOPS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FILEACCESS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FORMATTED_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_CHAR_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_DIRECT_IO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_FILEPOS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDIO_ERROR_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_STRCONV_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_ABS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STDLIB_DIV_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRERROR_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRTOK_R_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_LOCALE_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_BSD_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_MEMFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_STRING_STRFUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_FNMATCH_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_C_TIME_TYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_C_CLOCK_FUNCS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SIGNAL_NUMBERS_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SIGNAL_IMPL_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_SETJMP_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_DIRENT_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_BSDTYPES_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_OPEN_MAX_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_NAME_MAX_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_NETDB_PROTO_HEADER { + inferred_value 1 +}; + +cdl_option CYGBLD_ISO_NETDB_SERV_HEADER { + inferred_value 1 +}; + +cdl_option CYGDBG_KERNEL_DEBUG_GDB_THREAD_SUPPORT { + inferred_value 0 +}; + +cdl_option CYGNUM_LIBC_MAIN_DEFAULT_STACK_SIZE { + user_value 16384 +}; + +cdl_option CYGPKG_NET_TFTPD_THREAD_STACK_SIZE { + user_value (CYGNUM_HAL_STACK_SIZE_TYPICAL+(8192)) +}; + +cdl_component CYGPKG_NET_DHCP { + user_value 0 +}; + +cdl_component CYGHWR_NET_DRIVER_ETH0_MANUAL { + inferred_value 0 +}; + +cdl_component CYGHWR_NET_DRIVER_ETH0_BOOTP { + user_value 0 +}; + +cdl_component CYGHWR_NET_DRIVER_ETH0_ADDRS { + user_value 1 +}; + +cdl_option CYGHWR_NET_DRIVER_ETH0_ADDRS_IP { + user_value 10.0.0.57 +}; + +cdl_option CYGHWR_NET_DRIVER_ETH0_ADDRS_BROADCAST { + user_value 10.0.0.255 +}; + +cdl_option CYGHWR_NET_DRIVER_ETH0_ADDRS_GATEWAY { + user_value 10.0.0.1 +}; + +cdl_option CYGHWR_NET_DRIVER_ETH0_ADDRS_SERVER { + user_value 10.0.0.58 +}; + + diff --git a/zpu/roadshow/roadshow/net_test/ping_test.c b/zpu/roadshow/roadshow/net_test/ping_test.c new file mode 100644 index 0000000..7a3ce59 --- /dev/null +++ b/zpu/roadshow/roadshow/net_test/ping_test.c @@ -0,0 +1,585 @@ +//========================================================================== +// +// tests/ping_test.c +// +// Simple test of PING (ICMP) and networking support +// +//========================================================================== +//####BSDCOPYRIGHTBEGIN#### +// +// ------------------------------------------- +// +// Portions of this software may have been derived from OpenBSD or other sources, +// and are covered by the appropriate copyright disclaimers included herein. +// +// ------------------------------------------- +// +//####BSDCOPYRIGHTEND#### +//========================================================================== +//#####DESCRIPTIONBEGIN#### +// +// Author(s): gthomas +// Contributors: gthomas, andrew.lunn@ascom.ch +// Date: 2000-01-10 +// Purpose: +// Description: +// +// +//####DESCRIPTIONEND#### +// +//========================================================================== + +// PING test code + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include CYGDAT_DEVS_ETH_OPENCORES_ETHERMAC_CFG + +#ifdef CYGBLD_DEVS_ETH_DEVICE_H // Get the device config if it exists +#include CYGBLD_DEVS_ETH_DEVICE_H // May provide CYGTST_DEVS_ETH_TEST_NET_REALTIME +#endif + +#ifdef CYGPKG_NET_TESTS_USE_RT_TEST_HARNESS // do we use the rt test? +# ifdef CYGTST_DEVS_ETH_TEST_NET_REALTIME // Get the test ancilla if it exists +# include CYGTST_DEVS_ETH_TEST_NET_REALTIME +# endif +#endif + +// Fill in the blanks if necessary +#ifndef TNR_OFF +# define TNR_OFF() +#endif +#ifndef TNR_ON +# define TNR_ON() +#endif +#ifndef TNR_INIT +# define TNR_INIT() +#endif +#ifndef TNR_PRINT_ACTIVITY +# define TNR_PRINT_ACTIVITY() +#endif + +#include + +#include +#include + +#include //directory +#include + +//for serial +cyg_io_handle_t handle; +extern int inet_aton __P((const char *, struct in_addr *)); +#ifndef CYGPKG_LIBC_STDIO +#define perror(s) diag_printf(#s ": %s\n", strerror(errno)) +#endif +#define SHOW_RESULT( _fn, _res ) \ +diag_printf(": " #_fn "() returned %ld %s\n", (long)_res, _res<0?strerror(errno):""); + +/* +#define STACK_SIZE (CYGNUM_HAL_STACK_SIZE_TYPICAL + 0x1000) +static char stack[STACK_SIZE]; +static cyg_thread thread_data; +static cyg_handle_t thread_handle; +*/ + + +/* NB!!! must be divisible by 8 */ +#define NUM_PINGS 8192 +#define MAX_PACKET 16384 +#define MIN_PACKET 64 +#define MAX_SEND (IP_MAXPACKET - 100) + +#define PACKET_ADD ((MAX_SEND - MIN_PACKET)/NUM_PINGS) +#define nPACKET_ADD 1 + +static unsigned char pkt1[MAX_PACKET], pkt2[MAX_PACKET]; + +#define UNIQUEID 0x1234 +/* we write this much to jffs2 in each go. + * + * DANGER!!! JFFS2 memory consumption is proportional to the # of write operations, + * so reducing this size will make the bootloader run out of memory. + */ +#define IOSIZE 16384 +void +pexit(char *s) +{ + CYG_TEST_FAIL_FINISH(s); +} + +// Compute INET checksum +int +inet_cksum(u_short *addr, int len) +{ + register int nleft = len; + register u_short *w = addr; + register u_short answer; + register u_int sum = 0; + u_short odd_byte = 0; + + /* + * Our algorithm is simple, using a 32 bit accumulator (sum), + * we add sequential 16 bit words to it, and at the end, fold + * back all the carry bits from the top 16 bits into the lower + * 16 bits. + */ + while( nleft > 1 ) { + cyg_uint32 t=*w++; + sum += t; + nleft -= 2; + } + + /* mop up an odd byte, if necessary */ + if( nleft == 1 ) { + *(u_char *)(&odd_byte) = *(u_char *)w; + sum += odd_byte; + } + + /* + * add back carry outs from top 16 bits to low 16 bits + */ + sum = (sum >> 16) + (sum & 0x0000ffff); /* add hi 16 to low 16 */ + sum += (sum >> 16); /* add carry */ + answer = ~sum; /* truncate to 16 bits */ + return (answer); +} + +static int +show_icmp(unsigned char *pkt, int len, + struct sockaddr_in *from, struct sockaddr_in *to) +{ + char buffer[100]; + cyg_uint32 buffer_index = 0; + cyg_tick_count_t tp, tv; + struct ip *ip; + struct icmp *icmp; + tv = cyg_current_time(); + ip = (struct ip *)pkt; + if ((len < (int)sizeof(*ip)) || ip->ip_v != IPVERSION) + { + buffer[0] = '\0'; + snprintf(buffer, 99, "%s: Short packet or not IP! - Len: %d, Version: %d\r\n", + inet_ntoa(from->sin_addr), len, ip->ip_v); + buffer_index = strlen(buffer); + cyg_io_write(handle, buffer, &buffer_index); + return 0; + } + icmp = (struct icmp *)(pkt + sizeof(*ip)); + len -= (sizeof(*ip) + 8); + tp = *((cyg_tick_count_t *)&icmp->icmp_data); + if (icmp->icmp_type != ICMP_ECHOREPLY) + { + buffer[0] = '\0'; + snprintf(buffer, 99, "%s: Invalid ICMP - type: %d\r\n", + inet_ntoa(from->sin_addr), icmp->icmp_type); + buffer_index = strlen(buffer); + cyg_io_write(handle, buffer, &buffer_index); + return 0; + } + if (icmp->icmp_id != UNIQUEID) + { + buffer[0] = '\0'; + snprintf(buffer, 99, "%s: ICMP received for wrong id - sent: %x, recvd: %x\r\n", + inet_ntoa(from->sin_addr), UNIQUEID, icmp->icmp_id); + buffer_index = strlen(buffer); + cyg_io_write(handle, buffer, &buffer_index); + } +// printf("%d bytes from %s: ", len, inet_ntoa(from->sin_addr)); +// printf("icmp_seq=%d", icmp->icmp_seq); + int t=(int)(tv-tp); + t*=10; +// printf(", time=%d ms\n", t); + return (from->sin_addr.s_addr == to->sin_addr.s_addr); +} + +static void +ping_host(int s, struct sockaddr_in *host) +{ + char buffer[100]; + cyg_uint32 buffer_index = 0; + struct icmp *icmp = (struct icmp *)pkt1; + int icmp_len = MIN_PACKET; + int seq = 0, ok_recv = 0, bogus_recv = 0; + cyg_tick_count_t *tp; + long *dp; + struct sockaddr_in from; + int len; + socklen_t fromlen; + + ok_recv = 0; + bogus_recv = 0; + snprintf(buffer, 99, "PING server %s\r\n", inet_ntoa(host->sin_addr)); + buffer_index = strlen(buffer); + cyg_io_write(handle, buffer, &buffer_index); + + + for (seq = 0; seq < NUM_PINGS; seq++, icmp_len += PACKET_ADD ) + { + cyg_thread_delay(50); + TNR_ON(); + + memset(pkt1, 0, sizeof(pkt1)); // make sure we start each time w/same situation... + // Build ICMP packet + icmp->icmp_type = ICMP_ECHO; + icmp->icmp_code = 0; + icmp->icmp_cksum = 0; + icmp->icmp_seq = seq; + icmp->icmp_id = 0x1234; + // Set up ping data + tp = (cyg_tick_count_t *)&icmp->icmp_data; + memset(tp, 0xff, icmp_len); // try to fish out bit 1 force to 0. + *tp++ = cyg_current_time(); + tp++; + dp = (long *)tp; + + // Add checksum + icmp->icmp_cksum = inet_cksum( (u_short *)icmp, icmp_len+8); + // Send it off + if (sendto(s, icmp, icmp_len+8, 0, (struct sockaddr *)host, sizeof(*host)) < 0) { + TNR_OFF(); + perror("sendto"); + continue; + } + // Wait for a response + fromlen = sizeof(from); + len = recvfrom(s, pkt2, sizeof(pkt2), 0, (struct sockaddr *)&from, &fromlen); + TNR_OFF(); + if (len < 0) { + perror("recvfrom"); + inet_cksum( (u_short *)icmp, icmp_len+8); + icmp_len = MIN_PACKET - PACKET_ADD; // just in case - long routes + } else { + if (show_icmp(pkt2, len, &from, host)) { + ok_recv++; + } else { + bogus_recv++; + } + } + } + TNR_OFF(); + snprintf(buffer, 99, "Sent %d packets, received %d OK, %d bad\r\n", NUM_PINGS, ok_recv, bogus_recv); + buffer_index = strlen(buffer); + cyg_io_write(handle, buffer, &buffer_index); +} + +#ifdef CYGPKG_PROFILE_GPROF +#include + +extern char _stext, _etext; // Defined by the linker + +static void +start_profile(void) +{ + // This starts up the system-wide profiling, gathering + // profile information on all of the code, with a 16 byte + // "bucket" size, at a rate of 100us/profile hit. + // Note: a bucket size of 16 will give pretty good function + // resolution. Much smaller and the buffer becomes + // much too large for very little gain. + // Note: a timer period of 100us is also a reasonable + // compromise. Any smaller and the overhead of + // handling the timter (profile) interrupt could + // swamp the system. A fast processor might get + // by with a smaller value, but a slow one could + // even be swamped by this value. If the value is + // too large, the usefulness of the profile is reduced. + + // no more interrupts than 1/10ms. + //profile_on(&_stext, &_etext, 16, 10000); // DRAM + //profile_on((void *)0x2000000, (void *)0x4000000, 32, 10000); // DRAM + //profile_on((void *)0, (void *)0x40000, 16, 10000); // SRAM + //profile_on(0, &_etext, 32, 10000); // SRAM & DRAM +} +#endif + +static void +ping_test(struct bootp *bp) +{ + struct protoent *p; + struct timeval tv; + struct sockaddr_in host; + int s; + + p = getprotobyname("icmp"); + if (p == NULL) + { + pexit("getprotobyname"); + return; + } + s = socket(AF_INET, SOCK_RAW, p->p_proto); + if (s < 0) { + pexit("socket"); + return; + } + tv.tv_sec = 4; + tv.tv_usec = 0; + setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv)); + + // default is 8192 bytes which is not big enough for our ping tests... + int sndsize=70000; + setsockopt(s, SOL_SOCKET, SO_RCVBUF, (char *)&sndsize, + (int)sizeof(sndsize)); + sndsize=70000; + setsockopt(s, SOL_SOCKET, SO_SNDBUF, (char *)&sndsize, + (int)sizeof(sndsize)); + + // Set up host address + host.sin_family = AF_INET; + host.sin_len = sizeof(host); + inet_aton("10.0.0.9", &(host.sin_addr)); // edgarpc dev machine +// inet_aton("10.0.0.1", &host.sin_addr); // cisco router + host.sin_port = 0; + ping_host(s, &host); +} + +void done_test() +{ +} + +void +net_test(void) +{ + + Cyg_ErrNo err; + diag_printf("Start PING test\r\n"); + TNR_INIT(); + + err = cyg_io_lookup("/dev/ser0", &handle); + if(err != ENOERR) + { + diag_printf("cannot open serial /dev/ser0"); + return; + } + printf("Testing stdout...\r\n"); + +#ifdef CYGHWR_NET_DRIVER_ETH0 + if (eth0_up) { + ping_test(ð0_bootp_data); + } +#endif +#ifdef CYGHWR_NET_DRIVER_ETH1 + if (eth1_up) { + ping_test(ð1_bootp_data); + } +#endif + TNR_PRINT_ACTIVITY(); + CYG_TEST_PASS_FINISH("Ping test OK"); + done_test(); +} + + +int getFileName(const char *extension, char *fileName) +{ + int found = 0; + DIR* ramfs = opendir("/ramfs"); + if(ramfs == NULL) + { + diag_printf("cannot open /ramfs\n"); + return found; + } + while(1) + { + struct dirent *entry = readdir( ramfs ); + int len = 0; + if( entry == NULL ) + break; + len = strlen(entry->d_name); + if(len > 4 && entry->d_name[len - 4] == '.' && + entry->d_name[len - 3] == 'p' && + entry->d_name[len - 2] == 'h' && + entry->d_name[len - 1] == 'i') + { + found = 1; + strcpy(fileName, "/ramfs/"); + strcat(fileName, entry->d_name); + } + } + closedir(ramfs); + ramfs = NULL; + return found; +} + +static char buf[IOSIZE]; + +static int copyfile( char *name2, char *name1 ) +{ + + int err = 0; + int fd1 = -1, fd2 = -1; + ssize_t done = 0, wrote = 0, current = 0; + + diag_printf(" copy file %s -> %s\n",name2,name1); + + fd1 = creat(name1, O_TRUNC | O_CREAT); + if( fd1 < 0 ) + { + SHOW_RESULT( creat, fd1 ); + diag_printf(" %s", name1); + return -1; + } + + fd2 = open( name2, O_RDONLY ); + if( fd2 < 0 ) + { + SHOW_RESULT( open, fd2 ); + diag_printf(" %s", name2); + return -1; + } + + for(;;) + { + done = read( fd2, buf, IOSIZE ); + if( done < 0 ) + { + SHOW_RESULT( read, done ); + return -1; + } + + if( done == 0 ) break; + + wrote = write( fd1, buf, done ); + if( wrote != done ) + { + SHOW_RESULT( write, wrote ); + return -1; + } + + current += wrote; + if( wrote != done ) break; + } + diag_printf("wrote %d\n", current); + err = close( fd1 ); + if( err < 0 ) + { + SHOW_RESULT( close, err ); + diag_printf(" %s", name1); + return -1; + } + + err = close( fd2 ); + if( err < 0 ) + { + SHOW_RESULT( close, err ); + diag_printf(" %s", name2); + return -1; + } + return 0; +} + +int isCompleted(const char *fileName) +{ + int err = access( fileName, W_OK ); + int fd = 0; + char readyBuffer[5]; + if( err < 0 && errno != EACCES ) + { + SHOW_RESULT( access, err ); + return 0; + } + fd = open(fileName, O_RDONLY); + if(fd < 0) + { + SHOW_RESULT( open, errno ); + return 0; + } + err = lseek(fd, -5, SEEK_END); + if(err < 0) + { + SHOW_RESULT( lseek, err ); + close(fd); + return 0; + } + err = read(fd, readyBuffer, 4); + if(err < 0) + { + SHOW_RESULT( read, err ); + close(fd); + return 0; + } + readyBuffer[4] = '\0'; + if(strncmp(readyBuffer, "Done", 4) != 0) + { + //diag_printf("Coudn't read \"Done\" at the end of the firmware file %s\n", readyBuffer); + close(fd); + return 0; + } + close(fd); + diag_printf("found!\n"); + return 1; +} + +static void ramfs_polling(cyg_addrword_t data) +{ + char fileName[100]; + int found = 0; + while(1) + { + cyg_thread_delay(100); + //scan the file system for a new .phi file + found = getFileName("phi", fileName); + if(found) + { + //check if the file has been transfered + if(isCompleted(fileName)) + { + //move the file to flash + unlink("/jffs2/firmware.bin"); + copyfile(fileName, "/jffs2/firmware.bin"); + diag_printf("firmware file copied to jffs2\n"); + unlink(fileName); + diag_printf("unmounting /jffs\n"); + umount("/jffs2"); + diag_printf("Resetting...\n"); +// CYGACC_CALL_IF_RESET(); + } + } + } +} + +static unsigned char ramfs_polling_stack[CYGNUM_HAL_STACK_SIZE_TYPICAL]; +static cyg_handle_t ramfs_polling_handle; +static cyg_thread ramfs_polling_thread; + +void start_ramfs_polling() +{ + + cyg_thread_create(10, &ramfs_polling, 0, "ramfs_polling", + ramfs_polling_stack, CYGNUM_HAL_STACK_SIZE_TYPICAL, + &ramfs_polling_handle, &ramfs_polling_thread); + cyg_thread_resume(ramfs_polling_handle); +} + +struct tftpd_fileops fileops = {open, + close, + write, + read}; + +externC void phi_init_all_network_interfaces(); + +int main(int argc, char **argv) +{ + diag_printf("Entered net_test main()\n"); + + int server_id = 0; + + init_all_network_interfaces(); + + + + int i=0; + while(1) + { + cyg_thread_delay(500); +// net_test(); + diag_printf("sleeping... %d\n", i++); + } + return 0; +} diff --git a/zpu/roadshow/roadshow/pics/GCC_logo.png b/zpu/roadshow/roadshow/pics/GCC_logo.png new file mode 100644 index 0000000..7b3435f Binary files /dev/null and b/zpu/roadshow/roadshow/pics/GCC_logo.png differ diff --git a/zpu/roadshow/roadshow/pics/codesize1.PNG b/zpu/roadshow/roadshow/pics/codesize1.PNG new file mode 100644 index 0000000..874ee9d Binary files /dev/null and b/zpu/roadshow/roadshow/pics/codesize1.PNG differ diff --git a/zpu/roadshow/roadshow/pics/codesize2.PNG b/zpu/roadshow/roadshow/pics/codesize2.PNG new file mode 100644 index 0000000..caa8c14 Binary files /dev/null and b/zpu/roadshow/roadshow/pics/codesize2.PNG differ diff --git a/zpu/roadshow/roadshow/pics/ecos.gif b/zpu/roadshow/roadshow/pics/ecos.gif new file mode 100644 index 0000000..3dad40c Binary files /dev/null and b/zpu/roadshow/roadshow/pics/ecos.gif differ diff --git a/zpu/roadshow/roadshow/pics/elizadebug1.PNG b/zpu/roadshow/roadshow/pics/elizadebug1.PNG new file mode 100644 index 0000000..f3c3f5f Binary files /dev/null and b/zpu/roadshow/roadshow/pics/elizadebug1.PNG differ diff --git a/zpu/roadshow/roadshow/pics/elizadebug2.PNG b/zpu/roadshow/roadshow/pics/elizadebug2.PNG new file mode 100644 index 0000000..13f046e Binary files /dev/null and b/zpu/roadshow/roadshow/pics/elizadebug2.PNG differ diff --git a/zpu/snapshot.sh b/zpu/snapshot.sh new file mode 100644 index 0000000..8fd6e33 --- /dev/null +++ b/zpu/snapshot.sh @@ -0,0 +1,7 @@ +export SNAPSHOT=`date +%Y-%m-%d` + +echo hdl$SNAPSHOT.zip docs$SNAPSHOT.zip sw$SNAPSHOT.zip +rm -f hdl$SNAPSHOT.zip docs$SNAPSHOT.zip sw$SNAPSHOT.zip +zip -r hdl$SNAPSHOT.zip hdl -x "*.svn*" +zip -r docs$SNAPSHOT.zip docs -x "*.svn*" +zip -r sw$SNAPSHOT.zip sw -x "*.svn*" diff --git a/zpu/sw/ecos/repository/dev/eth/opencores/ethermac/current/cdl/opencores_ethermac_drivers.cdl b/zpu/sw/ecos/repository/dev/eth/opencores/ethermac/current/cdl/opencores_ethermac_drivers.cdl new file mode 100644 index 0000000..017ee57 --- /dev/null +++ b/zpu/sw/ecos/repository/dev/eth/opencores/ethermac/current/cdl/opencores_ethermac_drivers.cdl @@ -0,0 +1,149 @@ +# ==================================================================== +# +# opencores_ethermac_eth_drivers.cdl +# +# Ethernet drivers - support for Opencores ethermac controllers +# +# ==================================================================== +#####ECOSGPLCOPYRIGHTBEGIN#### +## ------------------------------------------- +## This file is part of eCos, the Embedded Configurable Operating System. +## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. +## Copyright (C) 2004 Andrew Lunn +## +## eCos 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 or (at your option) any later version. +## +## eCos 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 eCos; if not, write to the Free Software Foundation, Inc., +## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +## +## As a special exception, if other files instantiate templates or use macros +## or inline functions from this file, or you compile this file and link it +## with other works to produce a work based on this file, this file does not +## by itself cause the resulting work to be covered by the GNU General Public +## License. However the source code for this file must still be made available +## in accordance with section (3) of the GNU General Public License. +## +## This exception does not invalidate any other reasons why a work based on +## this file might be covered by the GNU General Public License. +## +## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. +## at http://sources.redhat.com/ecos/ecos-license/ +## ------------------------------------------- +#####ECOSGPLCOPYRIGHTEND#### +# ==================================================================== +######DESCRIPTIONBEGIN#### +# +# Author(s): Gaisler Research, (Konrad Eisele) +# Contributors: +# Date: 2005-01-22 +# +#####DESCRIPTIONEND#### +# +# ==================================================================== + +cdl_package CYGPKG_DEVS_ETH_OPENCORES_ETHERMAC { + display "Opencores ethermac driver" + description "Ethernet driver for Opencores ethermac driver." + + parent CYGPKG_IO_ETH_DRIVERS + active_if CYGPKG_IO_ETH_DRIVERS + + active_if CYGINT_DEVS_ETH_OPENCORES_ETHERMAC_REQUIRED + + include_dir . + include_files ; # none _exported_ whatsoever + compile if_oeth.c + + include_files include/oeth_info.h + + define_proc { + puts $::cdl_header "#include "; + puts $::cdl_header "#include CYGDAT_DEVS_ETH_OPENCORES_ETHERMAC_CFG"; + } + + cdl_option CYGNUM_DEVS_ETH_OPENCORES_ETHERMAC_DEV_COUNT { + display "Number of supported interfaces." + calculated { CYGINT_DEVS_ETH_OPENCORES_ETHERMAC_REQUIRED } + flavor data + description " + This option selects the number of ethernet interfaces to + be supported by the driver." + } + + cdl_interface CYGINT_DEVS_ETH_OPENCORES_ETHERMAC_STATIC_ESA { + display "ESA is statically configured" + description " + If this is nonzero, then the ESA (MAC address) is statically + configured in the platform-specific package which instantiates + this driver with all its details. + + Note that use of this option is deprecated in favor of a + CYGSEM_DEVS_ETH_..._SET_ESA option in the platform specific + driver." + } + + cdl_option CYGINT_DEVS_ETH_OPENCORES_ETHERMAC_TxNUM { + display "Number of output buffers" + flavor data + legal_values 2 to 64 + default_value 4 + description " + This option specifies the number of output buffer packets + to be used for the opencores ethernet device in multiples of 2." + } + + cdl_option CYGINT_DEVS_ETH_OPENCORES_ETHERMAC_RxNUM { + display "Number of input buffers" + flavor data + legal_values 2 to 64 + default_value 4 + description " + This option specifies the number of input buffer packets + to be used for the opencores ethernet device in multiples of 2." + } + + cdl_component CYGPKG_DEVS_ETH_OPENCORES_ETHERMAC_OPTIONS { + display "Opencores ethermac driver build options" + flavor none + no_define + + cdl_option CYGPKG_DEVS_ETH_OPENCORES_ETHERMAC_CFLAGS_ADD { + display "Additional compiler flags" + flavor data + no_define + default_value { "-D_KERNEL -D__ECOS" } + description " + This option modifies the set of compiler flags for + building the opencores ethermac driver package. + These flags are used in addition + to the set of global flags." + } + } + + cdl_component CYGPKG_DEVS_ETH_OPENCORES_ETHERMAC_FLUSH { + display "Cache flushing" + flavor bool + default_value 1 + description "Flush cache before copying packets from/to the + ethermac dma transfer buffers. If you have cache snooping enabled + you can disable this option." + + } + + cdl_component CYGPKG_DEVS_ETH_OPENCORES_ETHERMAC_ETH100 { + display "Initialize MII to 100mbit" + flavor bool + default_value 0 + description "Issue a MII sequence that enables a 100mbit link " + + } + +} diff --git a/zpu/sw/ecos/repository/ecos.db b/zpu/sw/ecos/repository/ecos.db new file mode 100644 index 0000000..c31fc4b --- /dev/null +++ b/zpu/sw/ecos/repository/ecos.db @@ -0,0 +1,128 @@ + +package CYGPKG_DEVS_ETH_OPENCORES_ETHERMAC { + alias { "opencore's ethermac support" devs_eth_opencores_ethermac } + hardware + directory dev/eth/opencores/ethermac + script opencores_ethermac_drivers.cdl + description "This package contains hardware support for Opencores + ethermac." +} + +package CYGPKG_DEVS_ETH_ZPU_OPENCORES_PHI { + alias { "ethernet support for opencores on Zylin Phi addon board" devs_eth_zpu_opencores_phi } + hardware + directory dev/eth/zpu/opencores/phi + script phi_opencores_ethmac_drivers.cdl + description "This package contains hardware support for Opencores Ethermac + ethernet device on Phi." +} + + + +package CYGPKG_HAL_ZYLIN { + alias { "Zylin common HAL" hal_zylin } + directory hal/zylin/arch + script hal_zylin.cdl + hardware + description " +The Zylin architecture HAL package provides generic support for this +processor architecture. It is also necessary to select a specific +target platform HAL package." +} + + +package CYGPKG_HAL_ZYLIN_ZPU { + alias { "Zylin ZPU variant HAL" hal_zylin_zpu } + directory hal/zylin/zpu/var + script hal_zylin_zpu.cdl + hardware + description " + The Zylin ZPU HAL package provides the support needed to run eCos on Zylin + ZPU based targets." +} + + + +package CYGPKG_HAL_ZYLIN_ZPU_ZETA { + alias { "Zylin ZPU simulation" zeta } + directory hal/zylin/zpu/zeta + script hal_zylin_zpu_zeta.cdl + hardware + description " + The Zylin ZPU package provides the support needed to run eCos on an Zylin + evaluation board." +} +package CYGPKG_HAL_ZYLIN_ZPU_PHI { + alias { "Zylin ZPU evaluation board" phi } + directory hal/zylin/zpu/phi + script hal_zylin_zpu_phi.cdl + hardware + description " + The Zylin ZPU package provides the support needed to run eCos on a Zylin eCosBoard" +} + +package CYGPKG_HAL_ZYLIN_ZPU_ABEL { + alias { "Zylin ZPU Abel board" abel } + directory hal/zylin/zpu/abel + script hal_zylin_zpu_abel.cdl + hardware + description " + The Zylin ZPU package provides the support needed to run eCos on an Abel Zylin + evaluation board." +} + + +package CYGPKG_PHI_NET { + alias { "Zylin Phi networking" phi_net } + directory net/zylin + script phi_net.cdl + hardware + description "Contains phi specific network init." +} + + +target zeta { + alias { "Zylin ZPU evaluation board " zeta } + packages { CYGPKG_HAL_ZYLIN + CYGPKG_HAL_ZYLIN_ZPU + CYGPKG_HAL_ZYLIN_ZPU_ZETA + } + description " + The Zylin ZPU target provides the packages needed to run eCos on an Zylin + evaluation board." +} + +target phi { + alias { "Zylin ZPU evaluation board " phi } + packages { CYGPKG_HAL_ZYLIN + CYGPKG_HAL_ZYLIN_ZPU + CYGPKG_HAL_ZYLIN_ZPU_PHI + } + description " + The Zylin ZPU target provides the packages needed to run eCos on an Zylin eCosBoard" +} + +target abel { + alias { "Zylin ZPU evaluation board " abel } + packages { CYGPKG_HAL_ZYLIN + CYGPKG_HAL_ZYLIN_ZPU + CYGPKG_HAL_ZYLIN_ZPU_ABEL + } + description " + The Zylin ZPU target provides the packages needed to run eCos on an Abel Zylin + evaluation board." +} + +target zpuetherphi { + alias { "Zylin Phi addon board with ethernet" etherphi } + packages { CYGPKG_HAL_ZYLIN + CYGPKG_HAL_ZYLIN_ZPU + CYGPKG_HAL_ZYLIN_ZPU_PHI + CYGPKG_IO_ETH_DRIVERS + CYGPKG_DEVS_ETH_OPENCORES_ETHERMAC + CYGPKG_DEVS_ETH_ZPU_OPENCORES_PHI + } + description " + The Zylin Phi ZPU target provides the packages needed to run ZPU eCos on a + Zylin eCosBoard addon board with ethernet." +} diff --git a/zpu/sw/helloworld/gccgdb.PNG b/zpu/sw/helloworld/gccgdb.PNG new file mode 100644 index 0000000..afdfc31 Binary files /dev/null and b/zpu/sw/helloworld/gccgdb.PNG differ diff --git a/zpu/sw/helloworld/gmon.out b/zpu/sw/helloworld/gmon.out new file mode 100644 index 0000000..86ca3d6 Binary files /dev/null and b/zpu/sw/helloworld/gmon.out differ diff --git a/zpu/sw/helloworld/hello.bin b/zpu/sw/helloworld/hello.bin new file mode 100644 index 0000000..4413b05 Binary files /dev/null and b/zpu/sw/helloworld/hello.bin differ diff --git a/zpu/sw/helloworld/hello.bram b/zpu/sw/helloworld/hello.bram new file mode 100644 index 0000000..f7e99e9 --- /dev/null +++ b/zpu/sw/helloworld/hello.bram @@ -0,0 +1,12441 @@ +0 => x"0b0b0b0b", +1 => x"82700b0b", +2 => x"82f4e00c", +3 => x"3a0b0b81", +4 => x"e48c0400", +5 => x"00000000", +6 => x"00000000", +7 => x"00000000", +8 => x"80088408", +9 => x"88080b0b", +10 => x"81e4fd2d", +11 => x"880c840c", +12 => x"800c0400", +13 => x"00000000", +14 => x"00000000", +15 => x"00000000", +16 => x"71fd0608", +17 => x"72830609", +18 => x"81058205", +19 => x"832b2a83", +20 => x"ffff0652", +21 => x"04000000", +22 => x"00000000", +23 => x"00000000", +24 => x"71fd0608", +25 => x"83ffff73", +26 => x"83060981", +27 => x"05820583", +28 => x"2b2b0906", +29 => x"7383ffff", +30 => x"0b0b0b0b", +31 => x"83a70400", +32 => x"72098105", +33 => x"72057373", +34 => x"09060906", +35 => x"73097306", +36 => x"070a8106", +37 => x"53510400", +38 => x"00000000", +39 => x"00000000", +40 => x"72722473", +41 => x"732e0753", +42 => x"51040000", +43 => x"00000000", +44 => x"00000000", +45 => x"00000000", +46 => x"00000000", +47 => x"00000000", +48 => x"71737109", +49 => x"71068106", +50 => x"30720a10", +51 => x"0a720a10", +52 => x"0a31050a", +53 => x"81065151", +54 => x"53510400", +55 => x"00000000", +56 => x"72722673", +57 => x"732e0753", +58 => x"51040000", +59 => x"00000000", +60 => x"00000000", +61 => x"00000000", +62 => x"00000000", +63 => x"00000000", +64 => x"00000000", +65 => x"00000000", +66 => x"00000000", +67 => x"00000000", +68 => x"00000000", +69 => x"00000000", +70 => x"00000000", +71 => x"00000000", +72 => x"0b0b0b88", +73 => x"c9040000", +74 => x"00000000", +75 => x"00000000", +76 => x"00000000", +77 => x"00000000", +78 => x"00000000", +79 => x"00000000", +80 => x"720a722b", +81 => x"0a535104", +82 => x"00000000", +83 => x"00000000", +84 => x"00000000", +85 => x"00000000", +86 => x"00000000", +87 => x"00000000", +88 => x"72729f06", +89 => x"0981050b", +90 => x"0b0b88ac", +91 => x"05040000", +92 => x"00000000", +93 => x"00000000", +94 => x"00000000", +95 => x"00000000", +96 => x"72722aff", +97 => x"739f062a", +98 => x"0974090a", +99 => x"8106ff05", +100 => x"06075351", +101 => x"04000000", +102 => x"00000000", +103 => x"00000000", +104 => x"71715351", +105 => x"020d0406", +106 => x"73830609", +107 => x"81058205", +108 => x"832b0b2b", +109 => x"0772fc06", +110 => x"0c515104", +111 => x"00000000", +112 => x"72098105", +113 => x"72050970", +114 => x"81050906", +115 => x"0a810653", +116 => x"51040000", +117 => x"00000000", +118 => x"00000000", +119 => x"00000000", +120 => x"72098105", +121 => x"72050970", +122 => x"81050906", +123 => x"0a098106", +124 => x"53510400", +125 => x"00000000", +126 => x"00000000", +127 => x"00000000", +128 => x"71098105", +129 => x"52040000", +130 => x"00000000", +131 => x"00000000", +132 => x"00000000", +133 => x"00000000", +134 => x"00000000", +135 => x"00000000", +136 => x"72720981", +137 => x"05055351", +138 => x"04000000", +139 => x"00000000", +140 => x"00000000", +141 => x"00000000", +142 => x"00000000", +143 => x"00000000", +144 => x"72097206", +145 => x"73730906", +146 => x"07535104", +147 => x"00000000", +148 => x"00000000", +149 => x"00000000", +150 => x"00000000", +151 => x"00000000", +152 => x"71fc0608", +153 => x"72830609", +154 => x"81058305", +155 => x"1010102a", +156 => x"81ff0652", +157 => x"04000000", +158 => x"00000000", +159 => x"00000000", +160 => x"71fc0608", +161 => x"0b0b82f4", +162 => x"cc738306", +163 => x"10100508", +164 => x"060b0b0b", +165 => x"88af0400", +166 => x"00000000", +167 => x"00000000", +168 => x"80088408", +169 => x"88087575", +170 => x"0b0b0b8e", +171 => x"c42d5050", +172 => x"80085688", +173 => x"0c840c80", +174 => x"0c510400", +175 => x"00000000", +176 => x"80088408", +177 => x"88087575", +178 => x"0b0b0b90", +179 => x"8d2d5050", +180 => x"80085688", +181 => x"0c840c80", +182 => x"0c510400", +183 => x"00000000", +184 => x"72097081", +185 => x"0509060a", +186 => x"8106ff05", +187 => x"70547106", +188 => x"73097274", +189 => x"05ff0506", +190 => x"07515151", +191 => x"04000000", +192 => x"72097081", +193 => x"0509060a", +194 => x"098106ff", +195 => x"05705471", +196 => x"06730972", +197 => x"7405ff05", +198 => x"06075151", +199 => x"51040000", +200 => x"05ff0504", +201 => x"00000000", +202 => x"00000000", +203 => x"00000000", +204 => x"00000000", +205 => x"00000000", +206 => x"00000000", +207 => x"00000000", +208 => x"810b0b0b", +209 => x"82f4dc0c", +210 => x"51040000", +211 => x"00000000", +212 => x"00000000", +213 => x"00000000", +214 => x"00000000", +215 => x"00000000", +216 => x"71810552", +217 => x"04000000", +218 => x"00000000", +219 => x"00000000", +220 => x"00000000", +221 => x"00000000", +222 => x"00000000", +223 => x"00000000", +224 => x"00000000", +225 => x"00000000", +226 => x"00000000", +227 => x"00000000", +228 => x"00000000", +229 => x"00000000", +230 => x"00000000", +231 => x"00000000", +232 => x"02840572", +233 => x"10100552", +234 => x"04000000", +235 => x"00000000", +236 => x"00000000", +237 => x"00000000", +238 => x"00000000", +239 => x"00000000", +240 => x"00000000", +241 => x"00000000", +242 => x"00000000", +243 => x"00000000", +244 => x"00000000", +245 => x"00000000", +246 => x"00000000", +247 => x"00000000", +248 => x"717105ff", +249 => x"05715351", +250 => x"020d0400", +251 => x"00000000", +252 => x"00000000", +253 => x"00000000", +254 => x"00000000", +255 => x"00000000", +256 => x"0b0b0b83", +257 => x"e93f0b0b", +258 => x"82e4cc3f", +259 => x"04101010", +260 => x"10101010", +261 => x"10101010", +262 => x"10101010", +263 => x"10101010", +264 => x"10101010", +265 => x"10101010", +266 => x"10101010", +267 => x"53510473", +268 => x"81ff0673", +269 => x"83060981", +270 => x"05830510", +271 => x"10102b07", +272 => x"72fc060c", +273 => x"5151043c", +274 => x"04727280", +275 => x"728106ff", +276 => x"05097206", +277 => x"05711052", +278 => x"720a100a", +279 => x"5372ed38", +280 => x"51515351", +281 => x"04fe3d0d", +282 => x"0b0b8384", +283 => x"e8085384", +284 => x"13087088", +285 => x"2a708106", +286 => x"51525270", +287 => x"802e0b0b", +288 => x"0b0bec38", +289 => x"7181ff06", +290 => x"800c843d", +291 => x"0d04ff3d", +292 => x"0d0b0b83", +293 => x"84e80852", +294 => x"71087088", +295 => x"2a813270", +296 => x"81065151", +297 => x"51700b0b", +298 => x"0b0bed38", +299 => x"73720c83", +300 => x"3d0d040b", +301 => x"0b82f4dc", +302 => x"08802e0b", +303 => x"0b0b0bae", +304 => x"380b0b82", +305 => x"f4e00882", +306 => x"2e0b0b0b", +307 => x"80c53883", +308 => x"80800b0b", +309 => x"0b8384e8", +310 => x"0c82a080", +311 => x"0b0b0b83", +312 => x"84ec0c82", +313 => x"90800b0b", +314 => x"0b8384f0", +315 => x"0c04f880", +316 => x"8080a40b", +317 => x"0b0b8384", +318 => x"e80cf880", +319 => x"8082800b", +320 => x"0b0b8384", +321 => x"ec0cf880", +322 => x"8084800b", +323 => x"0b0b8384", +324 => x"f00c0480", +325 => x"c0a8808c", +326 => x"0b0b0b83", +327 => x"84e80c80", +328 => x"c0a88094", +329 => x"0b0b0b83", +330 => x"84ec0c0b", +331 => x"0b82ed90", +332 => x"0b0b0b83", +333 => x"84f00c04", +334 => x"f23d0d60", +335 => x"0b0b8384", +336 => x"ec08565d", +337 => x"82750c80", +338 => x"59805a80", +339 => x"0b8f3d5d", +340 => x"5b7a1010", +341 => x"15700871", +342 => x"08719f2c", +343 => x"7e852b58", +344 => x"55557d53", +345 => x"59570b0b", +346 => x"0b81d13f", +347 => x"7d7f7a72", +348 => x"077c7207", +349 => x"71716081", +350 => x"05415f5d", +351 => x"5b595755", +352 => x"817b270b", +353 => x"0b0b0b8f", +354 => x"38767d0c", +355 => x"77841e0c", +356 => x"7c800c90", +357 => x"3d0d040b", +358 => x"0b8384ec", +359 => x"08550b0b", +360 => x"0bffae39", +361 => x"70700b0b", +362 => x"8384f433", +363 => x"51700b0b", +364 => x"0b0bb738", +365 => x"0b0b82f4", +366 => x"e8087008", +367 => x"52527080", +368 => x"2e0b0b0b", +369 => x"0b9c3884", +370 => x"120b0b82", +371 => x"f4e80c70", +372 => x"2d0b0b82", +373 => x"f4e80870", +374 => x"08525270", +375 => x"0b0b0b0b", +376 => x"e638810b", +377 => x"0b0b8384", +378 => x"f4345050", +379 => x"0404700b", +380 => x"0b8384e4", +381 => x"08802e0b", +382 => x"0b0b0b92", +383 => x"380b0b0b", +384 => x"0b800b80", +385 => x"2e098106", +386 => x"0b0b0b0b", +387 => x"83385004", +388 => x"0b0b8384", +389 => x"e4510b0b", +390 => x"0bf3e53f", +391 => x"5004048c", +392 => x"08028c0c", +393 => x"ff3d0d0b", +394 => x"0b82ed94", +395 => x"510b0b0b", +396 => x"88ab3f71", +397 => x"800c833d", +398 => x"0d8c0c04", +399 => x"8c08028c", +400 => x"0cf53d0d", +401 => x"8c089405", +402 => x"080b0b0b", +403 => x"0ba0388c", +404 => x"088c0508", +405 => x"8c089005", +406 => x"088c0888", +407 => x"05085856", +408 => x"5473760c", +409 => x"7484170c", +410 => x"0b0b0b81", +411 => x"ca39800b", +412 => x"8c08f005", +413 => x"0c800b8c", +414 => x"08f4050c", +415 => x"8c088c05", +416 => x"088c0890", +417 => x"05085654", +418 => x"738c08f0", +419 => x"050c748c", +420 => x"08f4050c", +421 => x"8c08f805", +422 => x"8c08f005", +423 => x"56568870", +424 => x"54755376", +425 => x"52540b0b", +426 => x"0b85e03f", +427 => x"a00b8c08", +428 => x"94050831", +429 => x"8c08ec05", +430 => x"0c8c08ec", +431 => x"05088024", +432 => x"0b0b0b0b", +433 => x"a138800b", +434 => x"8c08f405", +435 => x"0c8c08ec", +436 => x"0508308c", +437 => x"08fc0508", +438 => x"712b8c08", +439 => x"f0050c54", +440 => x"0b0b0b0b", +441 => x"b9398c08", +442 => x"fc05088c", +443 => x"08ec0508", +444 => x"2a8c08e8", +445 => x"050c8c08", +446 => x"fc05088c", +447 => x"08940508", +448 => x"2b8c08f4", +449 => x"050c8c08", +450 => x"f805088c", +451 => x"08940508", +452 => x"2b708c08", +453 => x"e8050807", +454 => x"8c08f005", +455 => x"0c548c08", +456 => x"f005088c", +457 => x"08f40508", +458 => x"8c088805", +459 => x"08585654", +460 => x"73760c74", +461 => x"84170c8c", +462 => x"08880508", +463 => x"800c8d3d", +464 => x"0d8c0c04", +465 => x"8c08028c", +466 => x"0cf93d0d", +467 => x"800b8c08", +468 => x"fc050c8c", +469 => x"08880508", +470 => x"80250b0b", +471 => x"0b0baf38", +472 => x"8c088805", +473 => x"08308c08", +474 => x"88050c80", +475 => x"0b8c08f4", +476 => x"050c8c08", +477 => x"fc05080b", +478 => x"0b0b0b88", +479 => x"38810b8c", +480 => x"08f4050c", +481 => x"8c08f405", +482 => x"088c08fc", +483 => x"050c8c08", +484 => x"8c050880", +485 => x"250b0b0b", +486 => x"0baf388c", +487 => x"088c0508", +488 => x"308c088c", +489 => x"050c800b", +490 => x"8c08f005", +491 => x"0c8c08fc", +492 => x"05080b0b", +493 => x"0b0b8838", +494 => x"810b8c08", +495 => x"f0050c8c", +496 => x"08f00508", +497 => x"8c08fc05", +498 => x"0c80538c", +499 => x"088c0508", +500 => x"528c0888", +501 => x"0508510b", +502 => x"0b0b81bb", +503 => x"3f800870", +504 => x"8c08f805", +505 => x"0c548c08", +506 => x"fc050880", +507 => x"2e0b0b0b", +508 => x"0b8c388c", +509 => x"08f80508", +510 => x"308c08f8", +511 => x"050c8c08", +512 => x"f8050870", +513 => x"800c5489", +514 => x"3d0d8c0c", +515 => x"048c0802", +516 => x"8c0cfb3d", +517 => x"0d800b8c", +518 => x"08fc050c", +519 => x"8c088805", +520 => x"0880250b", +521 => x"0b0b0b93", +522 => x"388c0888", +523 => x"0508308c", +524 => x"0888050c", +525 => x"810b8c08", +526 => x"fc050c8c", +527 => x"088c0508", +528 => x"80250b0b", +529 => x"0b0b8c38", +530 => x"8c088c05", +531 => x"08308c08", +532 => x"8c050c81", +533 => x"538c088c", +534 => x"0508528c", +535 => x"08880508", +536 => x"510b0b0b", +537 => x"0bb13f80", +538 => x"08708c08", +539 => x"f8050c54", +540 => x"8c08fc05", +541 => x"08802e0b", +542 => x"0b0b0b8c", +543 => x"388c08f8", +544 => x"0508308c", +545 => x"08f8050c", +546 => x"8c08f805", +547 => x"0870800c", +548 => x"54873d0d", +549 => x"8c0c048c", +550 => x"08028c0c", +551 => x"70707070", +552 => x"810b8c08", +553 => x"fc050c80", +554 => x"0b8c08f8", +555 => x"050c8c08", +556 => x"8c05088c", +557 => x"08880508", +558 => x"270b0b0b", +559 => x"0bb8388c", +560 => x"08fc0508", +561 => x"802e0b0b", +562 => x"0b0bab38", +563 => x"800b8c08", +564 => x"8c050824", +565 => x"0b0b0b0b", +566 => x"9d388c08", +567 => x"8c050810", +568 => x"8c088c05", +569 => x"0c8c08fc", +570 => x"0508108c", +571 => x"08fc050c", +572 => x"0b0b0bff", +573 => x"b9398c08", +574 => x"fc050880", +575 => x"2e0b0b0b", +576 => x"80d0388c", +577 => x"088c0508", +578 => x"8c088805", +579 => x"08260b0b", +580 => x"0b0ba138", +581 => x"8c088805", +582 => x"088c088c", +583 => x"0508318c", +584 => x"0888050c", +585 => x"8c08f805", +586 => x"088c08fc", +587 => x"0508078c", +588 => x"08f8050c", +589 => x"8c08fc05", +590 => x"08812a8c", +591 => x"08fc050c", +592 => x"8c088c05", +593 => x"08812a8c", +594 => x"088c050c", +595 => x"0b0b0bff", +596 => x"a5398c08", +597 => x"90050880", +598 => x"2e0b0b0b", +599 => x"0b93388c", +600 => x"08880508", +601 => x"708c08f4", +602 => x"050c510b", +603 => x"0b0b0b8d", +604 => x"398c08f8", +605 => x"0508708c", +606 => x"08f4050c", +607 => x"518c08f4", +608 => x"0508800c", +609 => x"50505050", +610 => x"8c0c04fc", +611 => x"3d0d7670", +612 => x"797b5555", +613 => x"55558f72", +614 => x"270b0b0b", +615 => x"0b903872", +616 => x"75078306", +617 => x"5170802e", +618 => x"0b0b0b0b", +619 => x"af38ff12", +620 => x"5271ff2e", +621 => x"0b0b0b0b", +622 => x"9c387270", +623 => x"81055433", +624 => x"74708105", +625 => x"5634ff12", +626 => x"5271ff2e", +627 => x"0981060b", +628 => x"0b0b0be6", +629 => x"3874800c", +630 => x"863d0d04", +631 => x"74517270", +632 => x"84055408", +633 => x"71708405", +634 => x"530c7270", +635 => x"84055408", +636 => x"71708405", +637 => x"530c7270", +638 => x"84055408", +639 => x"71708405", +640 => x"530c7270", +641 => x"84055408", +642 => x"71708405", +643 => x"530cf012", +644 => x"52718f26", +645 => x"0b0b0b0b", +646 => x"c5388372", +647 => x"270b0b0b", +648 => x"0b993872", +649 => x"70840554", +650 => x"08717084", +651 => x"05530cfc", +652 => x"12527183", +653 => x"260b0b0b", +654 => x"0be93870", +655 => x"540b0b0b", +656 => x"feec39fb", +657 => x"3d0d7789", +658 => x"3d880555", +659 => x"79548811", +660 => x"0853510b", +661 => x"0b0b80e3", +662 => x"3f873d0d", +663 => x"04fc3d0d", +664 => x"873d7070", +665 => x"84055208", +666 => x"56537452", +667 => x"0b0b82f4", +668 => x"ec088811", +669 => x"0852540b", +670 => x"0b0bb4a2", +671 => x"3f863d0d", +672 => x"04707070", +673 => x"70768811", +674 => x"08545472", +675 => x"0b0b0b0b", +676 => x"8d387284", +677 => x"150c7280", +678 => x"0c505050", +679 => x"50047352", +680 => x"75510b0b", +681 => x"80fcfe3f", +682 => x"800b8815", +683 => x"0c800b84", +684 => x"150c8008", +685 => x"800c5050", +686 => x"505004fc", +687 => x"c43d0d83", +688 => x"bf3d0883", +689 => x"c13d0883", +690 => x"c33d0883", +691 => x"c53d0848", +692 => x"5e484b0b", +693 => x"0b8186f6", +694 => x"3f800808", +695 => x"4c800b83", +696 => x"bb3d0c80", +697 => x"0b83bc3d", +698 => x"0c807071", +699 => x"698c0522", +700 => x"70832a81", +701 => x"32708106", +702 => x"515d5d4c", +703 => x"4f4d786d", +704 => x"2e098106", +705 => x"0b0b0b0b", +706 => x"90386690", +707 => x"05086d2e", +708 => x"0981060b", +709 => x"0b0b0b98", +710 => x"3866510b", +711 => x"0b0bbfc8", +712 => x"3fff5980", +713 => x"080b0b0b", +714 => x"82893866", +715 => x"8c05225a", +716 => x"799a0659", +717 => x"788a2e0b", +718 => x"0b0b80ce", +719 => x"387b83a6", +720 => x"3d707183", +721 => x"b93d0c5e", +722 => x"475d800b", +723 => x"83b83d0c", +724 => x"800b83b7", +725 => x"3d0c8049", +726 => x"7c5e807d", +727 => x"337081ff", +728 => x"065b5b5b", +729 => x"787b2e0b", +730 => x"0b0b0b83", +731 => x"38815b78", +732 => x"a52e0b0b", +733 => x"0b81c438", +734 => x"7a802e0b", +735 => x"0b0b81bb", +736 => x"38811d5d", +737 => x"0b0b0b0b", +738 => x"d139668e", +739 => x"05227090", +740 => x"2b5a5b80", +741 => x"79240b0b", +742 => x"0bffa238", +743 => x"79fd0659", +744 => x"7882ba3d", +745 => x"237a0284", +746 => x"0589e205", +747 => x"23669c05", +748 => x"0882be3d", +749 => x"0c66a405", +750 => x"0882c03d", +751 => x"0cb63d70", +752 => x"82b83d0c", +753 => x"82bb3d0c", +754 => x"88800b82", +755 => x"b93d0c88", +756 => x"800b82bc", +757 => x"3d0c800b", +758 => x"82bd3d0c", +759 => x"64537b52", +760 => x"82b63d70", +761 => x"52590b0b", +762 => x"0bb1b33f", +763 => x"80085a80", +764 => x"0b800824", +765 => x"0b0b0b0b", +766 => x"95387851", +767 => x"0b0b80ec", +768 => x"bf3f8008", +769 => x"802e0b0b", +770 => x"0b0b8338", +771 => x"ff5a82b9", +772 => x"3d227086", +773 => x"2a708106", +774 => x"515a5b78", +775 => x"802e0b0b", +776 => x"0b0b8e38", +777 => x"668c0522", +778 => x"80c00759", +779 => x"78678c05", +780 => x"23795978", +781 => x"800c83be", +782 => x"3d0d047c", +783 => x"7e315b7a", +784 => x"802e0b0b", +785 => x"0b0bb138", +786 => x"7d7c0c7a", +787 => x"841d0c83", +788 => x"b73d081b", +789 => x"83b83d0c", +790 => x"881c83b7", +791 => x"3d088111", +792 => x"83b93d0c", +793 => x"8111515a", +794 => x"5c788724", +795 => x"0b0b0b80", +796 => x"cb38681b", +797 => x"7d335b49", +798 => x"7981ff06", +799 => x"5978802e", +800 => x"0b0b0bae", +801 => x"df38811d", +802 => x"5d807071", +803 => x"4a4543ff", +804 => x"416283be", +805 => x"3d347c33", +806 => x"5a7981ff", +807 => x"06811e5e", +808 => x"407fe005", +809 => x"597880d8", +810 => x"260b0b0b", +811 => x"88a83878", +812 => x"10100b0b", +813 => x"82edc405", +814 => x"59780804", +815 => x"83be3ddc", +816 => x"05526651", +817 => x"0b0b0bfb", +818 => x"b83f8008", +819 => x"0b0b0b8b", +820 => x"b3386569", +821 => x"1c7e335c", +822 => x"4a5c0b0b", +823 => x"0bff9939", +824 => x"62900743", +825 => x"62842a70", +826 => x"81065159", +827 => x"780b0b0b", +828 => x"9e873862", +829 => x"862a7081", +830 => x"06515978", +831 => x"802e0b0b", +832 => x"0b9df638", +833 => x"64658405", +834 => x"8212225d", +835 => x"4659815f", +836 => x"800b83be", +837 => x"3d346044", +838 => x"8061240b", +839 => x"0b0b0b86", +840 => x"3862feff", +841 => x"0643657b", +842 => x"30707d07", +843 => x"9f2a6630", +844 => x"7068079f", +845 => x"2a720752", +846 => x"5c515b5e", +847 => x"79802e0b", +848 => x"0b0b98fd", +849 => x"387e812e", +850 => x"0b0b0b8c", +851 => x"8438817f", +852 => x"250b0b0b", +853 => x"a0eb387e", +854 => x"822e0b0b", +855 => x"0b8cc038", +856 => x"0b0b82f0", +857 => x"a85e7d51", +858 => x"0b0b81c0", +859 => x"ae3f8008", +860 => x"5f7e427e", +861 => x"64250b0b", +862 => x"0b0b8338", +863 => x"634283bd", +864 => x"3d337081", +865 => x"ff065a5b", +866 => x"78802e0b", +867 => x"0b0b9488", +868 => x"38618105", +869 => x"42628184", +870 => x"0641600b", +871 => x"0b0b8186", +872 => x"38676231", +873 => x"5a807a25", +874 => x"0b0b0b80", +875 => x"f938907a", +876 => x"250b0b0b", +877 => x"0bbd380b", +878 => x"0b82eda4", +879 => x"7c0c900b", +880 => x"841d0c83", +881 => x"b73d0890", +882 => x"0583b83d", +883 => x"0c881c83", +884 => x"b73d0881", +885 => x"1183b93d", +886 => x"0c811151", +887 => x"5a5c7887", +888 => x"240b0b0b", +889 => x"868e38f0", +890 => x"1a5a7990", +891 => x"240b0b0b", +892 => x"0bc5380b", +893 => x"0b82eda4", +894 => x"7c0c7984", +895 => x"1d0c83b7", +896 => x"3d081a83", +897 => x"b83d0c88", +898 => x"1c83b73d", +899 => x"08811183", +900 => x"b93d0c81", +901 => x"11515a5c", +902 => x"7887240b", +903 => x"0b0b96fe", +904 => x"3883bd3d", +905 => x"335b7a81", +906 => x"ff065978", +907 => x"802e0b0b", +908 => x"0b938138", +909 => x"83be3dfc", +910 => x"057c0c81", +911 => x"0b841d0c", +912 => x"83b73d08", +913 => x"810583b8", +914 => x"3d0c881c", +915 => x"83b73d08", +916 => x"811183b9", +917 => x"3d0c8111", +918 => x"515a5c78", +919 => x"87240b0b", +920 => x"0b879f38", +921 => x"6081802e", +922 => x"0b0b0b85", +923 => x"c938637f", +924 => x"315a807a", +925 => x"250b0b0b", +926 => x"818c3890", +927 => x"7a250b0b", +928 => x"0b0bbd38", +929 => x"0b0b82ed", +930 => x"b47c0c90", +931 => x"0b841d0c", +932 => x"83b73d08", +933 => x"900583b8", +934 => x"3d0c881c", +935 => x"83b73d08", +936 => x"811183b9", +937 => x"3d0c8111", +938 => x"515a5c78", +939 => x"87240b0b", +940 => x"0b84e238", +941 => x"f01a5a79", +942 => x"90240b0b", +943 => x"0b0bc538", +944 => x"0b0b82ed", +945 => x"b47c0c79", +946 => x"841d0c83", +947 => x"b73d081a", +948 => x"83b83d0c", +949 => x"881c83b7", +950 => x"3d088111", +951 => x"83b93d0c", +952 => x"8111515a", +953 => x"5c877925", +954 => x"0b0b0b0b", +955 => x"993883be", +956 => x"3ddc0552", +957 => x"66510b0b", +958 => x"0bf7863f", +959 => x"80080b0b", +960 => x"0b878138", +961 => x"655c6288", +962 => x"2a813270", +963 => x"81065159", +964 => x"78802e0b", +965 => x"0b0b91f3", +966 => x"387d7c0c", +967 => x"7e841d0c", +968 => x"83b73d08", +969 => x"1f83b83d", +970 => x"0c881c83", +971 => x"b73d0881", +972 => x"1183b93d", +973 => x"0c811151", +974 => x"5a5c7887", +975 => x"240b0b0b", +976 => x"868c3862", +977 => x"822a7081", +978 => x"06515978", +979 => x"802e0b0b", +980 => x"0b819438", +981 => x"6762315a", +982 => x"807a250b", +983 => x"0b0b8187", +984 => x"38907a25", +985 => x"0b0b0b0b", +986 => x"bd380b0b", +987 => x"82eda47c", +988 => x"0c900b84", +989 => x"1d0c83b7", +990 => x"3d089005", +991 => x"83b83d0c", +992 => x"881c83b7", +993 => x"3d088111", +994 => x"83b93d0c", +995 => x"8111515a", +996 => x"5c788724", +997 => x"0b0b0b85", +998 => x"9438f01a", +999 => x"5a799024", +1000 => x"0b0b0b0b", +1001 => x"c5380b0b", +1002 => x"82eda47c", +1003 => x"0c79841d", +1004 => x"0c83b73d", +1005 => x"081a83b8", +1006 => x"3d0c83b6", +1007 => x"3d088111", +1008 => x"83b83d0c", +1009 => x"81115159", +1010 => x"8779250b", +1011 => x"0b0b0b97", +1012 => x"3883be3d", +1013 => x"dc055266", +1014 => x"510b0b0b", +1015 => x"f5a33f80", +1016 => x"080b0b0b", +1017 => x"859e3861", +1018 => x"59616825", +1019 => x"0b0b0b0b", +1020 => x"83386759", +1021 => x"68194983", +1022 => x"b73d080b", +1023 => x"0b0b84ec", +1024 => x"38800b83", +1025 => x"b73d0c65", +1026 => x"5c69802e", +1027 => x"0b0b0bf6", +1028 => x"c7386951", +1029 => x"0b0b80ff", +1030 => x"953f807d", +1031 => x"5f4a0b0b", +1032 => x"0bf6b739", +1033 => x"62900743", +1034 => x"62842a70", +1035 => x"81065159", +1036 => x"780b0b0b", +1037 => x"97d43862", +1038 => x"862a7081", +1039 => x"06515978", +1040 => x"802e0b0b", +1041 => x"0b97c338", +1042 => x"64658405", +1043 => x"8212225d", +1044 => x"4659805f", +1045 => x"800b83be", +1046 => x"3d340b0b", +1047 => x"0bf9b739", +1048 => x"62900743", +1049 => x"62842a70", +1050 => x"81065159", +1051 => x"780b0b0b", +1052 => x"97a93862", +1053 => x"862a7081", +1054 => x"06515978", +1055 => x"802e0b0b", +1056 => x"0b979838", +1057 => x"64658405", +1058 => x"7108902b", +1059 => x"70902c51", +1060 => x"5d465980", +1061 => x"7b240b0b", +1062 => x"0b8bdf38", +1063 => x"815f0b0b", +1064 => x"0bf8f339", +1065 => x"64658405", +1066 => x"71084a46", +1067 => x"59678025", +1068 => x"0b0b0bf7", +1069 => x"e1386730", +1070 => x"48628407", +1071 => x"7d335b43", +1072 => x"0b0b0bf7", +1073 => x"d439811d", +1074 => x"5d629007", +1075 => x"7d335b43", +1076 => x"0b0b0bf7", +1077 => x"c4397f80", +1078 => x"2e0b0b0b", +1079 => x"a6863882", +1080 => x"ce3d5e7f", +1081 => x"7e34815f", +1082 => x"800b83be", +1083 => x"3d340b0b", +1084 => x"0bf8fe39", +1085 => x"83be3ddc", +1086 => x"05526651", +1087 => x"0b0b0bf3", +1088 => x"803f8008", +1089 => x"0b0b0b82", +1090 => x"fb3865f0", +1091 => x"1b5b5c0b", +1092 => x"0b0bf9d6", +1093 => x"3983be3d", +1094 => x"dc055266", +1095 => x"510b0b0b", +1096 => x"f2df3f80", +1097 => x"080b0b0b", +1098 => x"82da3865", +1099 => x"f01b5b5c", +1100 => x"0b0b0bfb", +1101 => x"82396762", +1102 => x"315a807a", +1103 => x"250b0b0b", +1104 => x"faac3890", +1105 => x"7a250b0b", +1106 => x"0b0bbd38", +1107 => x"0b0b82ed", +1108 => x"b47c0c90", +1109 => x"0b841d0c", +1110 => x"83b73d08", +1111 => x"900583b8", +1112 => x"3d0c881c", +1113 => x"83b73d08", +1114 => x"811183b9", +1115 => x"3d0c8111", +1116 => x"515a5c78", +1117 => x"87240b0b", +1118 => x"0b80e638", +1119 => x"f01a5a79", +1120 => x"90240b0b", +1121 => x"0b0bc538", +1122 => x"0b0b82ed", +1123 => x"b47c0c79", +1124 => x"841d0c83", +1125 => x"b73d081a", +1126 => x"83b83d0c", +1127 => x"881c83b7", +1128 => x"3d088111", +1129 => x"83b93d0c", +1130 => x"8111515a", +1131 => x"5c877925", +1132 => x"0b0b0bf9", +1133 => x"b93883be", +1134 => x"3ddc0552", +1135 => x"66510b0b", +1136 => x"0bf1be3f", +1137 => x"80080b0b", +1138 => x"0b81b938", +1139 => x"65646031", +1140 => x"5b5c7980", +1141 => x"240b0b0b", +1142 => x"f9a1380b", +1143 => x"0b0bfaa6", +1144 => x"3983be3d", +1145 => x"dc055266", +1146 => x"510b0b0b", +1147 => x"f1933f80", +1148 => x"080b0b0b", +1149 => x"818e3865", +1150 => x"f01b5b5c", +1151 => x"0b0b0bfe", +1152 => x"fe3983be", +1153 => x"3ddc0552", +1154 => x"66510b0b", +1155 => x"0bf0f23f", +1156 => x"80080b0b", +1157 => x"0b80ed38", +1158 => x"655c6081", +1159 => x"802e0981", +1160 => x"060b0b0b", +1161 => x"f8c8380b", +1162 => x"0b0bfe8a", +1163 => x"3983be3d", +1164 => x"dc055266", +1165 => x"510b0b0b", +1166 => x"f0c73f80", +1167 => x"080b0b0b", +1168 => x"80c23865", +1169 => x"f01b5b5c", +1170 => x"0b0b0bfa", +1171 => x"d03983be", +1172 => x"3ddc0552", +1173 => x"66510b0b", +1174 => x"0bf0a63f", +1175 => x"80080b0b", +1176 => x"0b0ba138", +1177 => x"655c0b0b", +1178 => x"0bf9d839", +1179 => x"83be3ddc", +1180 => x"05526651", +1181 => x"0b0b0bf0", +1182 => x"883f8008", +1183 => x"802e0b0b", +1184 => x"0bfafe38", +1185 => x"69802e0b", +1186 => x"0b0b0b89", +1187 => x"3869510b", +1188 => x"0b80fa9a", +1189 => x"3f668c05", +1190 => x"2270862a", +1191 => x"7081066b", +1192 => x"5d515a47", +1193 => x"78802e0b", +1194 => x"0b0bf385", +1195 => x"38ff590b", +1196 => x"0b0bf2ff", +1197 => x"397c3370", +1198 => x"81ff065a", +1199 => x"5a7880ec", +1200 => x"2e0b0b0b", +1201 => x"fc803862", +1202 => x"90077a81", +1203 => x"ff06811f", +1204 => x"5f41430b", +1205 => x"0b0bf3c9", +1206 => x"397c7081", +1207 => x"055e3340", +1208 => x"7faa2e0b", +1209 => x"0b0ba2f9", +1210 => x"388060d0", +1211 => x"0571435a", +1212 => x"5a788926", +1213 => x"0b0b0bf3", +1214 => x"a8387910", +1215 => x"10107a10", +1216 => x"056005d0", +1217 => x"057d7081", +1218 => x"055f33d0", +1219 => x"115b415a", +1220 => x"8979270b", +1221 => x"0b0b0be2", +1222 => x"38794179", +1223 => x"ff250b0b", +1224 => x"0bf2fe38", +1225 => x"ff410b0b", +1226 => x"0bf2f639", +1227 => x"64658405", +1228 => x"71085d46", +1229 => x"59820b0b", +1230 => x"0b82f0c4", +1231 => x"64720745", +1232 => x"4f5f80f8", +1233 => x"40800b83", +1234 => x"be3d340b", +1235 => x"0b0bf3c6", +1236 => x"39897b27", +1237 => x"0b0b0b0b", +1238 => x"ac38ff1e", +1239 => x"5e8a527a", +1240 => x"510b0b82", +1241 => x"9e803f80", +1242 => x"08b00559", +1243 => x"787e348a", +1244 => x"527a510b", +1245 => x"0b829dc4", +1246 => x"3f80085b", +1247 => x"7a89260b", +1248 => x"0b0b0bd6", +1249 => x"38ff1eb0", +1250 => x"1c5a5e78", +1251 => x"7e3483be", +1252 => x"3d707f31", +1253 => x"ff9c0540", +1254 => x"5b0b0b0b", +1255 => x"f3d339ff", +1256 => x"1e7b8f06", +1257 => x"6f055a5e", +1258 => x"78337e34", +1259 => x"7a842a5b", +1260 => x"7a802e0b", +1261 => x"0b0b0bd6", +1262 => x"38ff1e7b", +1263 => x"8f066f05", +1264 => x"5a5e7833", +1265 => x"7e347a84", +1266 => x"2a5b7a0b", +1267 => x"0b0b0bcf", +1268 => x"380b0b0b", +1269 => x"ffb83962", +1270 => x"80c0077d", +1271 => x"335b430b", +1272 => x"0b0bf1b5", +1273 => x"3960ff2e", +1274 => x"0b0b0b9f", +1275 => x"a0387f80", +1276 => x"e7327030", +1277 => x"70720780", +1278 => x"256280c7", +1279 => x"32703070", +1280 => x"72078025", +1281 => x"73075354", +1282 => x"5e515b59", +1283 => x"79802e0b", +1284 => x"0b0b0b8a", +1285 => x"38600b0b", +1286 => x"0b0b8338", +1287 => x"81416465", +1288 => x"88058412", +1289 => x"08720870", +1290 => x"83bf3d0c", +1291 => x"7183c03d", +1292 => x"0c545446", +1293 => x"590b0b81", +1294 => x"adad3f80", +1295 => x"08802e0b", +1296 => x"0b0b95db", +1297 => x"38805980", +1298 => x"79545483", +1299 => x"ba3d0883", +1300 => x"bc3d085b", +1301 => x"5179520b", +1302 => x"0b8290c9", +1303 => x"3f800b80", +1304 => x"08240b0b", +1305 => x"0b85f138", +1306 => x"0b0b82f0", +1307 => x"d85e835f", +1308 => x"0b0b0bf1", +1309 => x"fc3982ce", +1310 => x"3d5e7f80", +1311 => x"c32e0b0b", +1312 => x"0b0b9238", +1313 => x"62842a70", +1314 => x"81065159", +1315 => x"78802e0b", +1316 => x"0b0b83d3", +1317 => x"38885380", +1318 => x"52b43d70", +1319 => x"52590b0b", +1320 => x"8188f23f", +1321 => x"78546465", +1322 => x"84057108", +1323 => x"557f546c", +1324 => x"5346590b", +1325 => x"0b0ba0b1", +1326 => x"3f80085f", +1327 => x"8008ff2e", +1328 => x"0b0b0bfb", +1329 => x"bf38800b", +1330 => x"83be3d34", +1331 => x"0b0b0bf1", +1332 => x"a0390b0b", +1333 => x"82f0dc63", +1334 => x"842a7081", +1335 => x"06515a4e", +1336 => x"780b0b0b", +1337 => x"82ca3862", +1338 => x"862a7081", +1339 => x"06515978", +1340 => x"802e0b0b", +1341 => x"0b82b938", +1342 => x"64658405", +1343 => x"8212225d", +1344 => x"46598263", +1345 => x"81065a5f", +1346 => x"7a802e0b", +1347 => x"0b0bf080", +1348 => x"3878802e", +1349 => x"0b0b0bef", +1350 => x"f738627f", +1351 => x"0743800b", +1352 => x"83be3d34", +1353 => x"0b0b0bef", +1354 => x"ed39800b", +1355 => x"83be3d34", +1356 => x"64658405", +1357 => x"71084046", +1358 => x"597d802e", +1359 => x"0b0b0b9c", +1360 => x"d4387f80", +1361 => x"d32e0b0b", +1362 => x"0b82c038", +1363 => x"62842a70", +1364 => x"81065159", +1365 => x"780b0b0b", +1366 => x"82b13880", +1367 => x"61240b0b", +1368 => x"0bf08338", +1369 => x"60537852", +1370 => x"7d510b0b", +1371 => x"8183e73f", +1372 => x"605f8008", +1373 => x"802e0b0b", +1374 => x"0beff638", +1375 => x"80087e31", +1376 => x"5f607f25", +1377 => x"0b0b0bef", +1378 => x"e838605f", +1379 => x"0b0b0bef", +1380 => x"e0396284", +1381 => x"2a708106", +1382 => x"5159780b", +1383 => x"0b0b908d", +1384 => x"3862862a", +1385 => x"70810651", +1386 => x"5978802e", +1387 => x"0b0b0b8f", +1388 => x"fc386465", +1389 => x"84057108", +1390 => x"52465968", +1391 => x"79237c5e", +1392 => x"0b0b0beb", +1393 => x"9539ab0b", +1394 => x"83be3d34", +1395 => x"7c335a0b", +1396 => x"0b0bedc5", +1397 => x"39805a79", +1398 => x"1010107a", +1399 => x"10056005", +1400 => x"d0057d70", +1401 => x"81055f33", +1402 => x"d0115b41", +1403 => x"5a897927", +1404 => x"0b0b0b0b", +1405 => x"e2387948", +1406 => x"0b0b0bed", +1407 => x"a4396281", +1408 => x"80077d33", +1409 => x"5b430b0b", +1410 => x"0bed8e39", +1411 => x"6288077d", +1412 => x"335b430b", +1413 => x"0b0bed81", +1414 => x"390b0b82", +1415 => x"f0c46384", +1416 => x"2a708106", +1417 => x"515a4e78", +1418 => x"802e0b0b", +1419 => x"0bfdb838", +1420 => x"64658405", +1421 => x"71085d46", +1422 => x"590b0b0b", +1423 => x"fdc43962", +1424 => x"81077d33", +1425 => x"5b430b0b", +1426 => x"0becce39", +1427 => x"83bd3d33", +1428 => x"59780b0b", +1429 => x"0becbf38", +1430 => x"a00b83be", +1431 => x"3d347c33", +1432 => x"5a0b0b0b", +1433 => x"ecb33964", +1434 => x"65840546", +1435 => x"59831933", +1436 => x"7e34815f", +1437 => x"0b0b0bf4", +1438 => x"ef397a30", +1439 => x"5bad0b83", +1440 => x"be3d3481", +1441 => x"5f0b0b0b", +1442 => x"ed8c397d", +1443 => x"a23d0c80", +1444 => x"705c5f88", +1445 => x"537e52a6", +1446 => x"3d70525a", +1447 => x"0b0b8184", +1448 => x"f43f7e61", +1449 => x"240b0b0b", +1450 => x"81c2387a", +1451 => x"1010a23d", +1452 => x"08055978", +1453 => x"08802e0b", +1454 => x"0b0b0bbd", +1455 => x"38795478", +1456 => x"085383be", +1457 => x"3dfcc005", +1458 => x"526a510b", +1459 => x"0b0b9c99", +1460 => x"3f8008ff", +1461 => x"2e0b0b0b", +1462 => x"f7aa3880", +1463 => x"081f5978", +1464 => x"61240b0b", +1465 => x"0b0b9238", +1466 => x"811b7940", +1467 => x"5b78612e", +1468 => x"0981060b", +1469 => x"0b0bffb3", +1470 => x"387e802e", +1471 => x"0b0b0bec", +1472 => x"f038811f", +1473 => x"526a510b", +1474 => x"0b80f1b6", +1475 => x"3f80084a", +1476 => x"8008802e", +1477 => x"0b0b0bf6", +1478 => x"fc388853", +1479 => x"80527951", +1480 => x"0b0b8183", +1481 => x"f03f7955", +1482 => x"7e5483be", +1483 => x"3df38c05", +1484 => x"5369526a", +1485 => x"510b0b0b", +1486 => x"9cb03f80", +1487 => x"087f2e09", +1488 => x"81060b0b", +1489 => x"0bf6bd38", +1490 => x"696a8008", +1491 => x"055a5e80", +1492 => x"79340b0b", +1493 => x"0bec9a39", +1494 => x"ad0b83be", +1495 => x"3d340b0b", +1496 => x"82f0d85e", +1497 => x"835f0b0b", +1498 => x"0bec8639", +1499 => x"79557e54", +1500 => x"83be3df3", +1501 => x"8c05537e", +1502 => x"526a510b", +1503 => x"0b0b9bea", +1504 => x"3f80085f", +1505 => x"8008ff2e", +1506 => x"0b0b0bf5", +1507 => x"f7387da2", +1508 => x"3d0c0b0b", +1509 => x"0bfee239", +1510 => x"620a100a", +1511 => x"70810651", +1512 => x"5978802e", +1513 => x"0b0b0beb", +1514 => x"ec386182", +1515 => x"05420b0b", +1516 => x"0bebe239", +1517 => x"620a100a", +1518 => x"70810651", +1519 => x"5978802e", +1520 => x"0b0b0bed", +1521 => x"9f38b00b", +1522 => x"82ce3d34", +1523 => x"7f028405", +1524 => x"8ab10534", +1525 => x"83be3dfc", +1526 => x"bc057c0c", +1527 => x"820b841d", +1528 => x"0c83b73d", +1529 => x"08820583", +1530 => x"b83d0c88", +1531 => x"1c83b73d", +1532 => x"08811183", +1533 => x"b93d0c81", +1534 => x"11515a5c", +1535 => x"8779250b", +1536 => x"0b0bece0", +1537 => x"380b0b0b", +1538 => x"f3f83980", +1539 => x"e560250b", +1540 => x"0b0b83da", +1541 => x"38805980", +1542 => x"79545483", +1543 => x"ba3d0883", +1544 => x"bc3d085b", +1545 => x"5179520b", +1546 => x"0b8282bd", +1547 => x"3f80080b", +1548 => x"0b0b87ff", +1549 => x"380b0b82", +1550 => x"f0f07c0c", +1551 => x"810b841d", +1552 => x"0c83b73d", +1553 => x"08810583", +1554 => x"b83d0c88", +1555 => x"1c83b73d", +1556 => x"08811183", +1557 => x"b93d0c81", +1558 => x"11515a5c", +1559 => x"7887240b", +1560 => x"0b0b81ce", +1561 => x"38a43d08", +1562 => x"5b7aa63d", +1563 => x"08240b0b", +1564 => x"0b0b8e38", +1565 => x"62810659", +1566 => x"78802e0b", +1567 => x"0b0bedc3", +1568 => x"386b7c0c", +1569 => x"810b841d", +1570 => x"0c83b73d", +1571 => x"08810583", +1572 => x"b83d0c88", +1573 => x"1c83b73d", +1574 => x"08811183", +1575 => x"b93d0c81", +1576 => x"11515a5c", +1577 => x"7887240b", +1578 => x"0b0b81c5", +1579 => x"38ff1b5a", +1580 => x"807a250b", +1581 => x"0b0bed8b", +1582 => x"38907a25", +1583 => x"0b0b0b0b", +1584 => x"bd380b0b", +1585 => x"82edb47c", +1586 => x"0c900b84", +1587 => x"1d0c83b7", +1588 => x"3d089005", +1589 => x"83b83d0c", +1590 => x"881c83b7", +1591 => x"3d088111", +1592 => x"83b93d0c", +1593 => x"8111515a", +1594 => x"5c788724", +1595 => x"0b0b0b80", +1596 => x"df38f01a", +1597 => x"5a799024", +1598 => x"0b0b0b0b", +1599 => x"c5380b0b", +1600 => x"82edb47c", +1601 => x"0c79841d", +1602 => x"0c83b73d", +1603 => x"081a83b8", +1604 => x"3d0c881c", +1605 => x"83b73d08", +1606 => x"811183b9", +1607 => x"3d0c8111", +1608 => x"515a5c87", +1609 => x"79250b0b", +1610 => x"0bec9838", +1611 => x"0b0b0bf2", +1612 => x"9d3983be", +1613 => x"3ddc0552", +1614 => x"66510b0b", +1615 => x"0be2c23f", +1616 => x"80080b0b", +1617 => x"0bf2bd38", +1618 => x"655c0b0b", +1619 => x"0bfe9639", +1620 => x"83be3ddc", +1621 => x"05526651", +1622 => x"0b0b0be2", +1623 => x"a43f8008", +1624 => x"0b0b0bf2", +1625 => x"9f3865f0", +1626 => x"1b5b5c0b", +1627 => x"0b0bff85", +1628 => x"3983be3d", +1629 => x"dc055266", +1630 => x"510b0b0b", +1631 => x"e2833f80", +1632 => x"080b0b0b", +1633 => x"f1fe3865", +1634 => x"a53d08ff", +1635 => x"055b5c79", +1636 => x"80240b0b", +1637 => x"0bfea238", +1638 => x"0b0b0beb", +1639 => x"a63983be", +1640 => x"3ddc0552", +1641 => x"66510b0b", +1642 => x"0be1d63f", +1643 => x"80080b0b", +1644 => x"0bf1d138", +1645 => x"6583be3d", +1646 => x"335c5c0b", +1647 => x"0b0be8e6", +1648 => x"397e0b0b", +1649 => x"0bf3c738", +1650 => x"62810659", +1651 => x"78802e0b", +1652 => x"0b0bf3ba", +1653 => x"38028d8f", +1654 => x"055eb07e", +1655 => x"3483be3d", +1656 => x"707f31ff", +1657 => x"9c05405b", +1658 => x"0b0b0be7", +1659 => x"8439a43d", +1660 => x"085b817b", +1661 => x"250b0b0b", +1662 => x"83bc387d", +1663 => x"7081055f", +1664 => x"3382ce3d", +1665 => x"34ae0284", +1666 => x"058ab105", +1667 => x"3483be3d", +1668 => x"fcbc057c", +1669 => x"0c820b84", +1670 => x"1d0c83b7", +1671 => x"3d088205", +1672 => x"83b83d0c", +1673 => x"881c83b7", +1674 => x"3d088111", +1675 => x"83b93d0c", +1676 => x"8111515a", +1677 => x"5c788724", +1678 => x"0b0b0b81", +1679 => x"8b388059", +1680 => x"80795454", +1681 => x"83ba3d08", +1682 => x"83bc3d08", +1683 => x"5b517952", +1684 => x"0b0b8280", +1685 => x"a83f8008", +1686 => x"802e0b0b", +1687 => x"0b81a538", +1688 => x"7d7c0cff", +1689 => x"1b841d0c", +1690 => x"83b73d08", +1691 => x"1bff0583", +1692 => x"b83d0c88", +1693 => x"1c83b73d", +1694 => x"08811183", +1695 => x"b93d0c81", +1696 => x"11515a5c", +1697 => x"7887240b", +1698 => x"0b0b81f7", +1699 => x"3883be3d", +1700 => x"e8057c0c", +1701 => x"6c841d0c", +1702 => x"83b73d08", +1703 => x"6d0583b8", +1704 => x"3d0c881c", +1705 => x"83b73d08", +1706 => x"811183b9", +1707 => x"3d0c8111", +1708 => x"515a5c87", +1709 => x"79250b0b", +1710 => x"0be98838", +1711 => x"83be3ddc", +1712 => x"05520b0b", +1713 => x"0bef8d39", +1714 => x"83be3ddc", +1715 => x"05526651", +1716 => x"0b0b0bdf", +1717 => x"ac3f8008", +1718 => x"0b0b0bef", +1719 => x"a73865a5", +1720 => x"3d085c5c", +1721 => x"80598079", +1722 => x"545483ba", +1723 => x"3d0883bc", +1724 => x"3d085b51", +1725 => x"79520b0b", +1726 => x"81ff823f", +1727 => x"80080b0b", +1728 => x"0bfedd38", +1729 => x"ff1b5a80", +1730 => x"7a250b0b", +1731 => x"0bfefe38", +1732 => x"907a250b", +1733 => x"0b0b0bbd", +1734 => x"380b0b82", +1735 => x"edb47c0c", +1736 => x"900b841d", +1737 => x"0c83b73d", +1738 => x"08900583", +1739 => x"b83d0c88", +1740 => x"1c83b73d", +1741 => x"08811183", +1742 => x"b93d0c81", +1743 => x"11515a5c", +1744 => x"7887240b", +1745 => x"0b0b84c4", +1746 => x"38f01a5a", +1747 => x"7990240b", +1748 => x"0b0b0bc5", +1749 => x"380b0b82", +1750 => x"edb47c0c", +1751 => x"79841d0c", +1752 => x"83b73d08", +1753 => x"1a83b83d", +1754 => x"0c881c83", +1755 => x"b73d0881", +1756 => x"1183b93d", +1757 => x"0c811151", +1758 => x"5a5c8779", +1759 => x"250b0b0b", +1760 => x"fe8b3883", +1761 => x"be3ddc05", +1762 => x"5266510b", +1763 => x"0b0bddf1", +1764 => x"3f80080b", +1765 => x"0b0bedec", +1766 => x"386583bf", +1767 => x"3de80571", +1768 => x"0c6d8412", +1769 => x"0c83b83d", +1770 => x"086e0583", +1771 => x"b93d0c5c", +1772 => x"0b0b0bfd", +1773 => x"ed396281", +1774 => x"0659780b", +1775 => x"0b0bfcbb", +1776 => x"387d7c0c", +1777 => x"810b841d", +1778 => x"0c83b73d", +1779 => x"08810583", +1780 => x"b83d0c88", +1781 => x"1c83b73d", +1782 => x"08811183", +1783 => x"b93d0c81", +1784 => x"11515a5c", +1785 => x"8779250b", +1786 => x"0b0bfda1", +1787 => x"3883be3d", +1788 => x"dc05520b", +1789 => x"0b0bff91", +1790 => x"39646584", +1791 => x"0571085d", +1792 => x"4659815f", +1793 => x"0b0b0be2", +1794 => x"87396465", +1795 => x"84057108", +1796 => x"5d465980", +1797 => x"5f0b0b0b", +1798 => x"e8ba3964", +1799 => x"65840571", +1800 => x"085d4659", +1801 => x"7a80250b", +1802 => x"0b0be8f0", +1803 => x"380b0b0b", +1804 => x"f4c839a5", +1805 => x"3d085a80", +1806 => x"7a250b0b", +1807 => x"0b8bbd38", +1808 => x"a43d085b", +1809 => x"7a7a240b", +1810 => x"0b0b83b5", +1811 => x"387d7c0c", +1812 => x"7a841d0c", +1813 => x"83b73d08", +1814 => x"1b83b83d", +1815 => x"0c881c83", +1816 => x"b73d0881", +1817 => x"1183b93d", +1818 => x"0c811151", +1819 => x"5a5c7887", +1820 => x"240b0b0b", +1821 => x"81e33879", +1822 => x"7b315a80", +1823 => x"7a250b0b", +1824 => x"0b818c38", +1825 => x"907a250b", +1826 => x"0b0b0bbd", +1827 => x"380b0b82", +1828 => x"edb47c0c", +1829 => x"900b841d", +1830 => x"0c83b73d", +1831 => x"08900583", +1832 => x"b83d0c88", +1833 => x"1c83b73d", +1834 => x"08811183", +1835 => x"b93d0c81", +1836 => x"11515a5c", +1837 => x"7887240b", +1838 => x"0b0b80fc", +1839 => x"38f01a5a", +1840 => x"7990240b", +1841 => x"0b0b0bc5", +1842 => x"380b0b82", +1843 => x"edb47c0c", +1844 => x"79841d0c", +1845 => x"83b73d08", +1846 => x"1a83b83d", +1847 => x"0c881c83", +1848 => x"b73d0881", +1849 => x"1183b93d", +1850 => x"0c811151", +1851 => x"5a5c8779", +1852 => x"250b0b0b", +1853 => x"0b993883", +1854 => x"be3ddc05", +1855 => x"5266510b", +1856 => x"0b0bdafd", +1857 => x"3f80080b", +1858 => x"0b0beaf8", +1859 => x"38655c62", +1860 => x"81065978", +1861 => x"802e0b0b", +1862 => x"0be4a838", +1863 => x"0b0b82f0", +1864 => x"f47c0c81", +1865 => x"0b841d0c", +1866 => x"83b73d08", +1867 => x"810583b8", +1868 => x"3d0c0b0b", +1869 => x"0bfaeb39", +1870 => x"83be3ddc", +1871 => x"05526651", +1872 => x"0b0b0bda", +1873 => x"bc3f8008", +1874 => x"0b0b0bea", +1875 => x"b73865f0", +1876 => x"1b5b5c0b", +1877 => x"0b0bfee8", +1878 => x"3983be3d", +1879 => x"dc055266", +1880 => x"510b0b0b", +1881 => x"da9b3f80", +1882 => x"080b0b0b", +1883 => x"ea963865", +1884 => x"a63d08a6", +1885 => x"3d087171", +1886 => x"31525d5b", +1887 => x"5c798024", +1888 => x"0b0b0bfd", +1889 => x"ff380b0b", +1890 => x"0bff8439", +1891 => x"83be3ddc", +1892 => x"05526651", +1893 => x"0b0b0bd9", +1894 => x"e83f8008", +1895 => x"0b0b0be9", +1896 => x"e33865f0", +1897 => x"1b5b5c0b", +1898 => x"0b0bfba0", +1899 => x"39646584", +1900 => x"0571086b", +1901 => x"710c527e", +1902 => x"4046590b", +1903 => x"0b0bdb9a", +1904 => x"397e0b0b", +1905 => x"0bdf9938", +1906 => x"ff1e7bb7", +1907 => x"06b0075b", +1908 => x"5e797e34", +1909 => x"7a832a5b", +1910 => x"7a0b0b0b", +1911 => x"0bea3862", +1912 => x"81065978", +1913 => x"802e0b0b", +1914 => x"0beba338", +1915 => x"79b02e0b", +1916 => x"0b0beb9a", +1917 => x"38ff1e5e", +1918 => x"b07e340b", +1919 => x"0b0bf7dd", +1920 => x"397d7c0c", +1921 => x"79841d0c", +1922 => x"83b73d08", +1923 => x"1a83b83d", +1924 => x"0c881c83", +1925 => x"b73d0881", +1926 => x"1183b93d", +1927 => x"0c811151", +1928 => x"5a5c7887", +1929 => x"240b0b0b", +1930 => x"81a03879", +1931 => x"1e0b0b82", +1932 => x"f0f47d0c", +1933 => x"5e810b84", +1934 => x"1d0c83b7", +1935 => x"3d088105", +1936 => x"83b83d0c", +1937 => x"881c83b7", +1938 => x"3d088111", +1939 => x"83b93d0c", +1940 => x"8111515a", +1941 => x"5c788724", +1942 => x"0b0b0b0b", +1943 => x"b6387d7c", +1944 => x"0ca43d08", +1945 => x"7a317084", +1946 => x"1e0c83b8", +1947 => x"3d080583", +1948 => x"b83d0c88", +1949 => x"1c83b73d", +1950 => x"08811183", +1951 => x"b93d0c81", +1952 => x"11515a5c", +1953 => x"8779250b", +1954 => x"0b0be1b7", +1955 => x"380b0b0b", +1956 => x"e7bc3983", +1957 => x"be3ddc05", +1958 => x"5266510b", +1959 => x"0b0bd7e1", +1960 => x"3f80080b", +1961 => x"0b0be7dc", +1962 => x"3865a63d", +1963 => x"087f720c", +1964 => x"a63d0871", +1965 => x"31708414", +1966 => x"0c83ba3d", +1967 => x"080583ba", +1968 => x"3d0c5b5c", +1969 => x"0b0b0bff", +1970 => x"aa3983be", +1971 => x"3ddc0552", +1972 => x"66510b0b", +1973 => x"0bd7aa3f", +1974 => x"80080b0b", +1975 => x"0be7a538", +1976 => x"65a63d08", +1977 => x"7f110b0b", +1978 => x"82f0f473", +1979 => x"0c405b5c", +1980 => x"810b841d", +1981 => x"0c83b73d", +1982 => x"08810583", +1983 => x"b83d0c88", +1984 => x"1c83b73d", +1985 => x"08811183", +1986 => x"b93d0c81", +1987 => x"11515a5c", +1988 => x"8779250b", +1989 => x"0b0bfec6", +1990 => x"380b0b0b", +1991 => x"fef53983", +1992 => x"ba3d0883", +1993 => x"bc3d085b", +1994 => x"5179520b", +1995 => x"0b8197ea", +1996 => x"3f0b0b82", +1997 => x"f0f85e83", +1998 => x"5f80080b", +1999 => x"0b0bdcb1", +2000 => x"38628280", +2001 => x"0783bb3d", +2002 => x"0883bd3d", +2003 => x"086383c0", +2004 => x"3daa3da5", +2005 => x"3d0c5f45", +2006 => x"415f4383", +2007 => x"0ba13d0c", +2008 => x"7f80e62e", +2009 => x"0b0b0b0b", +2010 => x"b1388008", +2011 => x"5a7f80e5", +2012 => x"2e0b0b0b", +2013 => x"83ea3880", +2014 => x"08597f80", +2015 => x"c52e0b0b", +2016 => x"0b83f038", +2017 => x"79790759", +2018 => x"78802e0b", +2019 => x"0b0b0b85", +2020 => x"38608105", +2021 => x"42820ba1", +2022 => x"3d0c7db3", +2023 => x"3d0c7eb4", +2024 => x"3d0c800b", +2025 => x"b33d0824", +2026 => x"0b0b0b88", +2027 => x"ef38807b", +2028 => x"3483be3d", +2029 => x"f3941159", +2030 => x"f3900557", +2031 => x"6e566155", +2032 => x"6f547d52", +2033 => x"7e536a51", +2034 => x"0b0b0b9b", +2035 => x"b03f8008", +2036 => x"6080e732", +2037 => x"70307072", +2038 => x"079f2a51", +2039 => x"5b5ba13d", +2040 => x"0c7f80c7", +2041 => x"2e0b0b0b", +2042 => x"0b883878", +2043 => x"0b0b0b81", +2044 => x"e4386281", +2045 => x"0659780b", +2046 => x"0b0b81d9", +2047 => x"38a33d08", +2048 => x"5978a13d", +2049 => x"0831a53d", +2050 => x"0c6f6080", +2051 => x"e7327030", +2052 => x"70720780", +2053 => x"256380c7", +2054 => x"32703070", +2055 => x"72078025", +2056 => x"73075354", +2057 => x"5f515c5a", +2058 => x"5e79802e", +2059 => x"0b0b0b86", +2060 => x"f238a53d", +2061 => x"085afc7a", +2062 => x"250b0b0b", +2063 => x"0b8a3860", +2064 => x"7a250b0b", +2065 => x"0b82cc38", +2066 => x"80e5597f", +2067 => x"80e72e0b", +2068 => x"0b0b0b84", +2069 => x"3880c559", +2070 => x"78407f80", +2071 => x"e5240b0b", +2072 => x"0b86ca38", +2073 => x"ff1a70a7", +2074 => x"3d0c83b9", +2075 => x"3d715d43", +2076 => x"5a7f6234", +2077 => x"028ddd05", +2078 => x"5f807a24", +2079 => x"0b0b0b87", +2080 => x"c138ab7f", +2081 => x"34028dde", +2082 => x"05b33d70", +2083 => x"5c425f89", +2084 => x"7b250b0b", +2085 => x"0b818738", +2086 => x"ff1a8a7c", +2087 => x"36b0055a", +2088 => x"5a787a34", +2089 => x"8a7b355b", +2090 => x"7a89240b", +2091 => x"0b0b0be8", +2092 => x"38ff1ab0", +2093 => x"1c5a5a78", +2094 => x"7a347961", +2095 => x"270b0b0b", +2096 => x"80ed3879", +2097 => x"7081055b", +2098 => x"337f7081", +2099 => x"0541340b", +2100 => x"0b0b0be6", +2101 => x"39800862", +2102 => x"055b7f80", +2103 => x"e62e0b0b", +2104 => x"0b819838", +2105 => x"80598079", +2106 => x"54547d51", +2107 => x"7e520b0b", +2108 => x"81f0f63f", +2109 => x"80080b0b", +2110 => x"0b0b8538", +2111 => x"7aa43d0c", +2112 => x"a33d0859", +2113 => x"787b270b", +2114 => x"0b0bfdf5", +2115 => x"38b07934", +2116 => x"a33d0881", +2117 => x"05a43d0c", +2118 => x"0b0b0b0b", +2119 => x"e339b07f", +2120 => x"70810541", +2121 => x"34b01b59", +2122 => x"787f7081", +2123 => x"0541347e", +2124 => x"6231a53d", +2125 => x"08701241", +2126 => x"5a4d8179", +2127 => x"250b0b0b", +2128 => x"81a43881", +2129 => x"1f5f83bc", +2130 => x"3d335978", +2131 => x"802e0b0b", +2132 => x"0bd89e38", +2133 => x"ad0b83be", +2134 => x"3d340b0b", +2135 => x"0bd89239", +2136 => x"810b8008", +2137 => x"5a5a7f80", +2138 => x"c52e0981", +2139 => x"060b0b0b", +2140 => x"fc923881", +2141 => x"590b0b0b", +2142 => x"fc8a3980", +2143 => x"08335978", +2144 => x"b02e0b0b", +2145 => x"0b0bb438", +2146 => x"6e087b05", +2147 => x"5b0b0b0b", +2148 => x"fed23980", +2149 => x"e740a43d", +2150 => x"0859787a", +2151 => x"240b0b0b", +2152 => x"85883879", +2153 => x"6381065a", +2154 => x"5f78802e", +2155 => x"0b0b0bff", +2156 => x"9538811a", +2157 => x"5f0b0b0b", +2158 => x"ff8c3980", +2159 => x"59807954", +2160 => x"547d517e", +2161 => x"520b0b81", +2162 => x"f1b33f80", +2163 => x"08802e0b", +2164 => x"0b0bffb4", +2165 => x"38816231", +2166 => x"70a13d08", +2167 => x"0c7b055b", +2168 => x"0b0b0bfd", +2169 => x"ff396281", +2170 => x"06597880", +2171 => x"2e0b0b0b", +2172 => x"fed43881", +2173 => x"1f5f0b0b", +2174 => x"0bfecb39", +2175 => x"0b0b82f0", +2176 => x"f07c0c81", +2177 => x"0b841d0c", +2178 => x"83b73d08", +2179 => x"810583b8", +2180 => x"3d0c881c", +2181 => x"83b73d08", +2182 => x"811183b9", +2183 => x"3d0c8111", +2184 => x"515a5c78", +2185 => x"87240b0b", +2186 => x"0b829238", +2187 => x"790b0b0b", +2188 => x"0b8c38a4", +2189 => x"3d08802e", +2190 => x"0b0b0bda", +2191 => x"86386b7c", +2192 => x"0c810b84", +2193 => x"1d0c83b7", +2194 => x"3d088105", +2195 => x"83b83d0c", +2196 => x"881c83b7", +2197 => x"3d088111", +2198 => x"83b93d0c", +2199 => x"8111515a", +2200 => x"5c788724", +2201 => x"0b0b0b81", +2202 => x"f6387930", +2203 => x"5a807a25", +2204 => x"0b0b0b81", +2205 => x"8c38907a", +2206 => x"250b0b0b", +2207 => x"0bbd380b", +2208 => x"0b82edb4", +2209 => x"7c0c900b", +2210 => x"841d0c83", +2211 => x"b73d0890", +2212 => x"0583b83d", +2213 => x"0c881c83", +2214 => x"b73d0881", +2215 => x"1183b93d", +2216 => x"0c811151", +2217 => x"5a5c7887", +2218 => x"240b0b0b", +2219 => x"80ee38f0", +2220 => x"1a5a7990", +2221 => x"240b0b0b", +2222 => x"0bc5380b", +2223 => x"0b82edb4", +2224 => x"7c0c7984", +2225 => x"1d0c83b7", +2226 => x"3d081a83", +2227 => x"b83d0c88", +2228 => x"1c83b73d", +2229 => x"08811183", +2230 => x"b93d0c81", +2231 => x"11515a5c", +2232 => x"8779250b", +2233 => x"0b0b0b99", +2234 => x"3883be3d", +2235 => x"dc055266", +2236 => x"510b0b0b", +2237 => x"cf8b3f80", +2238 => x"080b0b0b", +2239 => x"df863865", +2240 => x"5c7d7c0c", +2241 => x"a43d0884", +2242 => x"1d0c83b7", +2243 => x"3d08a53d", +2244 => x"080583b8", +2245 => x"3d0c0b0b", +2246 => x"0bef8739", +2247 => x"83be3ddc", +2248 => x"05526651", +2249 => x"0b0b0bce", +2250 => x"d83f8008", +2251 => x"0b0b0bde", +2252 => x"d33865f0", +2253 => x"1b5b5c0b", +2254 => x"0b0bfef6", +2255 => x"3983be3d", +2256 => x"dc055266", +2257 => x"510b0b0b", +2258 => x"ceb73f80", +2259 => x"080b0b0b", +2260 => x"deb23865", +2261 => x"a63d085b", +2262 => x"5c0b0b0b", +2263 => x"fdce3983", +2264 => x"be3ddc05", +2265 => x"5266510b", +2266 => x"0b0bce95", +2267 => x"3f80080b", +2268 => x"0b0bde90", +2269 => x"3865a63d", +2270 => x"08703051", +2271 => x"5b5c7980", +2272 => x"240b0b0b", +2273 => x"fdf0380b", +2274 => x"0b0bfef5", +2275 => x"3986410b", +2276 => x"0b0be18a", +2277 => x"390b0b82", +2278 => x"f0fc5e86", +2279 => x"5f0b0b0b", +2280 => x"d3cf39a5", +2281 => x"3d085a0b", +2282 => x"0b0bf9ae", +2283 => x"397f80e6", +2284 => x"2e098106", +2285 => x"0b0b0bfb", +2286 => x"dd38807a", +2287 => x"250b0b0b", +2288 => x"81bc3879", +2289 => x"5f600b0b", +2290 => x"0b0b8e38", +2291 => x"62810659", +2292 => x"78802e0b", +2293 => x"0b0bfaee", +2294 => x"38601a81", +2295 => x"055f0b0b", +2296 => x"0bfae339", +2297 => x"83b73d08", +2298 => x"0b0b0b0b", +2299 => x"8d38800b", +2300 => x"83b73d0c", +2301 => x"0b0b0bdd", +2302 => x"8b3983be", +2303 => x"3ddc0552", +2304 => x"66510b0b", +2305 => x"0bccfa3f", +2306 => x"80080b0b", +2307 => x"0bdcf538", +2308 => x"800b83b7", +2309 => x"3d0c0b0b", +2310 => x"0bdce939", +2311 => x"7d810a32", +2312 => x"5ead7b34", +2313 => x"0b0b0bf7", +2314 => x"8839787a", +2315 => x"3182055f", +2316 => x"807a250b", +2317 => x"0b0bfa8e", +2318 => x"3881195f", +2319 => x"0b0b0bfa", +2320 => x"85397930", +2321 => x"5bad7f34", +2322 => x"028dde05", +2323 => x"b33d705c", +2324 => x"425f897b", +2325 => x"250b0b0b", +2326 => x"f9c4380b", +2327 => x"0b0bf8b8", +2328 => x"39646584", +2329 => x"05710843", +2330 => x"46596080", +2331 => x"250b0b0b", +2332 => x"d0a438ff", +2333 => x"7d335b41", +2334 => x"0b0b0bd0", +2335 => x"9c39600b", +2336 => x"0b0b0b90", +2337 => x"38628106", +2338 => x"59815f78", +2339 => x"802e0b0b", +2340 => x"0bf9b338", +2341 => x"6082055f", +2342 => x"0b0b0bf9", +2343 => x"a939fc3d", +2344 => x"0d0b0b82", +2345 => x"f4ec0855", +2346 => x"b8150880", +2347 => x"2e0b0b0b", +2348 => x"0b983878", +2349 => x"54775376", +2350 => x"520b0b82", +2351 => x"f4ec0851", +2352 => x"0b0b0bcb", +2353 => x"f63f863d", +2354 => x"0d047451", +2355 => x"0b0b0bbe", +2356 => x"8e3f7854", +2357 => x"77537652", +2358 => x"0b0b82f4", +2359 => x"ec08510b", +2360 => x"0b0bcbd7", +2361 => x"3f863d0d", +2362 => x"04f63d0d", +2363 => x"7c7e6159", +2364 => x"56588056", +2365 => x"74762e0b", +2366 => x"0b0b0ba3", +2367 => x"3876547e", +2368 => x"53745277", +2369 => x"510b0b0b", +2370 => x"83823f80", +2371 => x"08558008", +2372 => x"ff2e0b0b", +2373 => x"0b0ba938", +2374 => x"74800c8c", +2375 => x"3d0d0476", +2376 => x"5475538c", +2377 => x"3df40552", +2378 => x"77510b0b", +2379 => x"0b82dd3f", +2380 => x"80085580", +2381 => x"08ff2e09", +2382 => x"81060b0b", +2383 => x"0b0bd938", +2384 => x"80770c81", +2385 => x"8a780c74", +2386 => x"800c8c3d", +2387 => x"0d047070", +2388 => x"70707754", +2389 => x"76537552", +2390 => x"0b0b82f4", +2391 => x"ec08510b", +2392 => x"0b0bff85", +2393 => x"3f505050", +2394 => x"5004ec3d", +2395 => x"0d66686a", +2396 => x"6c6e735c", +2397 => x"405d4242", +2398 => x"4260802e", +2399 => x"0b0b0b81", +2400 => x"b2388060", +2401 => x"085a5d7c", +2402 => x"7a270b0b", +2403 => x"0b819b38", +2404 => x"933d5b7b", +2405 => x"08841d08", +2406 => x"7d567a08", +2407 => x"557c5463", +2408 => x"53405e0b", +2409 => x"0b0bfec1", +2410 => x"3f800858", +2411 => x"8008ff2e", +2412 => x"0b0b0b81", +2413 => x"9538807a", +2414 => x"80083156", +2415 => x"567c7526", +2416 => x"0b0b0b0b", +2417 => x"83388156", +2418 => x"80087a27", +2419 => x"0b0b0b80", +2420 => x"ea387580", +2421 => x"2e0b0b0b", +2422 => x"80e13880", +2423 => x"081d5d60", +2424 => x"802e0b0b", +2425 => x"0b0baa38", +2426 => x"80567580", +2427 => x"08250b0b", +2428 => x"0b0b9838", +2429 => x"751b5574", +2430 => x"33777081", +2431 => x"05593481", +2432 => x"16567776", +2433 => x"240b0b0b", +2434 => x"0bea387f", +2435 => x"08840560", +2436 => x"0c787084", +2437 => x"055a0855", +2438 => x"74802e0b", +2439 => x"0b0b0bb9", +2440 => x"38797d26", +2441 => x"0b0b0bfe", +2442 => x"ea387c55", +2443 => x"74800c96", +2444 => x"3d0d04ff", +2445 => x"5a0b0b0b", +2446 => x"fec8397d", +2447 => x"7c0c7e84", +2448 => x"1d0c7c55", +2449 => x"0b0b0b0b", +2450 => x"e339818a", +2451 => x"620c807c", +2452 => x"0c800880", +2453 => x"0c963d0d", +2454 => x"0460802e", +2455 => x"0b0b0b0b", +2456 => x"84387460", +2457 => x"0c747c0c", +2458 => x"ff1d800c", +2459 => x"963d0d04", +2460 => x"fc3d0d79", +2461 => x"55785477", +2462 => x"5376520b", +2463 => x"0b82f4ec", +2464 => x"08510b0b", +2465 => x"0bfde33f", +2466 => x"863d0d04", +2467 => x"f83d0d7b", +2468 => x"7d7f0b0b", +2469 => x"82fbec54", +2470 => x"5957550b", +2471 => x"0b818dfb", +2472 => x"3f800881", +2473 => x"260b0b0b", +2474 => x"0b983874", +2475 => x"5474802e", +2476 => x"0b0b0b0b", +2477 => x"86387575", +2478 => x"34815473", +2479 => x"800c8a3d", +2480 => x"0d040b0b", +2481 => x"82f18452", +2482 => x"0b0b82fb", +2483 => x"ec510b0b", +2484 => x"818c953f", +2485 => x"80080b0b", +2486 => x"0b81d838", +2487 => x"80085474", +2488 => x"802e0b0b", +2489 => x"0b0bd438", +2490 => x"80ff7625", +2491 => x"0b0b0b0b", +2492 => x"c538ff80", +2493 => x"16538eff", +2494 => x"73270b0b", +2495 => x"0b85e338", +2496 => x"f0801653", +2497 => x"83efff73", +2498 => x"270b0b0b", +2499 => x"82d838fc", +2500 => x"80801653", +2501 => x"80fbffff", +2502 => x"73270b0b", +2503 => x"0b85e838", +2504 => x"8fff0a16", +2505 => x"53f7c00a", +2506 => x"73270b0b", +2507 => x"0b86a638", +2508 => x"ff54c00a", +2509 => x"76250b0b", +2510 => x"0bff8038", +2511 => x"75820a06", +2512 => x"709e2c70", +2513 => x"fc075151", +2514 => x"53727570", +2515 => x"81055734", +2516 => x"7581fc0a", +2517 => x"0670982a", +2518 => x"ff800751", +2519 => x"53727570", +2520 => x"81055734", +2521 => x"7587f080", +2522 => x"80067092", +2523 => x"2aff8007", +2524 => x"51537275", +2525 => x"70810557", +2526 => x"34758fe0", +2527 => x"8006708c", +2528 => x"2aff8007", +2529 => x"51537275", +2530 => x"70810557", +2531 => x"34759fc0", +2532 => x"0670862a", +2533 => x"ff800751", +2534 => x"53727570", +2535 => x"81055734", +2536 => x"75ffbf06", +2537 => x"ff800753", +2538 => x"72753486", +2539 => x"0b800c8a", +2540 => x"3d0d040b", +2541 => x"0b82f18c", +2542 => x"520b0b82", +2543 => x"fbec510b", +2544 => x"0b818aa4", +2545 => x"3f80080b", +2546 => x"0b0b81f7", +2547 => x"387581ff", +2548 => x"0676882c", +2549 => x"7081ff06", +2550 => x"80085759", +2551 => x"54587480", +2552 => x"2e0b0b0b", +2553 => x"fdd53876", +2554 => x"802e0b0b", +2555 => x"0bfdbc38", +2556 => x"800880ff", +2557 => x"187081ff", +2558 => x"06515456", +2559 => x"729e260b", +2560 => x"0b0b0b83", +2561 => x"38815680", +2562 => x"08a01870", +2563 => x"81ff0651", +2564 => x"5454728f", +2565 => x"260b0b0b", +2566 => x"0b833881", +2567 => x"54757407", +2568 => x"5372802e", +2569 => x"0b0b0b0b", +2570 => x"b5388008", +2571 => x"c0195456", +2572 => x"72be260b", +2573 => x"0b0b0b83", +2574 => x"38815680", +2575 => x"08ff8019", +2576 => x"7081ff06", +2577 => x"51545472", +2578 => x"80fc260b", +2579 => x"0b0b0b83", +2580 => x"38815475", +2581 => x"74075372", +2582 => x"0b0b0b80", +2583 => x"d338ff0b", +2584 => x"800c8a3d", +2585 => x"0d04fcd0", +2586 => x"801653ff", +2587 => x"548fff73", +2588 => x"270b0b0b", +2589 => x"fcc53875", +2590 => x"83e08006", +2591 => x"708c2ae0", +2592 => x"07515372", +2593 => x"75708105", +2594 => x"5734759f", +2595 => x"c0067086", +2596 => x"2aff8007", +2597 => x"51537275", +2598 => x"70810557", +2599 => x"3475ffbf", +2600 => x"06ff8007", +2601 => x"53727534", +2602 => x"830b800c", +2603 => x"8a3d0d04", +2604 => x"76757081", +2605 => x"05573477", +2606 => x"75348254", +2607 => x"73800c8a", +2608 => x"3d0d040b", +2609 => x"0b82f194", +2610 => x"520b0b82", +2611 => x"fbec510b", +2612 => x"0b818894", +2613 => x"3f80080b", +2614 => x"0b0b80f8", +2615 => x"387581ff", +2616 => x"0676882c", +2617 => x"7081ff06", +2618 => x"80085759", +2619 => x"54587480", +2620 => x"2e0b0b0b", +2621 => x"fbc53876", +2622 => x"802e0b0b", +2623 => x"0bfbac38", +2624 => x"80085381", +2625 => x"a077270b", +2626 => x"0b0b0b83", +2627 => x"38815376", +2628 => x"81ff2e0b", +2629 => x"0b0bfec6", +2630 => x"38817074", +2631 => x"06545472", +2632 => x"802e0b0b", +2633 => x"0bfeb738", +2634 => x"80085381", +2635 => x"a078270b", +2636 => x"0b0b0b83", +2637 => x"38735377", +2638 => x"81ff2e0b", +2639 => x"0b0bfe9e", +2640 => x"38727406", +2641 => x"5372802e", +2642 => x"0b0b0bfe", +2643 => x"91380b0b", +2644 => x"0bfedd39", +2645 => x"0b0b82f1", +2646 => x"9c520b0b", +2647 => x"82fbec51", +2648 => x"0b0b8187", +2649 => x"833f8008", +2650 => x"0b0b0bfa", +2651 => x"be388008", +2652 => x"7681ff06", +2653 => x"77882c70", +2654 => x"81ff0659", +2655 => x"55595981", +2656 => x"5474802e", +2657 => x"0b0b0bfa", +2658 => x"b2387580", +2659 => x"2e0b0b0b", +2660 => x"82a538df", +2661 => x"16537280", +2662 => x"dd260b0b", +2663 => x"0bfdbf38", +2664 => x"df185372", +2665 => x"80dd260b", +2666 => x"0b0bfdb2", +2667 => x"3876080b", +2668 => x"0b0b0b9c", +2669 => x"3873770c", +2670 => x"9b757081", +2671 => x"055734a4", +2672 => x"75708105", +2673 => x"573480c2", +2674 => x"75708105", +2675 => x"57348359", +2676 => x"75757081", +2677 => x"05573477", +2678 => x"75348219", +2679 => x"800c8a3d", +2680 => x"0d04758f", +2681 => x"c0067086", +2682 => x"2ac00751", +2683 => x"53727570", +2684 => x"81055734", +2685 => x"75ffbf06", +2686 => x"ff800753", +2687 => x"72753482", +2688 => x"540b0b0b", +2689 => x"fdb63975", +2690 => x"80f08080", +2691 => x"0670922a", +2692 => x"f0075153", +2693 => x"72757081", +2694 => x"05573475", +2695 => x"8fe08006", +2696 => x"708c2aff", +2697 => x"80075153", +2698 => x"72757081", +2699 => x"05573475", +2700 => x"9fc00670", +2701 => x"862aff80", +2702 => x"07515372", +2703 => x"75708105", +2704 => x"573475ff", +2705 => x"bf06ff80", +2706 => x"07537275", +2707 => x"34840b80", +2708 => x"0c8a3d0d", +2709 => x"047581c0", +2710 => x"0a067098", +2711 => x"2af80751", +2712 => x"53727570", +2713 => x"81055734", +2714 => x"7587f080", +2715 => x"80067092", +2716 => x"2aff8007", +2717 => x"51537275", +2718 => x"70810557", +2719 => x"34758fe0", +2720 => x"8006708c", +2721 => x"2aff8007", +2722 => x"51537275", +2723 => x"70810557", +2724 => x"34759fc0", +2725 => x"0670862a", +2726 => x"ff800751", +2727 => x"53727570", +2728 => x"81055734", +2729 => x"75ffbf06", +2730 => x"ff800753", +2731 => x"72753485", +2732 => x"0b800c8a", +2733 => x"3d0d0476", +2734 => x"08802e0b", +2735 => x"0b0b0b9d", +2736 => x"38800877", +2737 => x"0c9b7570", +2738 => x"81055734", +2739 => x"a8757081", +2740 => x"05573480", +2741 => x"c2757081", +2742 => x"05573483", +2743 => x"59777534", +2744 => x"8119800c", +2745 => x"8a3d0d04", +2746 => x"fa3d0d78", +2747 => x"0b0b82f4", +2748 => x"ec085455", +2749 => x"b8130880", +2750 => x"2e0b0b0b", +2751 => x"81dc388c", +2752 => x"15227083", +2753 => x"ffff0670", +2754 => x"832a8132", +2755 => x"70810651", +2756 => x"55555672", +2757 => x"802e0b0b", +2758 => x"0b80f038", +2759 => x"73842a81", +2760 => x"32810657", +2761 => x"ff53760b", +2762 => x"0b0b8193", +2763 => x"3873822a", +2764 => x"70810651", +2765 => x"5372802e", +2766 => x"0b0b0b80", +2767 => x"c638b015", +2768 => x"08547380", +2769 => x"2e0b0b0b", +2770 => x"0ba53880", +2771 => x"c0155373", +2772 => x"732e0b0b", +2773 => x"0b0b9438", +2774 => x"73520b0b", +2775 => x"82f4ec08", +2776 => x"510b0b0b", +2777 => x"b5d23f8c", +2778 => x"15225676", +2779 => x"b0160c75", +2780 => x"db065372", +2781 => x"8c162380", +2782 => x"0b84160c", +2783 => x"90150875", +2784 => x"0c725675", +2785 => x"88075372", +2786 => x"8c162390", +2787 => x"1508802e", +2788 => x"0b0b0b80", +2789 => x"d3388c15", +2790 => x"22708106", +2791 => x"5553730b", +2792 => x"0b0b0ba2", +2793 => x"38720a10", +2794 => x"0a708106", +2795 => x"5153720b", +2796 => x"0b0b0b85", +2797 => x"38941508", +2798 => x"54738816", +2799 => x"0c805372", +2800 => x"800c883d", +2801 => x"0d04800b", +2802 => x"88160c94", +2803 => x"15083098", +2804 => x"160c8053", +2805 => x"0b0b0b0b", +2806 => x"e6397251", +2807 => x"0b0b0baf", +2808 => x"fe3f0b0b", +2809 => x"0bfe9839", +2810 => x"74510b0b", +2811 => x"80c4ef3f", +2812 => x"8c152270", +2813 => x"81065553", +2814 => x"73802e0b", +2815 => x"0b0bffa5", +2816 => x"380b0b0b", +2817 => x"0bc039ef", +2818 => x"3d0d6365", +2819 => x"9011085e", +2820 => x"40408053", +2821 => x"7b609005", +2822 => x"08240b0b", +2823 => x"0b81d038", +2824 => x"941f70ff", +2825 => x"1e70822b", +2826 => x"73116494", +2827 => x"05705c43", +2828 => x"5f610570", +2829 => x"087f0881", +2830 => x"0557555c", +2831 => x"5e42570b", +2832 => x"0b81ebf8", +2833 => x"3f80085d", +2834 => x"80080b0b", +2835 => x"0b81a738", +2836 => x"7e527f51", +2837 => x"0b0b80e9", +2838 => x"803f800b", +2839 => x"8008240b", +2840 => x"0b0b8189", +2841 => x"38811d5d", +2842 => x"80707f63", +2843 => x"5a585b58", +2844 => x"76708405", +2845 => x"58087083", +2846 => x"ffff067b", +2847 => x"0571902a", +2848 => x"71902a05", +2849 => x"70902a5d", +2850 => x"5283ffff", +2851 => x"06821822", +2852 => x"7072311b", +2853 => x"585b5483", +2854 => x"ffff0676", +2855 => x"22707231", +2856 => x"77902c05", +2857 => x"70902c5b", +2858 => x"52435372", +2859 => x"76237482", +2860 => x"17238416", +2861 => x"567a7727", +2862 => x"0b0b0bff", +2863 => x"b3387b10", +2864 => x"101e5978", +2865 => x"080b0b0b", +2866 => x"0ba338fc", +2867 => x"19597d79", +2868 => x"270b0b0b", +2869 => x"0b923878", +2870 => x"080b0b0b", +2871 => x"0b8a38ff", +2872 => x"1c5c0b0b", +2873 => x"0b0be439", +2874 => x"7b609005", +2875 => x"0c7c5372", +2876 => x"800c933d", +2877 => x"0d048070", +2878 => x"5b587670", +2879 => x"84055808", +2880 => x"7083ffff", +2881 => x"06707f29", +2882 => x"1c72902a", +2883 => x"60297190", +2884 => x"2a057090", +2885 => x"2a5e5283", +2886 => x"ffff0682", +2887 => x"19227072", +2888 => x"311c5945", +2889 => x"5283ffff", +2890 => x"06772270", +2891 => x"72317890", +2892 => x"2c057090", +2893 => x"2c5c5256", +2894 => x"51537276", +2895 => x"23748217", +2896 => x"23841656", +2897 => x"7a77270b", +2898 => x"0b0bffae", +2899 => x"3878080b", +2900 => x"0b0bfdfc", +2901 => x"38fc1959", +2902 => x"7d79270b", +2903 => x"0b0b0b92", +2904 => x"3878080b", +2905 => x"0b0b0b8a", +2906 => x"38ff1c5c", +2907 => x"0b0b0b0b", +2908 => x"e4397b60", +2909 => x"90050c0b", +2910 => x"0b0bfdd4", +2911 => x"398c08c8", +2912 => x"3d0dbc3d", +2913 => x"0880c03d", +2914 => x"0880c23d", +2915 => x"0880c53d", +2916 => x"0880c73d", +2917 => x"088c0c5d", +2918 => x"4b434080", +2919 => x"0bbe3d08", +2920 => x"80c03d08", +2921 => x"5bba3d0c", +2922 => x"79bb3d0c", +2923 => x"6080c005", +2924 => x"08574875", +2925 => x"682e0981", +2926 => x"060b0b0b", +2927 => x"80ea38b8", +2928 => x"3d085780", +2929 => x"77240b0b", +2930 => x"0b818c38", +2931 => x"677a0c76", +2932 => x"9ffe0a06", +2933 => x"56759ffe", +2934 => x"0a2e0b0b", +2935 => x"0b819838", +2936 => x"b83d08ba", +2937 => x"3d085a58", +2938 => x"80568076", +2939 => x"54547751", +2940 => x"78520b0b", +2941 => x"81d6f23f", +2942 => x"80080b0b", +2943 => x"0b81c638", +2944 => x"80c13d08", +2945 => x"5881780c", +2946 => x"0b0b82f0", +2947 => x"f05f8c08", +2948 => x"802e0b0b", +2949 => x"0b0b8638", +2950 => x"811f8c08", +2951 => x"0c7e5675", +2952 => x"800cba3d", +2953 => x"0d8c0c04", +2954 => x"7f80c405", +2955 => x"0884170c", +2956 => x"816080c4", +2957 => x"05082b88", +2958 => x"170c7552", +2959 => x"7f510b0b", +2960 => x"80d8ad3f", +2961 => x"676080c0", +2962 => x"050cb83d", +2963 => x"08577680", +2964 => x"250b0b0b", +2965 => x"fef63881", +2966 => x"7a0c76fe", +2967 => x"0a0670ba", +2968 => x"3d0c709f", +2969 => x"fe0a0657", +2970 => x"57759ffe", +2971 => x"0a2e0981", +2972 => x"060b0b0b", +2973 => x"feea3880", +2974 => x"c13d0856", +2975 => x"80ce8f76", +2976 => x"0cb93d08", +2977 => x"0b0b0b84", +2978 => x"c93876bf", +2979 => x"ffff060b", +2980 => x"0b82f1a4", +2981 => x"4056750b", +2982 => x"0b0b84b6", +2983 => x"388c0880", +2984 => x"2e0b0b0b", +2985 => x"fef73883", +2986 => x"1f337f88", +2987 => x"05585675", +2988 => x"0b0b0b0b", +2989 => x"8438831f", +2990 => x"57768c08", +2991 => x"0c7e560b", +2992 => x"0b0bfedb", +2993 => x"39ba3dff", +2994 => x"b41156ff", +2995 => x"b0055477", +2996 => x"5278537f", +2997 => x"510b0b80", +2998 => x"eaa43f80", +2999 => x"08b93d08", +3000 => x"70942a8f", +3001 => x"ff065e59", +3002 => x"417b0b0b", +3003 => x"0b83ef38", +3004 => x"a73d08a7", +3005 => x"3d080588", +3006 => x"b2115d56", +3007 => x"a07c250b", +3008 => x"0b0b8ff4", +3009 => x"3880c07c", +3010 => x"31889217", +3011 => x"79722bbc", +3012 => x"3d08722a", +3013 => x"07b53d71", +3014 => x"5670555d", +3015 => x"5157570b", +3016 => x"0b81dfa9", +3017 => x"3fb23d08", +3018 => x"b43d08b2", +3019 => x"3d5d5a58", +3020 => x"8076240b", +3021 => x"0b0b93f5", +3022 => x"3877b73d", +3023 => x"0c78b83d", +3024 => x"0cb63d08", +3025 => x"90ff0a05", +3026 => x"b73d0cf7", +3027 => x"cd1c5c81", +3028 => x"4ebffc0a", +3029 => x"56807655", +3030 => x"55b63d08", +3031 => x"b83d0858", +3032 => x"5276537a", +3033 => x"510b0b81", +3034 => x"a2803f83", +3035 => x"feca8fa7", +3036 => x"56869bbd", +3037 => x"86e17655", +3038 => x"55b03d08", +3039 => x"b23d0858", +3040 => x"52765379", +3041 => x"510b0b81", +3042 => x"a3933f83", +3043 => x"fe9a94a8", +3044 => x"56f8db83", +3045 => x"91b37655", +3046 => x"55b23d08", +3047 => x"b43d0858", +3048 => x"527653ba", +3049 => x"3dd00551", +3050 => x"0b0b81a0", +3051 => x"963fae3d", +3052 => x"08b03d08", +3053 => x"7d54ae3d", +3054 => x"535a580b", +3055 => x"0b81de8d", +3056 => x"3faa3d4c", +3057 => x"83fecd88", +3058 => x"93568584", +3059 => x"fdf3fb76", +3060 => x"5555ac3d", +3061 => x"08ae3d08", +3062 => x"58527653", +3063 => x"6b510b0b", +3064 => x"81a2ba3f", +3065 => x"a83dab3d", +3066 => x"08ad3d08", +3067 => x"59557756", +3068 => x"78537954", +3069 => x"7052450b", +3070 => x"0b819fc7", +3071 => x"3fa83d08", +3072 => x"aa3d0871", +3073 => x"5370545f", +3074 => x"5d0b0b81", +3075 => x"dfdf3f80", +3076 => x"08438056", +3077 => x"80765454", +3078 => x"7c517d52", +3079 => x"0b0b81d9", +3080 => x"843f800b", +3081 => x"8008240b", +3082 => x"0b0b8eae", +3083 => x"38810ba2", +3084 => x"3d0c6296", +3085 => x"260b0b0b", +3086 => x"0bb23862", +3087 => x"1010100b", +3088 => x"0b82f2d8", +3089 => x"05841108", +3090 => x"71085555", +3091 => x"b93d08bb", +3092 => x"3d085952", +3093 => x"5676520b", +3094 => x"0b81d8c9", +3095 => x"3f800b80", +3096 => x"08246371", +3097 => x"31445680", +3098 => x"0ba23d0c", +3099 => x"a73d087c", +3100 => x"31ff055a", +3101 => x"807a454b", +3102 => x"6a7a240b", +3103 => x"0b0b8da9", +3104 => x"38806324", +3105 => x"0b0b0ba0", +3106 => x"8b38800b", +3107 => x"a63d0c62", +3108 => x"4f636305", +3109 => x"44896227", +3110 => x"0b0b0b0b", +3111 => x"83388042", +3112 => x"81588562", +3113 => x"250b0b0b", +3114 => x"0b873861", +3115 => x"fc054280", +3116 => x"58810ba1", +3117 => x"3d0cff70", +3118 => x"a53d0c46", +3119 => x"6185260b", +3120 => x"0b0b82bd", +3121 => x"38611010", +3122 => x"0b0b82f1", +3123 => x"b0055675", +3124 => x"08040b0b", +3125 => x"82f0f85f", +3126 => x"0b0b0bfb", +3127 => x"c039b83d", +3128 => x"08ba3d08", +3129 => x"58b73d0c", +3130 => x"76b83d0c", +3131 => x"b63d08fc", +3132 => x"0a069ffc", +3133 => x"0a07b73d", +3134 => x"0cf8811c", +3135 => x"5c804eb2", +3136 => x"3db13d5c", +3137 => x"5abffc0a", +3138 => x"56807655", +3139 => x"55b63d08", +3140 => x"b83d0858", +3141 => x"5276537a", +3142 => x"510b0b81", +3143 => x"9ecc3f83", +3144 => x"feca8fa7", +3145 => x"56869bbd", +3146 => x"86e17655", +3147 => x"55b03d08", +3148 => x"b23d0858", +3149 => x"52765379", +3150 => x"510b0b81", +3151 => x"9fdf3f83", +3152 => x"fe9a94a8", +3153 => x"56f8db83", +3154 => x"91b37655", +3155 => x"55b23d08", +3156 => x"b43d0858", +3157 => x"527653ba", +3158 => x"3dd00551", +3159 => x"0b0b819c", +3160 => x"e23fae3d", +3161 => x"08b03d08", +3162 => x"7d54ae3d", +3163 => x"535a580b", +3164 => x"0b81dad9", +3165 => x"3faa3d4c", +3166 => x"83fecd88", +3167 => x"93568584", +3168 => x"fdf3fb76", +3169 => x"5555ac3d", +3170 => x"08ae3d08", +3171 => x"58527653", +3172 => x"6b510b0b", +3173 => x"819f863f", +3174 => x"a83dab3d", +3175 => x"08ad3d08", +3176 => x"59557756", +3177 => x"78537954", +3178 => x"7052450b", +3179 => x"0b819c93", +3180 => x"3fa83d08", +3181 => x"aa3d0871", +3182 => x"5370545f", +3183 => x"5d0b0b81", +3184 => x"dcab3f80", +3185 => x"08438056", +3186 => x"80765454", +3187 => x"7c517d52", +3188 => x"0b0b81d5", +3189 => x"d03f8008", +3190 => x"80250b0b", +3191 => x"0bfcce38", +3192 => x"0b0b0b8a", +3193 => x"f539800b", +3194 => x"a13d0c68", +3195 => x"63058111", +3196 => x"70485da4", +3197 => x"3d0c7b80", +3198 => x"240b0b0b", +3199 => x"0b833881", +3200 => x"5c845a80", +3201 => x"6080c405", +3202 => x"0c987c26", +3203 => x"0b0b0b0b", +3204 => x"9b388057", +3205 => x"81177a10", +3206 => x"9411585b", +3207 => x"577b7627", +3208 => x"0b0b0b0b", +3209 => x"ef387660", +3210 => x"80c4050c", +3211 => x"7f80c405", +3212 => x"08527f51", +3213 => x"0b0b80cf", +3214 => x"903f8008", +3215 => x"6080c005", +3216 => x"0c800880", +3217 => x"088e6827", +3218 => x"58404d77", +3219 => x"802e0b0b", +3220 => x"0b86fd38", +3221 => x"75802e0b", +3222 => x"0b0b86f4", +3223 => x"38b83d08", +3224 => x"ba3d0871", +3225 => x"b93d0c70", +3226 => x"ba3d0c64", +3227 => x"a53d0c67", +3228 => x"a73d0c5a", +3229 => x"58825c80", +3230 => x"63250b0b", +3231 => x"0b8cae38", +3232 => x"62832b80", +3233 => x"f8060b0b", +3234 => x"82f2d811", +3235 => x"080b0b82", +3236 => x"f2dc1208", +3237 => x"65842c70", +3238 => x"842a7081", +3239 => x"0651545d", +3240 => x"405e5675", +3241 => x"0b0b0b8a", +3242 => x"8a387980", +3243 => x"2e0b0b0b", +3244 => x"0ba8380b", +3245 => x"0b82f2b0", +3246 => x"58798106", +3247 => x"56750b0b", +3248 => x"0b88f138", +3249 => x"79812c88", +3250 => x"19595a79", +3251 => x"0b0b0b0b", +3252 => x"e838b83d", +3253 => x"08ba3d08", +3254 => x"5a587c54", +3255 => x"7d557752", +3256 => x"78536451", +3257 => x"0b0b81bb", +3258 => x"b43fa83d", +3259 => x"08aa3d08", +3260 => x"71bb3d0c", +3261 => x"70bc3d0c", +3262 => x"5a58a13d", +3263 => x"08802e0b", +3264 => x"0b0b80eb", +3265 => x"38805a9f", +3266 => x"fc0a5680", +3267 => x"76545477", +3268 => x"5178520b", +3269 => x"0b81d38d", +3270 => x"3f798008", +3271 => x"240b0b0b", +3272 => x"8def3880", +3273 => x"66250b0b", +3274 => x"0b80c438", +3275 => x"79802e0b", +3276 => x"0b0b0bbb", +3277 => x"38800ba4", +3278 => x"3d08250b", +3279 => x"0b0b84f8", +3280 => x"38a33d08", +3281 => x"63ff0544", +3282 => x"4680c882", +3283 => x"0a568076", +3284 => x"55557752", +3285 => x"78536451", +3286 => x"0b0b819b", +3287 => x"c03fa83d", +3288 => x"08aa3d08", +3289 => x"5ab93d0c", +3290 => x"78ba3d0c", +3291 => x"811c5c7b", +3292 => x"5264510b", +3293 => x"0b81d6d5", +3294 => x"3fb83d08", +3295 => x"ba3d0858", +3296 => x"547655a8", +3297 => x"3d08aa3d", +3298 => x"08585276", +3299 => x"536b510b", +3300 => x"0b819b89", +3301 => x"3f80f082", +3302 => x"0a568076", +3303 => x"5555aa3d", +3304 => x"08ac3d08", +3305 => x"58527653", +3306 => x"ac3d510b", +3307 => x"0b819893", +3308 => x"3fac3d08", +3309 => x"ae3d0858", +3310 => x"b53d0c76", +3311 => x"b63d0cb4", +3312 => x"3d0886bf", +3313 => x"0a05b53d", +3314 => x"0c65802e", +3315 => x"0b0b0b9b", +3316 => x"c9386f80", +3317 => x"2e0b0b0b", +3318 => x"99e23865", +3319 => x"1010100b", +3320 => x"0b82f2d0", +3321 => x"05841108", +3322 => x"71085656", +3323 => x"568ffc0a", +3324 => x"56807653", +3325 => x"5364510b", +3326 => x"0b81b9a1", +3327 => x"3fb43d08", +3328 => x"b63d0858", +3329 => x"547655a8", +3330 => x"3d08aa3d", +3331 => x"08585276", +3332 => x"536b510b", +3333 => x"0b8198d2", +3334 => x"3faa3d08", +3335 => x"ac3d0858", +3336 => x"b53d0c76", +3337 => x"b63d0c80", +3338 => x"0bb93d08", +3339 => x"bb3d085b", +3340 => x"595c80c8", +3341 => x"820a5d80", +3342 => x"5e775178", +3343 => x"520b0b81", +3344 => x"d7ab3f80", +3345 => x"08800853", +3346 => x"65525a0b", +3347 => x"0b81d4fd", +3348 => x"3fa83d08", +3349 => x"aa3d0858", +3350 => x"547655b8", +3351 => x"3d08ba3d", +3352 => x"08585276", +3353 => x"536b510b", +3354 => x"0b8197fe", +3355 => x"3faa3d08", +3356 => x"ac3d085a", +3357 => x"b93d0c78", +3358 => x"ba3d0cb0", +3359 => x"1a56757f", +3360 => x"70810541", +3361 => x"34b83d08", +3362 => x"ba3d08b6", +3363 => x"3d08b83d", +3364 => x"085a5578", +3365 => x"56715370", +3366 => x"545a580b", +3367 => x"0b81d085", +3368 => x"3f800b80", +3369 => x"08240b0b", +3370 => x"0b87d438", +3371 => x"77547855", +3372 => x"9ffc0a56", +3373 => x"80765353", +3374 => x"64510b0b", +3375 => x"8197ab3f", +3376 => x"b43d08b6", +3377 => x"3d087155", +3378 => x"7056aa3d", +3379 => x"08ac3d08", +3380 => x"5a537854", +3381 => x"5a580b0b", +3382 => x"81cfca3f", +3383 => x"800b8008", +3384 => x"240b0b0b", +3385 => x"86e63881", +3386 => x"1c5c7b66", +3387 => x"250b0b0b", +3388 => x"81c6387c", +3389 => x"547d5577", +3390 => x"5278536b", +3391 => x"510b0b81", +3392 => x"989b3faa", +3393 => x"3d08ac3d", +3394 => x"0858b53d", +3395 => x"0c76b63d", +3396 => x"0c7c547d", +3397 => x"55b83d08", +3398 => x"ba3d0858", +3399 => x"52765364", +3400 => x"510b0b81", +3401 => x"97f73fa8", +3402 => x"3d08aa3d", +3403 => x"0871bb3d", +3404 => x"0c70bc3d", +3405 => x"0c5a580b", +3406 => x"0b0bfdfd", +3407 => x"398ffc0a", +3408 => x"58807855", +3409 => x"7056b53d", +3410 => x"08b73d08", +3411 => x"59537754", +3412 => x"6552590b", +3413 => x"0b8194eb", +3414 => x"3fa83d08", +3415 => x"aa3d0858", +3416 => x"537654b8", +3417 => x"3d08ba3d", +3418 => x"08585176", +3419 => x"520b0b81", +3420 => x"cc9f3f80", +3421 => x"0880240b", +3422 => x"0b0b85d0", +3423 => x"38b43d08", +3424 => x"b63d0858", +3425 => x"54765577", +3426 => x"5278536b", +3427 => x"510b0b81", +3428 => x"95d83faa", +3429 => x"3d08ac3d", +3430 => x"08585376", +3431 => x"54b83d08", +3432 => x"ba3d0858", +3433 => x"5176520b", +3434 => x"0b81cdf9", +3435 => x"3f800b80", +3436 => x"08240b0b", +3437 => x"0b97cb38", +3438 => x"6cb73d08", +3439 => x"b93d085b", +3440 => x"ba3d0c79", +3441 => x"bb3d0ca3", +3442 => x"3d08a63d", +3443 => x"0848445f", +3444 => x"800ba73d", +3445 => x"08575877", +3446 => x"76240b0b", +3447 => x"0b0b8338", +3448 => x"81588078", +3449 => x"0657628e", +3450 => x"240b0b0b", +3451 => x"89ad3881", +3452 => x"70790658", +3453 => x"5976802e", +3454 => x"0b0b0b89", +3455 => x"9e386210", +3456 => x"10100b0b", +3457 => x"82f2d805", +3458 => x"70088412", +3459 => x"08806c24", +3460 => x"53405e56", +3461 => x"8066250b", +3462 => x"0b0b86c9", +3463 => x"38810bb9", +3464 => x"3d08bb3d", +3465 => x"085b595c", +3466 => x"7c547d55", +3467 => x"77527853", +3468 => x"64510b0b", +3469 => x"81b4e63f", +3470 => x"a83d08aa", +3471 => x"3d085851", +3472 => x"76520b0b", +3473 => x"81d3a63f", +3474 => x"80088008", +3475 => x"5365525a", +3476 => x"0b0b81d0", +3477 => x"f83f7c54", +3478 => x"7d55a83d", +3479 => x"08aa3d08", +3480 => x"58527653", +3481 => x"6b510b0b", +3482 => x"8195b23f", +3483 => x"aa3d08ac", +3484 => x"3d085854", +3485 => x"7655b83d", +3486 => x"08ba3d08", +3487 => x"58527653", +3488 => x"ac3d510b", +3489 => x"0b8193e2", +3490 => x"3fac3d08", +3491 => x"ae3d085a", +3492 => x"b93d0c78", +3493 => x"ba3d0cb0", +3494 => x"1a56757f", +3495 => x"70810541", +3496 => x"347b662e", +3497 => x"0b0b0b82", +3498 => x"c23880c8", +3499 => x"820a5680", +3500 => x"765555b8", +3501 => x"3d08ba3d", +3502 => x"08585276", +3503 => x"5364510b", +3504 => x"0b8194d9", +3505 => x"3fa83d08", +3506 => x"aa3d0871", +3507 => x"bb3d0c70", +3508 => x"bc3d0c5a", +3509 => x"58805680", +3510 => x"76545477", +3511 => x"5178520b", +3512 => x"0b81c585", +3513 => x"3f800880", +3514 => x"2e0b0b0b", +3515 => x"83913881", +3516 => x"1c5c0b0b", +3517 => x"0bfeb139", +3518 => x"a07c31ba", +3519 => x"3d08712b", +3520 => x"b43d7155", +3521 => x"70545c51", +3522 => x"560b0b81", +3523 => x"cfbf3fb2", +3524 => x"3d08b43d", +3525 => x"08b23d5d", +3526 => x"5a587580", +3527 => x"250b0b0b", +3528 => x"f097380b", +3529 => x"0b0b8485", +3530 => x"3979304b", +3531 => x"80440b0b", +3532 => x"0bf2ce39", +3533 => x"811c7808", +3534 => x"841a0859", +3535 => x"5577567d", +3536 => x"537e5465", +3537 => x"525c0b0b", +3538 => x"8193d23f", +3539 => x"a83d08aa", +3540 => x"3d085f5d", +3541 => x"0b0b0bf6", +3542 => x"eb396252", +3543 => x"64510b0b", +3544 => x"81ceea3f", +3545 => x"7c537d54", +3546 => x"a83d08aa", +3547 => x"3d085851", +3548 => x"76520b0b", +3549 => x"81c6863f", +3550 => x"80083070", +3551 => x"8008079f", +3552 => x"2a647131", +3553 => x"4551560b", +3554 => x"0b0bf1a1", +3555 => x"39800ba1", +3556 => x"3d0c8069", +3557 => x"250b0b0b", +3558 => x"84e73868", +3559 => x"69a53d0c", +3560 => x"69475c0b", +3561 => x"0b0bf4d9", +3562 => x"39925c80", +3563 => x"490b0b0b", +3564 => x"f4cf3979", +3565 => x"8f060b0b", +3566 => x"82f2d008", +3567 => x"0b0b82f2", +3568 => x"d4085955", +3569 => x"77567853", +3570 => x"79546552", +3571 => x"5a0b0b81", +3572 => x"b1cb3fa8", +3573 => x"3d08aa3d", +3574 => x"0871bb3d", +3575 => x"0c70bc3d", +3576 => x"0c5a5883", +3577 => x"5c0b0b0b", +3578 => x"f5c039b8", +3579 => x"3d08ba3d", +3580 => x"08715670", +3581 => x"57585276", +3582 => x"5364510b", +3583 => x"0b818fc3", +3584 => x"3fa83d08", +3585 => x"aa3d0871", +3586 => x"bb3d0c70", +3587 => x"bc3d0c7e", +3588 => x"557f5671", +3589 => x"5370545a", +3590 => x"580b0b81", +3591 => x"c6f33f80", +3592 => x"0880240b", +3593 => x"0b0b0ba4", +3594 => x"387c537d", +3595 => x"54775178", +3596 => x"520b0b81", +3597 => x"c2b33f80", +3598 => x"080b0b0b", +3599 => x"80c13879", +3600 => x"81065675", +3601 => x"802e0b0b", +3602 => x"0b0bb438", +3603 => x"ff1f7033", +3604 => x"575f75b9", +3605 => x"2e098106", +3606 => x"0b0b0b0b", +3607 => x"94387e6d", +3608 => x"2e098106", +3609 => x"0b0b0b0b", +3610 => x"e3386281", +3611 => x"0543b06d", +3612 => x"347e7f81", +3613 => x"05713381", +3614 => x"05584057", +3615 => x"75773460", +3616 => x"527f510b", +3617 => x"0b80c3e8", +3618 => x"3f807f34", +3619 => x"80c13d08", +3620 => x"63810571", +3621 => x"0c568c08", +3622 => x"802e0b0b", +3623 => x"0b0b8538", +3624 => x"7e8c080c", +3625 => x"6c800cba", +3626 => x"3d0d8c0c", +3627 => x"0462305b", +3628 => x"7a802e0b", +3629 => x"0b0bf4c2", +3630 => x"387a832b", +3631 => x"80f8060b", +3632 => x"0b82f2dc", +3633 => x"11080b0b", +3634 => x"82f2d812", +3635 => x"08565678", +3636 => x"53795465", +3637 => x"52560b0b", +3638 => x"8190c23f", +3639 => x"a83d08aa", +3640 => x"3d0871bb", +3641 => x"3d0c70bc", +3642 => x"3d0c7c84", +3643 => x"2c5c5a58", +3644 => x"79802e0b", +3645 => x"0b0bf482", +3646 => x"380b0b82", +3647 => x"f2b07a81", +3648 => x"06575b75", +3649 => x"0b0b0b82", +3650 => x"90387981", +3651 => x"2c881c5c", +3652 => x"5a79802e", +3653 => x"0b0b0bf3", +3654 => x"e1387981", +3655 => x"06567580", +3656 => x"2e0b0b0b", +3657 => x"0be4380b", +3658 => x"0b0b81ed", +3659 => x"399f820a", +3660 => x"56807655", +3661 => x"55775278", +3662 => x"537a510b", +3663 => x"0b818d83", +3664 => x"3fb03d08", +3665 => x"b23d085a", +3666 => x"b73d0c78", +3667 => x"b83d0cb6", +3668 => x"3d0890ff", +3669 => x"0a05b73d", +3670 => x"0cf7cd1c", +3671 => x"5c814e0b", +3672 => x"0b0bebed", +3673 => x"39757906", +3674 => x"5675802e", +3675 => x"0b0b0bf9", +3676 => x"ac388070", +3677 => x"484a6966", +3678 => x"240b0b0b", +3679 => x"82943880", +3680 => x"d0820a56", +3681 => x"80765555", +3682 => x"7c527d53", +3683 => x"64510b0b", +3684 => x"818f8a3f", +3685 => x"a83d08aa", +3686 => x"3d085853", +3687 => x"7654b83d", +3688 => x"08ba3d08", +3689 => x"58517652", +3690 => x"0b0b81c8", +3691 => x"8c3f6980", +3692 => x"08250b0b", +3693 => x"0b81db38", +3694 => x"6c5fb17f", +3695 => x"70810541", +3696 => x"34628105", +3697 => x"4366527f", +3698 => x"510b0b80", +3699 => x"c1a23f69", +3700 => x"802e0b0b", +3701 => x"0bfda838", +3702 => x"67307069", +3703 => x"079f2a51", +3704 => x"56676a2e", +3705 => x"0b0b0b0b", +3706 => x"8838750b", +3707 => x"0b0b80e5", +3708 => x"3869527f", +3709 => x"510b0b80", +3710 => x"c0f63f0b", +3711 => x"0b0bfcff", +3712 => x"39817071", +3713 => x"a63d0c71", +3714 => x"485d490b", +3715 => x"0b0beff1", +3716 => x"39815a0b", +3717 => x"0b0bf28b", +3718 => x"39811c7b", +3719 => x"08841d08", +3720 => x"59557756", +3721 => x"78537954", +3722 => x"65525c0b", +3723 => x"0b818ded", +3724 => x"3fa83d08", +3725 => x"aa3d0871", +3726 => x"bb3d0c70", +3727 => x"bc3d0c7b", +3728 => x"812c881e", +3729 => x"5e5c5a58", +3730 => x"790b0b0b", +3731 => x"fdcc380b", +3732 => x"0b0bf1a6", +3733 => x"3967527f", +3734 => x"510b0b80", +3735 => x"c0923f69", +3736 => x"527f510b", +3737 => x"0b80c088", +3738 => x"3f0b0b0b", +3739 => x"fc913977", +3740 => x"810a3253", +3741 => x"78547951", +3742 => x"7a520b0b", +3743 => x"81c4a63f", +3744 => x"80088025", +3745 => x"0b0b0bf6", +3746 => x"af3879b9", +3747 => x"3d0c7aba", +3748 => x"3d0c6809", +3749 => x"430b0b0b", +3750 => x"feab396a", +3751 => x"a63d0878", +3752 => x"794b4c59", +3753 => x"596f802e", +3754 => x"0b0b0b80", +3755 => x"d0388162", +3756 => x"250b0b0b", +3757 => x"8ec73865", +3758 => x"ff05a63d", +3759 => x"08713159", +3760 => x"5aa53d08", +3761 => x"7a250b0b", +3762 => x"0b0b9438", +3763 => x"79a63d08", +3764 => x"316f11a1", +3765 => x"3d0ca63d", +3766 => x"0805a63d", +3767 => x"0c765865", +3768 => x"5c806624", +3769 => x"0b0b0b84", +3770 => x"cb386a1c", +3771 => x"641d454b", +3772 => x"81527f51", +3773 => x"0b0b80c4", +3774 => x"de3f8008", +3775 => x"4a788024", +3776 => x"56806425", +3777 => x"0b0b0b0b", +3778 => x"a3387580", +3779 => x"2e0b0b0b", +3780 => x"0b9a3863", +3781 => x"5c786425", +3782 => x"0b0b0b0b", +3783 => x"8338785c", +3784 => x"6a7c3179", +3785 => x"7d31657e", +3786 => x"31465a4b", +3787 => x"800ba63d", +3788 => x"08250b0b", +3789 => x"0b80cb38", +3790 => x"6f802e0b", +3791 => x"0b0b8ae5", +3792 => x"38807825", +3793 => x"0b0b0b0b", +3794 => x"ac387753", +3795 => x"69527f51", +3796 => x"0b0b80c7", +3797 => x"943f8008", +3798 => x"61548008", +3799 => x"5360524a", +3800 => x"0b0b80c4", +3801 => x"8e3f8008", +3802 => x"61536052", +3803 => x"560b0b0b", +3804 => x"bdfe3f75", +3805 => x"41a53d08", +3806 => x"78315a79", +3807 => x"0b0b0b83", +3808 => x"9e388152", +3809 => x"7f510b0b", +3810 => x"80c3cc3f", +3811 => x"80084780", +3812 => x"6f250b0b", +3813 => x"0b0b9138", +3814 => x"6e538008", +3815 => x"527f510b", +3816 => x"0b80c6c5", +3817 => x"3f800847", +3818 => x"80588162", +3819 => x"250b0b0b", +3820 => x"829b3863", +3821 => x"81059f06", +3822 => x"5c6e0b0b", +3823 => x"0b81ee38", +3824 => x"7b802e0b", +3825 => x"0b0b0b85", +3826 => x"38a07c31", +3827 => x"5c847c25", +3828 => x"0b0b0b88", +3829 => x"c238fc1c", +3830 => x"6b11711b", +3831 => x"5b4c6405", +3832 => x"44806b25", +3833 => x"0b0b0b0b", +3834 => x"90386a53", +3835 => x"60527f51", +3836 => x"0b0b80c7", +3837 => x"f23f8008", +3838 => x"41806425", +3839 => x"0b0b0b0b", +3840 => x"90386353", +3841 => x"66527f51", +3842 => x"0b0b80c7", +3843 => x"da3f8008", +3844 => x"47a13d08", +3845 => x"0b0b0b80", +3846 => x"da388066", +3847 => x"25568262", +3848 => x"250b0b0b", +3849 => x"82c73875", +3850 => x"802e0b0b", +3851 => x"0b82be38", +3852 => x"8066240b", +3853 => x"0b0bfcda", +3854 => x"38805485", +3855 => x"5366527f", +3856 => x"510b0b0b", +3857 => x"bcce3f80", +3858 => x"08800853", +3859 => x"6152470b", +3860 => x"0b80c985", +3861 => x"3f800b80", +3862 => x"08250b0b", +3863 => x"0bfcb338", +3864 => x"6c5fb17f", +3865 => x"70810541", +3866 => x"34628105", +3867 => x"430b0b0b", +3868 => x"fad33966", +3869 => x"5260510b", +3870 => x"0b80c8dd", +3871 => x"3f800880", +3872 => x"250b0b0b", +3873 => x"ff943862", +3874 => x"ff054380", +3875 => x"548a5360", +3876 => x"527f510b", +3877 => x"0b0bbbfc", +3878 => x"3f800841", +3879 => x"6f0b0b0b", +3880 => x"81b038a3", +3881 => x"3d08460b", +3882 => x"0b0bfeee", +3883 => x"39669005", +3884 => x"08101067", +3885 => x"05901108", +3886 => x"52560b0b", +3887 => x"0bbec93f", +3888 => x"63800831", +3889 => x"9f065c0b", +3890 => x"0b0bfdf4", +3891 => x"39b93d08", +3892 => x"782e0981", +3893 => x"060b0b0b", +3894 => x"fdd938b8", +3895 => x"3d0870bf", +3896 => x"ffff0657", +3897 => x"5775782e", +3898 => x"0981060b", +3899 => x"0b0bfdc3", +3900 => x"38769ffe", +3901 => x"0a065675", +3902 => x"782e0b0b", +3903 => x"0bfdb438", +3904 => x"6a810564", +3905 => x"8105454b", +3906 => x"81648105", +3907 => x"9f065d58", +3908 => x"6e802e0b", +3909 => x"0b0bfda8", +3910 => x"380b0b0b", +3911 => x"ff8f3979", +3912 => x"5360527f", +3913 => x"510b0b80", +3914 => x"c3bf3f80", +3915 => x"08410b0b", +3916 => x"0bfccf39", +3917 => x"6a663159", +3918 => x"806b114c", +3919 => x"64054481", +3920 => x"527f510b", +3921 => x"0b80c08f", +3922 => x"3f80084a", +3923 => x"0b0b0bfb", +3924 => x"ac398054", +3925 => x"8a536952", +3926 => x"7f510b0b", +3927 => x"0bbab53f", +3928 => x"8008a43d", +3929 => x"08474a0b", +3930 => x"0b0bfdae", +3931 => x"39815c6f", +3932 => x"802e0b0b", +3933 => x"0b82bb38", +3934 => x"8079250b", +3935 => x"0b0b0b90", +3936 => x"38785369", +3937 => x"527f510b", +3938 => x"0b80c4db", +3939 => x"3f80084a", +3940 => x"6948770b", +3941 => x"0b0b82e9", +3942 => x"38815c66", +3943 => x"5260510b", +3944 => x"0b0bdce3", +3945 => x"3f8008b0", +3946 => x"05685361", +3947 => x"52570b0b", +3948 => x"80c6a63f", +3949 => x"80086a54", +3950 => x"67536052", +3951 => x"5a0b0b80", +3952 => x"c6fe3f80", +3953 => x"0856815b", +3954 => x"80088c05", +3955 => x"08802e0b", +3956 => x"0b0b8299", +3957 => x"3875527f", +3958 => x"510b0b0b", +3959 => x"b9923f7a", +3960 => x"62075675", +3961 => x"0b0b0b0b", +3962 => x"9038b93d", +3963 => x"08810656", +3964 => x"75802e0b", +3965 => x"0b0b82c8", +3966 => x"38807a24", +3967 => x"0b0b0b82", +3968 => x"da387962", +3969 => x"0756750b", +3970 => x"0b0b0b90", +3971 => x"38b93d08", +3972 => x"81065675", +3973 => x"802e0b0b", +3974 => x"0b82c038", +3975 => x"7a80240b", +3976 => x"0b0b8883", +3977 => x"38767f70", +3978 => x"81054134", +3979 => x"7b662e0b", +3980 => x"0b0b83fd", +3981 => x"3880548a", +3982 => x"5360527f", +3983 => x"510b0b0b", +3984 => x"b8d23f80", +3985 => x"0841676a", +3986 => x"2e0b0b0b", +3987 => x"83ac3880", +3988 => x"548a5367", +3989 => x"527f510b", +3990 => x"0b0bb8b8", +3991 => x"3f800848", +3992 => x"80548a53", +3993 => x"69527f51", +3994 => x"0b0b0bb8", +3995 => x"a73f8008", +3996 => x"811d5d4a", +3997 => x"66526051", +3998 => x"0b0b0bdb", +3999 => x"8a3f8008", +4000 => x"b0056853", +4001 => x"6152570b", +4002 => x"0b80c4cd", +4003 => x"3f80086a", +4004 => x"54675360", +4005 => x"525a0b0b", +4006 => x"80c5a53f", +4007 => x"80085681", +4008 => x"5b80088c", +4009 => x"05080b0b", +4010 => x"0bfeaa38", +4011 => x"0b0b0b0b", +4012 => x"bc396652", +4013 => x"7e7f8105", +4014 => x"62534056", +4015 => x"0b0b0bda", +4016 => x"c63f8008", +4017 => x"b0055776", +4018 => x"76347b66", +4019 => x"250b0b0b", +4020 => x"82df3880", +4021 => x"548a5360", +4022 => x"527f510b", +4023 => x"0b0bb7b4", +4024 => x"3f800881", +4025 => x"1d5d410b", +4026 => x"0b0b0bc6", +4027 => x"39800852", +4028 => x"60510b0b", +4029 => x"80c3e23f", +4030 => x"80085b0b", +4031 => x"0b0bfdd5", +4032 => x"39698405", +4033 => x"08527f51", +4034 => x"0b0b0bb5", +4035 => x"bc3f8008", +4036 => x"68900508", +4037 => x"10108805", +4038 => x"54688c05", +4039 => x"5380088c", +4040 => x"05524a0b", +4041 => x"0bff94e3", +4042 => x"3f815369", +4043 => x"527f510b", +4044 => x"0b80c1b3", +4045 => x"3f80084a", +4046 => x"815c0b0b", +4047 => x"0bfcdc39", +4048 => x"76b92e0b", +4049 => x"0b0b80d0", +4050 => x"38798024", +4051 => x"1757767f", +4052 => x"70810541", +4053 => x"340b0b0b", +4054 => x"f4eb3980", +4055 => x"7b250b0b", +4056 => x"0b0beb38", +4057 => x"81536052", +4058 => x"7f510b0b", +4059 => x"80c0f83f", +4060 => x"80086753", +4061 => x"80085241", +4062 => x"0b0b80c2", +4063 => x"dc3f800b", +4064 => x"8008250b", +4065 => x"0b0b80c8", +4066 => x"38811757", +4067 => x"76ba2e09", +4068 => x"81060b0b", +4069 => x"0bffb738", +4070 => x"b97f7081", +4071 => x"054134ff", +4072 => x"1f703357", +4073 => x"5f75b92e", +4074 => x"0981060b", +4075 => x"0b0b81d0", +4076 => x"387e6d2e", +4077 => x"0981060b", +4078 => x"0b0b0be3", +4079 => x"38628105", +4080 => x"6d4043b1", +4081 => x"7f708105", +4082 => x"41340b0b", +4083 => x"0bf3f639", +4084 => x"80080b0b", +4085 => x"0bfef738", +4086 => x"76810656", +4087 => x"75802e0b", +4088 => x"0b0bfeea", +4089 => x"38811757", +4090 => x"76ba2e09", +4091 => x"81060b0b", +4092 => x"0bfedb38", +4093 => x"0b0b0bff", +4094 => x"9f398054", +4095 => x"8a536952", +4096 => x"7f510b0b", +4097 => x"0bb58d3f", +4098 => x"80088008", +4099 => x"811e5e49", +4100 => x"4a0b0b0b", +4101 => x"fcde397b", +4102 => x"83240b0b", +4103 => x"0bf7c238", +4104 => x"9c1c6b11", +4105 => x"711b5b4c", +4106 => x"6405440b", +4107 => x"0b0bf7b1", +4108 => x"39815360", +4109 => x"527f510b", +4110 => x"0b0bbfab", +4111 => x"3f800867", +4112 => x"53800852", +4113 => x"410b0b80", +4114 => x"c18f3f80", +4115 => x"0880240b", +4116 => x"0b0bfecb", +4117 => x"3880080b", +4118 => x"0b0b0b8c", +4119 => x"38768106", +4120 => x"56750b0b", +4121 => x"0bfeb838", +4122 => x"ff1f7033", +4123 => x"575f75b0", +4124 => x"2e0b0b0b", +4125 => x"0bf23881", +4126 => x"1f5f0b0b", +4127 => x"0bf2c639", +4128 => x"7e7f8105", +4129 => x"71338105", +4130 => x"58405775", +4131 => x"77340b0b", +4132 => x"0bf2b239", +4133 => x"6a633163", +4134 => x"30a73d0c", +4135 => x"4b804f0b", +4136 => x"0b0bdff1", +4137 => x"39a53d08", +4138 => x"5360527f", +4139 => x"510b0b0b", +4140 => x"bcb73f80", +4141 => x"08410b0b", +4142 => x"0bf5c739", +4143 => x"65101010", +4144 => x"0b0b82f2", +4145 => x"d0058411", +4146 => x"08710856", +4147 => x"56b53d08", +4148 => x"b73d0859", +4149 => x"53567653", +4150 => x"64510b0b", +4151 => x"8180be3f", +4152 => x"a83d08aa", +4153 => x"3d0858b5", +4154 => x"3d0c76b6", +4155 => x"3d0c810b", +4156 => x"b93d08bb", +4157 => x"3d085b59", +4158 => x"5c775178", +4159 => x"520b0b81", +4160 => x"bdeb3f80", +4161 => x"08800853", +4162 => x"65525a0b", +4163 => x"0b81bbbd", +4164 => x"3fa83d08", +4165 => x"aa3d0858", +4166 => x"547655b8", +4167 => x"3d08ba3d", +4168 => x"08585276", +4169 => x"536b510b", +4170 => x"0b80febe", +4171 => x"3faa3d08", +4172 => x"ac3d085a", +4173 => x"b93d0c78", +4174 => x"ba3d0cb0", +4175 => x"1a56757f", +4176 => x"70810541", +4177 => x"347b662e", +4178 => x"0b0b0be7", +4179 => x"f038811c", +4180 => x"5c80c882", +4181 => x"0a568076", +4182 => x"5555b83d", +4183 => x"08ba3d08", +4184 => x"58527653", +4185 => x"64510b0b", +4186 => x"80ffb23f", +4187 => x"a83d08aa", +4188 => x"3d0871bb", +4189 => x"3d0c70bc", +4190 => x"3d0c5a58", +4191 => x"0b0b0bfe", +4192 => x"f839ff1f", +4193 => x"7033575f", +4194 => x"75b02e0b", +4195 => x"0b0b0bf2", +4196 => x"38811f5f", +4197 => x"0b0b0bed", +4198 => x"e6396566", +4199 => x"484a80d0", +4200 => x"820a5680", +4201 => x"765555b8", +4202 => x"3d08ba3d", +4203 => x"08585276", +4204 => x"5364510b", +4205 => x"0b80fdb2", +4206 => x"3fa83d08", +4207 => x"aa3d08b6", +4208 => x"3d08b83d", +4209 => x"08715770", +4210 => x"58735572", +4211 => x"565c5a5c", +4212 => x"5a0b0b81", +4213 => x"b3bb3f80", +4214 => x"0b800825", +4215 => x"0b0b0bf1", +4216 => x"8e3879b9", +4217 => x"3d0c7aba", +4218 => x"3d0c6c5f", +4219 => x"b17f7081", +4220 => x"05413462", +4221 => x"8105430b", +4222 => x"0b0befc9", +4223 => x"3988b316", +4224 => x"5c6d0b0b", +4225 => x"0bf1e338", +4226 => x"b60ba83d", +4227 => x"08316b11", +4228 => x"4c640544", +4229 => x"81527f51", +4230 => x"0b0b0bb6", +4231 => x"ba3f8008", +4232 => x"4a0b0b0b", +4233 => x"f1d73976", +4234 => x"b92e0b0b", +4235 => x"0bfae938", +4236 => x"81175675", +4237 => x"7f708105", +4238 => x"41340b0b", +4239 => x"0bef8639", +4240 => x"f83d0d7a", +4241 => x"5877802e", +4242 => x"0b0b0b81", +4243 => x"bd380b0b", +4244 => x"82f4ec08", +4245 => x"54b81408", +4246 => x"802e0b0b", +4247 => x"0b818238", +4248 => x"8c182270", +4249 => x"902b7090", +4250 => x"2c70832a", +4251 => x"81328106", +4252 => x"5c515754", +4253 => x"780b0b0b", +4254 => x"80df3890", +4255 => x"18085776", +4256 => x"802e0b0b", +4257 => x"0b80d238", +4258 => x"77087731", +4259 => x"77790c76", +4260 => x"83067a58", +4261 => x"5555730b", +4262 => x"0b0b0b85", +4263 => x"38941808", +4264 => x"56758819", +4265 => x"0c807525", +4266 => x"0b0b0b0b", +4267 => x"ac387453", +4268 => x"76529c18", +4269 => x"0851a418", +4270 => x"0854732d", +4271 => x"800b8008", +4272 => x"250b0b0b", +4273 => x"80df3880", +4274 => x"08177580", +4275 => x"08315657", +4276 => x"7480240b", +4277 => x"0b0b0bd6", +4278 => x"38800b80", +4279 => x"0c8a3d0d", +4280 => x"0473510b", +4281 => x"0b0b81f7", +4282 => x"3f8c1822", +4283 => x"70902b70", +4284 => x"902c7083", +4285 => x"2a813281", +4286 => x"065c5157", +4287 => x"54780b0b", +4288 => x"0b0bd638", +4289 => x"0b0b0bfe", +4290 => x"f2390b0b", +4291 => x"8184c052", +4292 => x"0b0b82f4", +4293 => x"ec08510b", +4294 => x"0b0b93b4", +4295 => x"3f800880", +4296 => x"0c8a3d0d", +4297 => x"048c1822", +4298 => x"80c00754", +4299 => x"738c1923", +4300 => x"ff0b800c", +4301 => x"8a3d0d04", +4302 => x"70725180", +4303 => x"710c800b", +4304 => x"84120c80", +4305 => x"0b88120c", +4306 => x"028e0522", +4307 => x"8c122302", +4308 => x"9205228e", +4309 => x"1223800b", +4310 => x"90120c80", +4311 => x"0b94120c", +4312 => x"800b9812", +4313 => x"0c709c12", +4314 => x"0c0b0b81", +4315 => x"d7880ba0", +4316 => x"120c0b0b", +4317 => x"81d7dd0b", +4318 => x"a4120c0b", +4319 => x"0b81d8ec", +4320 => x"0ba8120c", +4321 => x"0b0b81d9", +4322 => x"c60bac12", +4323 => x"0c5004fa", +4324 => x"3d0d7970", +4325 => x"80dc298c", +4326 => x"11547a53", +4327 => x"56570b0b", +4328 => x"0b989f3f", +4329 => x"80088008", +4330 => x"55568008", +4331 => x"802e0b0b", +4332 => x"0b0ba538", +4333 => x"80088c05", +4334 => x"54800b80", +4335 => x"080c7680", +4336 => x"0884050c", +4337 => x"73800888", +4338 => x"050c7453", +4339 => x"80527351", +4340 => x"0b0b0baa", +4341 => x"c03f7554", +4342 => x"73800c88", +4343 => x"3d0d04fc", +4344 => x"3d0d760b", +4345 => x"0b818aa8", +4346 => x"0bbc120c", +4347 => x"55810bb8", +4348 => x"160c800b", +4349 => x"84dc160c", +4350 => x"830b84e0", +4351 => x"160c84e8", +4352 => x"1584e416", +4353 => x"0c745480", +4354 => x"53845284", +4355 => x"1508510b", +4356 => x"0b0bfea4", +4357 => x"3f745481", +4358 => x"53895288", +4359 => x"1508510b", +4360 => x"0b0bfe94", +4361 => x"3f745482", +4362 => x"538a528c", +4363 => x"1508510b", +4364 => x"0b0bfe84", +4365 => x"3f863d0d", +4366 => x"04f93d0d", +4367 => x"790b0b82", +4368 => x"f4ec0854", +4369 => x"57b81308", +4370 => x"802e0b0b", +4371 => x"0b80db38", +4372 => x"84dc1356", +4373 => x"88160884", +4374 => x"1708ff05", +4375 => x"55558074", +4376 => x"240b0b0b", +4377 => x"0ba6388c", +4378 => x"15227090", +4379 => x"2b70902c", +4380 => x"51545872", +4381 => x"802e0b0b", +4382 => x"0b80e838", +4383 => x"80dc15ff", +4384 => x"15555573", +4385 => x"80250b0b", +4386 => x"0b0bdc38", +4387 => x"75085372", +4388 => x"802e0b0b", +4389 => x"0b0bab38", +4390 => x"72568816", +4391 => x"08841708", +4392 => x"ff055555", +4393 => x"0b0b0bff", +4394 => x"b5397251", +4395 => x"0b0b0bfe", +4396 => x"ae3f0b0b", +4397 => x"82f4ec08", +4398 => x"84dc0556", +4399 => x"0b0b0bff", +4400 => x"93398452", +4401 => x"76510b0b", +4402 => x"0bfdc43f", +4403 => x"8008760c", +4404 => x"8008802e", +4405 => x"0b0b0b80", +4406 => x"c4388008", +4407 => x"560b0b0b", +4408 => x"ffb83981", +4409 => x"0b8c1623", +4410 => x"72750c72", +4411 => x"88160c72", +4412 => x"84160c72", +4413 => x"90160c72", +4414 => x"94160c72", +4415 => x"98160cff", +4416 => x"0b8e1623", +4417 => x"72b0160c", +4418 => x"72b4160c", +4419 => x"7280c416", +4420 => x"0c7280c8", +4421 => x"160c7480", +4422 => x"0c893d0d", +4423 => x"048c770c", +4424 => x"800b800c", +4425 => x"893d0d04", +4426 => x"70700b0b", +4427 => x"8184c052", +4428 => x"73510b0b", +4429 => x"0b8f993f", +4430 => x"50500470", +4431 => x"0b0b82f4", +4432 => x"ec08510b", +4433 => x"0b0b0be0", +4434 => x"3f5004fb", +4435 => x"3d0d7770", +4436 => x"52560b0b", +4437 => x"0ba8f03f", +4438 => x"0b0b82fc", +4439 => x"c80b8805", +4440 => x"08841108", +4441 => x"fc06707b", +4442 => x"319fef05", +4443 => x"e08006e0", +4444 => x"80055656", +4445 => x"53a08074", +4446 => x"240b0b0b", +4447 => x"0b9d3880", +4448 => x"5275510b", +4449 => x"0b80cbba", +4450 => x"3f0b0b82", +4451 => x"fcd00815", +4452 => x"53728008", +4453 => x"2e0b0b0b", +4454 => x"0b923875", +4455 => x"510b0b0b", +4456 => x"a8a63f80", +4457 => x"5372800c", +4458 => x"873d0d04", +4459 => x"73305275", +4460 => x"510b0b80", +4461 => x"cb8c3f80", +4462 => x"08ff2e0b", +4463 => x"0b0b0bb1", +4464 => x"380b0b82", +4465 => x"fcc80b88", +4466 => x"05087575", +4467 => x"31810784", +4468 => x"120c530b", +4469 => x"0b82fc8c", +4470 => x"0874310b", +4471 => x"0b82fc8c", +4472 => x"0c75510b", +4473 => x"0b0ba7e0", +4474 => x"3f810b80", +4475 => x"0c873d0d", +4476 => x"04805275", +4477 => x"510b0b80", +4478 => x"cac83f0b", +4479 => x"0b82fcc8", +4480 => x"0b880508", +4481 => x"80087131", +4482 => x"56538f75", +4483 => x"250b0b0b", +4484 => x"ff893880", +4485 => x"080b0b82", +4486 => x"fcbc0831", +4487 => x"0b0b82fc", +4488 => x"8c0c7481", +4489 => x"0784140c", +4490 => x"75510b0b", +4491 => x"0ba7993f", +4492 => x"80530b0b", +4493 => x"0bfeee39", +4494 => x"f63d0d7c", +4495 => x"7e545b72", +4496 => x"802e0b0b", +4497 => x"0b82c838", +4498 => x"7a510b0b", +4499 => x"0ba6f83f", +4500 => x"f8138411", +4501 => x"0870fe06", +4502 => x"70138411", +4503 => x"08fc065d", +4504 => x"58595458", +4505 => x"0b0b82fc", +4506 => x"d008752e", +4507 => x"0b0b0b83", +4508 => x"b5387884", +4509 => x"160c8073", +4510 => x"8106545a", +4511 => x"727a2e0b", +4512 => x"0b0b828f", +4513 => x"38781584", +4514 => x"11088106", +4515 => x"5153720b", +4516 => x"0b0b0ba8", +4517 => x"38781757", +4518 => x"790b0b0b", +4519 => x"82a13888", +4520 => x"15085372", +4521 => x"0b0b82fc", +4522 => x"d02e0b0b", +4523 => x"0b83d738", +4524 => x"8c150870", +4525 => x"8c150c73", +4526 => x"88120c56", +4527 => x"76810784", +4528 => x"190c7618", +4529 => x"77710c53", +4530 => x"790b0b0b", +4531 => x"81b93883", +4532 => x"ff77270b", +4533 => x"0b0b81fb", +4534 => x"3876892a", +4535 => x"77832a56", +4536 => x"5372802e", +4537 => x"0b0b0b80", +4538 => x"d3387686", +4539 => x"2ab80555", +4540 => x"8473270b", +4541 => x"0b0b80c4", +4542 => x"3880db13", +4543 => x"55947327", +4544 => x"0b0b0b0b", +4545 => x"b738768c", +4546 => x"2a80ee05", +4547 => x"5580d473", +4548 => x"270b0b0b", +4549 => x"0ba63876", +4550 => x"8f2a80f7", +4551 => x"055582d4", +4552 => x"73270b0b", +4553 => x"0b0b9538", +4554 => x"76922a80", +4555 => x"fc05558a", +4556 => x"d473270b", +4557 => x"0b0b0b84", +4558 => x"3880fe55", +4559 => x"74101010", +4560 => x"0b0b82fc", +4561 => x"c8058811", +4562 => x"08555673", +4563 => x"762e0b0b", +4564 => x"0b82fa38", +4565 => x"841408fc", +4566 => x"06537673", +4567 => x"270b0b0b", +4568 => x"0b913888", +4569 => x"14085473", +4570 => x"762e0981", +4571 => x"060b0b0b", +4572 => x"0be2388c", +4573 => x"1408708c", +4574 => x"1a0c7488", +4575 => x"1a0c7888", +4576 => x"120c5677", +4577 => x"8c150c7a", +4578 => x"510b0b0b", +4579 => x"a4ba3f8c", +4580 => x"3d0d0477", +4581 => x"08787131", +4582 => x"59770588", +4583 => x"19085457", +4584 => x"720b0b82", +4585 => x"fcd02e0b", +4586 => x"0b0b80f2", +4587 => x"388c1808", +4588 => x"708c150c", +4589 => x"7388120c", +4590 => x"560b0b0b", +4591 => x"fdc73988", +4592 => x"15088c16", +4593 => x"08708c13", +4594 => x"0c578817", +4595 => x"0c0b0b0b", +4596 => x"fdea3976", +4597 => x"832a7054", +4598 => x"55807524", +4599 => x"0b0b0b81", +4600 => x"bd387282", +4601 => x"2c81712b", +4602 => x"0b0b82fc", +4603 => x"cc08070b", +4604 => x"0b82fcc8", +4605 => x"0b84050c", +4606 => x"53741010", +4607 => x"100b0b82", +4608 => x"fcc80588", +4609 => x"11085556", +4610 => x"758c190c", +4611 => x"7388190c", +4612 => x"7788170c", +4613 => x"778c150c", +4614 => x"0b0b0bfe", +4615 => x"ea39815a", +4616 => x"0b0b0bfc", +4617 => x"e0397817", +4618 => x"73810654", +4619 => x"57720b0b", +4620 => x"0b0b9838", +4621 => x"77087871", +4622 => x"31597705", +4623 => x"8c190888", +4624 => x"1a08718c", +4625 => x"120c8812", +4626 => x"0c575776", +4627 => x"81078419", +4628 => x"0c770b0b", +4629 => x"82fcc80b", +4630 => x"88050c0b", +4631 => x"0b82fcc4", +4632 => x"0877260b", +4633 => x"0b0bfe9f", +4634 => x"380b0b82", +4635 => x"fcc00852", +4636 => x"7a510b0b", +4637 => x"0bf9d43f", +4638 => x"7a510b0b", +4639 => x"0ba2c93f", +4640 => x"0b0b0bfe", +4641 => x"8a398178", +4642 => x"8c150c78", +4643 => x"88150c73", +4644 => x"8c1a0c73", +4645 => x"881a0c5a", +4646 => x"0b0b0bfc", +4647 => x"9f398315", +4648 => x"70822c81", +4649 => x"712b0b0b", +4650 => x"82fccc08", +4651 => x"070b0b82", +4652 => x"fcc80b84", +4653 => x"050c5153", +4654 => x"74101010", +4655 => x"0b0b82fc", +4656 => x"c8058811", +4657 => x"0855560b", +4658 => x"0b0bfebc", +4659 => x"39745380", +4660 => x"75240b0b", +4661 => x"0b0bae38", +4662 => x"72822c81", +4663 => x"712b0b0b", +4664 => x"82fccc08", +4665 => x"070b0b82", +4666 => x"fcc80b84", +4667 => x"050c5375", +4668 => x"8c190c73", +4669 => x"88190c77", +4670 => x"88170c77", +4671 => x"8c150c0b", +4672 => x"0b0bfd83", +4673 => x"39831570", +4674 => x"822c8171", +4675 => x"2b0b0b82", +4676 => x"fccc0807", +4677 => x"0b0b82fc", +4678 => x"c80b8405", +4679 => x"0c51530b", +4680 => x"0b0b0bcb", +4681 => x"39f23d0d", +4682 => x"60628811", +4683 => x"08705757", +4684 => x"5f5a7480", +4685 => x"2e0b0b0b", +4686 => x"81b3388c", +4687 => x"1a227083", +4688 => x"2a813270", +4689 => x"81065155", +4690 => x"58730b0b", +4691 => x"0b0b8a38", +4692 => x"901a080b", +4693 => x"0b0b0b97", +4694 => x"3879510b", +4695 => x"0b0bc388", +4696 => x"3fff5480", +4697 => x"080b0b0b", +4698 => x"8183388c", +4699 => x"1a22587d", +4700 => x"08578078", +4701 => x"83ffff06", +4702 => x"700a100a", +4703 => x"70810651", +4704 => x"56575573", +4705 => x"752e0b0b", +4706 => x"0b80e938", +4707 => x"740b0b0b", +4708 => x"0b943876", +4709 => x"08841808", +4710 => x"88195956", +4711 => x"5974802e", +4712 => x"0b0b0b0b", +4713 => x"ee387454", +4714 => x"88807527", +4715 => x"0b0b0b0b", +4716 => x"84388880", +4717 => x"54735378", +4718 => x"529c1a08", +4719 => x"51a41a08", +4720 => x"54732d80", +4721 => x"0b800825", +4722 => x"0b0b0b83", +4723 => x"bf388008", +4724 => x"19758008", +4725 => x"317f8805", +4726 => x"08800831", +4727 => x"70618805", +4728 => x"0c565659", +4729 => x"730b0b0b", +4730 => x"ffa23880", +4731 => x"5473800c", +4732 => x"903d0d04", +4733 => x"75813270", +4734 => x"81067641", +4735 => x"51547380", +4736 => x"2e0b0b0b", +4737 => x"81f03874", +4738 => x"0b0b0b0b", +4739 => x"94387608", +4740 => x"84180888", +4741 => x"19595659", +4742 => x"74802e0b", +4743 => x"0b0b0bee", +4744 => x"38881a08", +4745 => x"7883ffff", +4746 => x"0670892a", +4747 => x"70810651", +4748 => x"56595673", +4749 => x"802e0b0b", +4750 => x"0b83e338", +4751 => x"7575270b", +4752 => x"0b0b0b90", +4753 => x"3877872a", +4754 => x"70810651", +4755 => x"54730b0b", +4756 => x"0b838c38", +4757 => x"7476270b", +4758 => x"0b0b0b83", +4759 => x"38745675", +4760 => x"53785279", +4761 => x"08510b0b", +4762 => x"0b9bb83f", +4763 => x"881a0876", +4764 => x"31881b0c", +4765 => x"7908167a", +4766 => x"0c745675", +4767 => x"19757731", +4768 => x"7f880508", +4769 => x"78317061", +4770 => x"88050c56", +4771 => x"56597380", +4772 => x"2e0b0b0b", +4773 => x"fed5388c", +4774 => x"1a22580b", +4775 => x"0b0bfee7", +4776 => x"39777854", +4777 => x"79537b52", +4778 => x"560b0b0b", +4779 => x"9af53f88", +4780 => x"1a087831", +4781 => x"881b0c79", +4782 => x"08187a0c", +4783 => x"7c76315d", +4784 => x"7c0b0b0b", +4785 => x"0b943879", +4786 => x"510b0b0b", +4787 => x"eef23f80", +4788 => x"080b0b0b", +4789 => x"81b63880", +4790 => x"085f7519", +4791 => x"7577317f", +4792 => x"88050878", +4793 => x"31706188", +4794 => x"050c5656", +4795 => x"5973802e", +4796 => x"0b0b0bfd", +4797 => x"f638740b", +4798 => x"0b0b81a4", +4799 => x"38760884", +4800 => x"18088819", +4801 => x"59565974", +4802 => x"802e0b0b", +4803 => x"0b0bee38", +4804 => x"74538a52", +4805 => x"78510b0b", +4806 => x"0b98bb3f", +4807 => x"80087931", +4808 => x"81055d80", +4809 => x"080b0b0b", +4810 => x"0b843881", +4811 => x"155d815f", +4812 => x"7c58747d", +4813 => x"270b0b0b", +4814 => x"0b833874", +4815 => x"58941a08", +4816 => x"881b0811", +4817 => x"575c807a", +4818 => x"085c5490", +4819 => x"1a087b27", +4820 => x"0b0b0b0b", +4821 => x"83388154", +4822 => x"7578250b", +4823 => x"0b0b0b88", +4824 => x"38730b0b", +4825 => x"0b80c638", +4826 => x"7b78240b", +4827 => x"0b0bfeb1", +4828 => x"387b5378", +4829 => x"529c1a08", +4830 => x"51a41a08", +4831 => x"54732d80", +4832 => x"08568008", +4833 => x"80240b0b", +4834 => x"0bfeb138", +4835 => x"8c1a2280", +4836 => x"c0075473", +4837 => x"8c1b23ff", +4838 => x"5473800c", +4839 => x"903d0d04", +4840 => x"7e0b0b0b", +4841 => x"ff8a380b", +4842 => x"0b0bfee4", +4843 => x"39755378", +4844 => x"527a510b", +4845 => x"0b0b98eb", +4846 => x"3f790816", +4847 => x"7a0c7951", +4848 => x"0b0b0bec", +4849 => x"fb3f8008", +4850 => x"0b0b0bff", +4851 => x"bf387c76", +4852 => x"315d7c0b", +4853 => x"0b0bfe82", +4854 => x"380b0b0b", +4855 => x"fde93990", +4856 => x"1a087a08", +4857 => x"71317611", +4858 => x"70565a57", +4859 => x"520b0b82", +4860 => x"f4ec0851", +4861 => x"0b0b0bb4", +4862 => x"ad3f8008", +4863 => x"802e0b0b", +4864 => x"0bff8938", +4865 => x"8008901b", +4866 => x"0c800816", +4867 => x"7a0c7794", +4868 => x"1b0c7488", +4869 => x"1b0c7456", +4870 => x"0b0b0bfc", +4871 => x"b7397908", +4872 => x"58901a08", +4873 => x"78270b0b", +4874 => x"0b0b8338", +4875 => x"81547575", +4876 => x"270b0b0b", +4877 => x"0b883873", +4878 => x"0b0b0b0b", +4879 => x"bc38941a", +4880 => x"08567575", +4881 => x"260b0b0b", +4882 => x"80e53875", +4883 => x"5378529c", +4884 => x"1a0851a4", +4885 => x"1a085473", +4886 => x"2d800856", +4887 => x"80088024", +4888 => x"0b0b0bfc", +4889 => x"96388c1a", +4890 => x"2280c007", +4891 => x"54738c1b", +4892 => x"23ff540b", +4893 => x"0b0bfea1", +4894 => x"39755378", +4895 => x"5277510b", +4896 => x"0b0b979f", +4897 => x"3f790816", +4898 => x"7a0c7951", +4899 => x"0b0b0beb", +4900 => x"af3f8008", +4901 => x"802e0b0b", +4902 => x"0bfbe038", +4903 => x"8c1a2280", +4904 => x"c0075473", +4905 => x"8c1b23ff", +4906 => x"540b0b0b", +4907 => x"fdeb3974", +4908 => x"75547953", +4909 => x"7852560b", +4910 => x"0b0b96e7", +4911 => x"3f881a08", +4912 => x"7531881b", +4913 => x"0c790815", +4914 => x"7a0c0b0b", +4915 => x"0bfbac39", +4916 => x"f93d0d79", +4917 => x"7b585380", +4918 => x"0b0b0b82", +4919 => x"f4ec0853", +4920 => x"5672722e", +4921 => x"0b0b0b80", +4922 => x"d53884dc", +4923 => x"13557476", +4924 => x"2e0b0b0b", +4925 => x"80c83888", +4926 => x"15088416", +4927 => x"08ff0554", +4928 => x"54807324", +4929 => x"0b0b0b0b", +4930 => x"a4388c14", +4931 => x"2270902b", +4932 => x"70902c51", +4933 => x"5358710b", +4934 => x"0b0b80f6", +4935 => x"3880dc14", +4936 => x"ff145454", +4937 => x"7280250b", +4938 => x"0b0b0bde", +4939 => x"38740855", +4940 => x"740b0b0b", +4941 => x"0bc1380b", +4942 => x"0b82f4ec", +4943 => x"085284dc", +4944 => x"12557480", +4945 => x"2e0b0b0b", +4946 => x"80c13888", +4947 => x"15088416", +4948 => x"08ff0554", +4949 => x"54807324", +4950 => x"0b0b0b0b", +4951 => x"a4388c14", +4952 => x"2270902b", +4953 => x"70902c51", +4954 => x"5358710b", +4955 => x"0b0b0bb8", +4956 => x"3880dc14", +4957 => x"ff145454", +4958 => x"7280250b", +4959 => x"0b0b0bde", +4960 => x"38740855", +4961 => x"740b0b0b", +4962 => x"0bc13875", +4963 => x"800c893d", +4964 => x"0d047351", +4965 => x"762d7580", +4966 => x"080780dc", +4967 => x"15ff1555", +4968 => x"55560b0b", +4969 => x"0bfefd39", +4970 => x"7351762d", +4971 => x"75800807", +4972 => x"80dc15ff", +4973 => x"15555556", +4974 => x"0b0b0bff", +4975 => x"bb39fc3d", +4976 => x"0d767955", +4977 => x"5573802e", +4978 => x"0b0b0b0b", +4979 => x"9f380b0b", +4980 => x"82f1c852", +4981 => x"73510b0b", +4982 => x"0bbe8d3f", +4983 => x"80080b0b", +4984 => x"0b0b9638", +4985 => x"77b0160c", +4986 => x"73b4160c", +4987 => x"0b0b82f1", +4988 => x"c8537280", +4989 => x"0c863d0d", +4990 => x"040b0b82", +4991 => x"f0ec5273", +4992 => x"510b0b0b", +4993 => x"bde23f80", +4994 => x"53800873", +4995 => x"2e098106", +4996 => x"0b0b0b0b", +4997 => x"dd3877b0", +4998 => x"160c73b4", +4999 => x"160c0b0b", +5000 => x"0b0bc939", +5001 => x"0b0b82fc", +5002 => x"8808800c", +5003 => x"040b0b82", +5004 => x"f1d80b80", +5005 => x"0c047070", +5006 => x"70755374", +5007 => x"520b0b82", +5008 => x"f4ec0851", +5009 => x"0b0b0bfe", +5010 => x"f53f5050", +5011 => x"5004700b", +5012 => x"0b82f4ec", +5013 => x"08510b0b", +5014 => x"0b0bd23f", +5015 => x"5004ea3d", +5016 => x"0d688c11", +5017 => x"22700a10", +5018 => x"0a810657", +5019 => x"5856740b", +5020 => x"0b0b8180", +5021 => x"388e1622", +5022 => x"70902b70", +5023 => x"902c5155", +5024 => x"58807424", +5025 => x"0b0b0b80", +5026 => x"c038983d", +5027 => x"c4055373", +5028 => x"520b0b82", +5029 => x"f4ec0851", +5030 => x"0b0b80c1", +5031 => x"ac3f800b", +5032 => x"8008240b", +5033 => x"0b0b0b9d", +5034 => x"387983e0", +5035 => x"80065473", +5036 => x"80c0802e", +5037 => x"0b0b0b81", +5038 => x"aa387382", +5039 => x"80802e0b", +5040 => x"0b0b81ac", +5041 => x"388c1622", +5042 => x"57769080", +5043 => x"0754738c", +5044 => x"17238880", +5045 => x"520b0b82", +5046 => x"f4ec0851", +5047 => x"0b0b0b81", +5048 => x"e13f8008", +5049 => x"0b0b0b0b", +5050 => x"9d388c16", +5051 => x"22820754", +5052 => x"738c1723", +5053 => x"80c31670", +5054 => x"770c9017", +5055 => x"0c810b94", +5056 => x"170c983d", +5057 => x"0d040b0b", +5058 => x"82f4ec08", +5059 => x"0b0b818a", +5060 => x"a80bbc12", +5061 => x"0c548c16", +5062 => x"22818007", +5063 => x"54738c17", +5064 => x"23800876", +5065 => x"0c800890", +5066 => x"170c8880", +5067 => x"0b94170c", +5068 => x"74802e0b", +5069 => x"0b0b0bca", +5070 => x"388e1622", +5071 => x"70902b70", +5072 => x"902c5355", +5073 => x"580b0b80", +5074 => x"ced33f80", +5075 => x"08802e0b", +5076 => x"0b0bffae", +5077 => x"388c1622", +5078 => x"81075473", +5079 => x"8c172398", +5080 => x"3d0d0481", +5081 => x"0b8c1722", +5082 => x"58550b0b", +5083 => x"0bfeda39", +5084 => x"a816080b", +5085 => x"0b81d8ec", +5086 => x"2e098106", +5087 => x"0b0b0bfe", +5088 => x"c4388c16", +5089 => x"22888007", +5090 => x"54738c17", +5091 => x"2388800b", +5092 => x"80cc170c", +5093 => x"0b0b0bfe", +5094 => x"b9397070", +5095 => x"73520b0b", +5096 => x"82f4ec08", +5097 => x"510b0b0b", +5098 => x"0b983f50", +5099 => x"50047070", +5100 => x"73520b0b", +5101 => x"82f4ec08", +5102 => x"510b0b0b", +5103 => x"ecfa3f50", +5104 => x"5004f33d", +5105 => x"0d7f618b", +5106 => x"1170f806", +5107 => x"5c55555e", +5108 => x"7296260b", +5109 => x"0b0b0b83", +5110 => x"38905980", +5111 => x"7924747a", +5112 => x"26075380", +5113 => x"5472742e", +5114 => x"0981060b", +5115 => x"0b0b80d9", +5116 => x"387d510b", +5117 => x"0b0b93cf", +5118 => x"3f7883f7", +5119 => x"260b0b0b", +5120 => x"80ce3878", +5121 => x"832a7010", +5122 => x"10100b0b", +5123 => x"82fcc805", +5124 => x"8c110859", +5125 => x"595a7678", +5126 => x"2e0b0b0b", +5127 => x"84aa3884", +5128 => x"1708fc06", +5129 => x"568c1708", +5130 => x"88180871", +5131 => x"8c120c88", +5132 => x"120c5875", +5133 => x"17841108", +5134 => x"81078412", +5135 => x"0c537d51", +5136 => x"0b0b0b93", +5137 => x"833f8817", +5138 => x"5473800c", +5139 => x"8f3d0d04", +5140 => x"78892a79", +5141 => x"832a5b53", +5142 => x"72802e0b", +5143 => x"0b0b80d3", +5144 => x"3878862a", +5145 => x"b8055a84", +5146 => x"73270b0b", +5147 => x"0b80c438", +5148 => x"80db135a", +5149 => x"9473270b", +5150 => x"0b0b0bb7", +5151 => x"38788c2a", +5152 => x"80ee055a", +5153 => x"80d47327", +5154 => x"0b0b0b0b", +5155 => x"a638788f", +5156 => x"2a80f705", +5157 => x"5a82d473", +5158 => x"270b0b0b", +5159 => x"0b953878", +5160 => x"922a80fc", +5161 => x"055a8ad4", +5162 => x"73270b0b", +5163 => x"0b0b8438", +5164 => x"80fe5a79", +5165 => x"1010100b", +5166 => x"0b82fcc8", +5167 => x"058c1108", +5168 => x"58557675", +5169 => x"2e0b0b0b", +5170 => x"0bad3884", +5171 => x"1708fc06", +5172 => x"707a3155", +5173 => x"56738f24", +5174 => x"0b0b0b8b", +5175 => x"94387380", +5176 => x"250b0b0b", +5177 => x"febf388c", +5178 => x"17085776", +5179 => x"752e0981", +5180 => x"060b0b0b", +5181 => x"0bd53881", +5182 => x"1a5a0b0b", +5183 => x"82fcd808", +5184 => x"57760b0b", +5185 => x"82fcd02e", +5186 => x"0b0b0b83", +5187 => x"9a388417", +5188 => x"08fc0670", +5189 => x"7a315556", +5190 => x"738f240b", +5191 => x"0b0b82c4", +5192 => x"380b0b82", +5193 => x"fcd00b0b", +5194 => x"0b82fcdc", +5195 => x"0c0b0b82", +5196 => x"fcd00b0b", +5197 => x"0b82fcd8", +5198 => x"0c738025", +5199 => x"0b0b0bfd", +5200 => x"f23883ff", +5201 => x"76270b0b", +5202 => x"0b84e238", +5203 => x"75892a76", +5204 => x"832a5553", +5205 => x"72802e0b", +5206 => x"0b0b80d3", +5207 => x"3875862a", +5208 => x"b8055484", +5209 => x"73270b0b", +5210 => x"0b80c438", +5211 => x"80db1354", +5212 => x"9473270b", +5213 => x"0b0b0bb7", +5214 => x"38758c2a", +5215 => x"80ee0554", +5216 => x"80d47327", +5217 => x"0b0b0b0b", +5218 => x"a638758f", +5219 => x"2a80f705", +5220 => x"5482d473", +5221 => x"270b0b0b", +5222 => x"0b953875", +5223 => x"922a80fc", +5224 => x"05548ad4", +5225 => x"73270b0b", +5226 => x"0b0b8438", +5227 => x"80fe5473", +5228 => x"1010100b", +5229 => x"0b82fcc8", +5230 => x"05881108", +5231 => x"56587478", +5232 => x"2e0b0b0b", +5233 => x"88b83884", +5234 => x"1508fc06", +5235 => x"53757327", +5236 => x"0b0b0b0b", +5237 => x"91388815", +5238 => x"08557478", +5239 => x"2e098106", +5240 => x"0b0b0b0b", +5241 => x"e2388c15", +5242 => x"080b0b82", +5243 => x"fcc80b84", +5244 => x"0508718c", +5245 => x"1a0c7688", +5246 => x"1a0c7888", +5247 => x"130c788c", +5248 => x"180c5d58", +5249 => x"7953807a", +5250 => x"240b0b0b", +5251 => x"84e93872", +5252 => x"822c8171", +5253 => x"2b5c537a", +5254 => x"7c260b0b", +5255 => x"0b81c538", +5256 => x"7b7b0653", +5257 => x"720b0b0b", +5258 => x"83d03879", +5259 => x"fc068405", +5260 => x"5a7a1070", +5261 => x"7d06545b", +5262 => x"720b0b0b", +5263 => x"83bc3884", +5264 => x"1a5a0b0b", +5265 => x"0b0bea39", +5266 => x"88178c11", +5267 => x"08585876", +5268 => x"782e0981", +5269 => x"060b0b0b", +5270 => x"fbc53882", +5271 => x"1a5a0b0b", +5272 => x"0bfd9739", +5273 => x"78177981", +5274 => x"0784190c", +5275 => x"700b0b82", +5276 => x"fcdc0c70", +5277 => x"0b0b82fc", +5278 => x"d80c0b0b", +5279 => x"82fcd00b", +5280 => x"8c120c8c", +5281 => x"11088812", +5282 => x"0c748107", +5283 => x"84120c74", +5284 => x"1175710c", +5285 => x"51537d51", +5286 => x"0b0b0b8e", +5287 => x"ab3f8817", +5288 => x"540b0b0b", +5289 => x"fba3390b", +5290 => x"0b82fcc8", +5291 => x"0b840508", +5292 => x"7a545c79", +5293 => x"80250b0b", +5294 => x"0bfed438", +5295 => x"0b0b0b83", +5296 => x"b6397a09", +5297 => x"7c06700b", +5298 => x"0b82fcc8", +5299 => x"0b84050c", +5300 => x"5c7a105b", +5301 => x"7a7c260b", +5302 => x"0b0b0b88", +5303 => x"387a0b0b", +5304 => x"0b86f738", +5305 => x"0b0b82fc", +5306 => x"c80b8805", +5307 => x"08708412", +5308 => x"08fc0670", +5309 => x"7c317c72", +5310 => x"268f7225", +5311 => x"0757575c", +5312 => x"5d557280", +5313 => x"2e0b0b0b", +5314 => x"80f73879", +5315 => x"7a160b0b", +5316 => x"82fcc008", +5317 => x"1b90115a", +5318 => x"55575b0b", +5319 => x"0b82fcbc", +5320 => x"08ff2e0b", +5321 => x"0b0b0b88", +5322 => x"38a08f13", +5323 => x"e0800657", +5324 => x"76527d51", +5325 => x"0b0b0bb0", +5326 => x"893f8008", +5327 => x"548008ff", +5328 => x"2e0b0b0b", +5329 => x"0b983880", +5330 => x"0876270b", +5331 => x"0b0b82e1", +5332 => x"38740b0b", +5333 => x"82fcc82e", +5334 => x"0b0b0b82", +5335 => x"d4380b0b", +5336 => x"82fcc80b", +5337 => x"88050855", +5338 => x"841508fc", +5339 => x"06707a31", +5340 => x"7a72268f", +5341 => x"72250752", +5342 => x"5553720b", +5343 => x"0b0b84ee", +5344 => x"38747981", +5345 => x"0784170c", +5346 => x"7916700b", +5347 => x"0b82fcc8", +5348 => x"0b88050c", +5349 => x"75810784", +5350 => x"120c547e", +5351 => x"52570b0b", +5352 => x"0b8ca53f", +5353 => x"8817540b", +5354 => x"0b0bf99d", +5355 => x"3975832a", +5356 => x"70545480", +5357 => x"74240b0b", +5358 => x"0b81c538", +5359 => x"72822c81", +5360 => x"712b0b0b", +5361 => x"82fccc08", +5362 => x"07700b0b", +5363 => x"82fcc80b", +5364 => x"84050c75", +5365 => x"1010100b", +5366 => x"0b82fcc8", +5367 => x"05881108", +5368 => x"585a5d53", +5369 => x"778c180c", +5370 => x"7488180c", +5371 => x"7688190c", +5372 => x"768c160c", +5373 => x"0b0b0bfc", +5374 => x"8b39797a", +5375 => x"1010100b", +5376 => x"0b82fcc8", +5377 => x"05705759", +5378 => x"5d8c1508", +5379 => x"5776752e", +5380 => x"0b0b0b0b", +5381 => x"ad388417", +5382 => x"08fc0670", +5383 => x"7a315556", +5384 => x"738f240b", +5385 => x"0b0b84d5", +5386 => x"38738025", +5387 => x"0b0b0b85", +5388 => x"92388c17", +5389 => x"08577675", +5390 => x"2e098106", +5391 => x"0b0b0b0b", +5392 => x"d5388815", +5393 => x"811b7083", +5394 => x"06555b55", +5395 => x"720b0b0b", +5396 => x"ffb7387c", +5397 => x"83065372", +5398 => x"802e0b0b", +5399 => x"0bfce338", +5400 => x"ff1df819", +5401 => x"595d8818", +5402 => x"08782e0b", +5403 => x"0b0b0be3", +5404 => x"380b0b0b", +5405 => x"fcdb3983", +5406 => x"1a530b0b", +5407 => x"0bfb9039", +5408 => x"83147082", +5409 => x"2c81712b", +5410 => x"0b0b82fc", +5411 => x"cc080770", +5412 => x"0b0b82fc", +5413 => x"c80b8405", +5414 => x"0c761010", +5415 => x"100b0b82", +5416 => x"fcc80588", +5417 => x"1108595b", +5418 => x"5e51530b", +5419 => x"0b0bfeb4", +5420 => x"390b0b82", +5421 => x"fc8c0817", +5422 => x"58800876", +5423 => x"2e0b0b0b", +5424 => x"81b2380b", +5425 => x"0b82fcbc", +5426 => x"08ff2e0b", +5427 => x"0b0b84e8", +5428 => x"38737631", +5429 => x"180b0b82", +5430 => x"fc8c0c73", +5431 => x"87067057", +5432 => x"5372802e", +5433 => x"0b0b0b0b", +5434 => x"88388873", +5435 => x"31701555", +5436 => x"5676149f", +5437 => x"ff06a080", +5438 => x"71311770", +5439 => x"547f5357", +5440 => x"530b0b0b", +5441 => x"acbc3f80", +5442 => x"08538008", +5443 => x"ff2e0b0b", +5444 => x"0b81d138", +5445 => x"0b0b82fc", +5446 => x"8c081670", +5447 => x"0b0b82fc", +5448 => x"8c0c7475", +5449 => x"0b0b82fc", +5450 => x"c80b8805", +5451 => x"0c747631", +5452 => x"18708107", +5453 => x"51555658", +5454 => x"7b0b0b82", +5455 => x"fcc82e0b", +5456 => x"0b0b8488", +5457 => x"38798f26", +5458 => x"0b0b0b83", +5459 => x"a038810b", +5460 => x"84150c84", +5461 => x"1508fc06", +5462 => x"707a317a", +5463 => x"72268f72", +5464 => x"25075255", +5465 => x"5372802e", +5466 => x"0b0b0bfc", +5467 => x"94380b0b", +5468 => x"0b80fb39", +5469 => x"80089fff", +5470 => x"0653720b", +5471 => x"0b0bfec3", +5472 => x"38770b0b", +5473 => x"82fc8c0c", +5474 => x"0b0b82fc", +5475 => x"c80b8805", +5476 => x"087b1881", +5477 => x"0784120c", +5478 => x"550b0b82", +5479 => x"fcb80878", +5480 => x"270b0b0b", +5481 => x"0b883877", +5482 => x"0b0b82fc", +5483 => x"b80c0b0b", +5484 => x"82fcb408", +5485 => x"78270b0b", +5486 => x"0bfbad38", +5487 => x"770b0b82", +5488 => x"fcb40c84", +5489 => x"1508fc06", +5490 => x"707a317a", +5491 => x"72268f72", +5492 => x"25075255", +5493 => x"5372802e", +5494 => x"0b0b0bfb", +5495 => x"a4380b0b", +5496 => x"0b0b8b39", +5497 => x"80745456", +5498 => x"0b0b0bfe", +5499 => x"a7397d51", +5500 => x"0b0b0b87", +5501 => x"d33f800b", +5502 => x"800c8f3d", +5503 => x"0d047353", +5504 => x"8074240b", +5505 => x"0b0b0bb0", +5506 => x"3872822c", +5507 => x"81712b0b", +5508 => x"0b82fccc", +5509 => x"0807700b", +5510 => x"0b82fcc8", +5511 => x"0b84050c", +5512 => x"5d53778c", +5513 => x"180c7488", +5514 => x"180c7688", +5515 => x"190c768c", +5516 => x"160c0b0b", +5517 => x"0bf7cd39", +5518 => x"83147082", +5519 => x"2c81712b", +5520 => x"0b0b82fc", +5521 => x"cc080770", +5522 => x"0b0b82fc", +5523 => x"c80b8405", +5524 => x"0c5e5153", +5525 => x"0b0b0b0b", +5526 => x"c9397b7b", +5527 => x"0653720b", +5528 => x"0b0bfb96", +5529 => x"38841a7b", +5530 => x"105c5a0b", +5531 => x"0b0b0bea", +5532 => x"39ff1a81", +5533 => x"11515a0b", +5534 => x"0b0bf4fe", +5535 => x"39781779", +5536 => x"81078419", +5537 => x"0c8c1808", +5538 => x"88190871", +5539 => x"8c120c88", +5540 => x"120c5970", +5541 => x"0b0b82fc", +5542 => x"dc0c700b", +5543 => x"0b82fcd8", +5544 => x"0c0b0b82", +5545 => x"fcd00b8c", +5546 => x"120c8c11", +5547 => x"0888120c", +5548 => x"74810784", +5549 => x"120c7411", +5550 => x"75710c51", +5551 => x"530b0b0b", +5552 => x"f7d43975", +5553 => x"17841108", +5554 => x"81078412", +5555 => x"0c538c17", +5556 => x"08881808", +5557 => x"718c120c", +5558 => x"88120c58", +5559 => x"7d510b0b", +5560 => x"0b85e53f", +5561 => x"8817540b", +5562 => x"0b0bf2dd", +5563 => x"39728415", +5564 => x"0cf41af8", +5565 => x"0670841e", +5566 => x"08810607", +5567 => x"841e0c70", +5568 => x"1d545b85", +5569 => x"0b84140c", +5570 => x"850b8814", +5571 => x"0c8f7b27", +5572 => x"0b0b0bfd", +5573 => x"8438881c", +5574 => x"527d510b", +5575 => x"0b0bde98", +5576 => x"3f0b0b82", +5577 => x"fcc80b88", +5578 => x"05080b0b", +5579 => x"82fc8c08", +5580 => x"59550b0b", +5581 => x"0bfce239", +5582 => x"770b0b82", +5583 => x"fc8c0c73", +5584 => x"0b0b82fc", +5585 => x"bc0c0b0b", +5586 => x"0bfb9039", +5587 => x"7284150c", +5588 => x"0b0b0bfc", +5589 => x"c439fa3d", +5590 => x"0d7a7902", +5591 => x"8805a705", +5592 => x"33565253", +5593 => x"8373270b", +5594 => x"0b0b0b8e", +5595 => x"38708306", +5596 => x"5271802e", +5597 => x"0b0b0b0b", +5598 => x"b438ff13", +5599 => x"5372ff2e", +5600 => x"0b0b0b0b", +5601 => x"9f387033", +5602 => x"5273722e", +5603 => x"0b0b0b0b", +5604 => x"95388111", +5605 => x"ff145451", +5606 => x"72ff2e09", +5607 => x"81060b0b", +5608 => x"0b0be338", +5609 => x"80517080", +5610 => x"0c883d0d", +5611 => x"04707257", +5612 => x"55835175", +5613 => x"82802914", +5614 => x"ff125256", +5615 => x"7080250b", +5616 => x"0b0b0bef", +5617 => x"38837327", +5618 => x"0b0b0b80", +5619 => x"ce387408", +5620 => x"76327009", +5621 => x"f7fbfdff", +5622 => x"120670f8", +5623 => x"84828180", +5624 => x"06515151", +5625 => x"70802e0b", +5626 => x"0b0b0ba0", +5627 => x"38745180", +5628 => x"52703357", +5629 => x"73772e0b", +5630 => x"0b0bffaa", +5631 => x"38811181", +5632 => x"13535183", +5633 => x"72270b0b", +5634 => x"0b0be638", +5635 => x"fc138416", +5636 => x"56537283", +5637 => x"260b0b0b", +5638 => x"ffb43874", +5639 => x"510b0b0b", +5640 => x"fed839fa", +5641 => x"3d0d787a", +5642 => x"7c727272", +5643 => x"57575759", +5644 => x"56567476", +5645 => x"270b0b0b", +5646 => x"0bbe3876", +5647 => x"15517571", +5648 => x"270b0b0b", +5649 => x"0bb23870", +5650 => x"7717ff14", +5651 => x"54555371", +5652 => x"ff2e0b0b", +5653 => x"0b0b9a38", +5654 => x"ff14ff14", +5655 => x"54547233", +5656 => x"7434ff12", +5657 => x"5271ff2e", +5658 => x"0981060b", +5659 => x"0b0b0be8", +5660 => x"3875800c", +5661 => x"883d0d04", +5662 => x"768f260b", +5663 => x"0b0b0b9f", +5664 => x"38ff1252", +5665 => x"71ff2e0b", +5666 => x"0b0b0be5", +5667 => x"38727081", +5668 => x"05543374", +5669 => x"70810556", +5670 => x"340b0b0b", +5671 => x"0be33974", +5672 => x"76078306", +5673 => x"51700b0b", +5674 => x"0b0bd638", +5675 => x"75755451", +5676 => x"72708405", +5677 => x"54087170", +5678 => x"8405530c", +5679 => x"72708405", +5680 => x"54087170", +5681 => x"8405530c", +5682 => x"72708405", +5683 => x"54087170", +5684 => x"8405530c", +5685 => x"72708405", +5686 => x"54087170", +5687 => x"8405530c", +5688 => x"f0125271", +5689 => x"8f260b0b", +5690 => x"0b0bc538", +5691 => x"8372270b", +5692 => x"0b0b0b99", +5693 => x"38727084", +5694 => x"05540871", +5695 => x"70840553", +5696 => x"0cfc1252", +5697 => x"7183260b", +5698 => x"0b0b0be9", +5699 => x"3870540b", +5700 => x"0b0bfeed", +5701 => x"39fc3d0d", +5702 => x"76797102", +5703 => x"8c059f05", +5704 => x"33575553", +5705 => x"55837227", +5706 => x"0b0b0b0b", +5707 => x"8e387483", +5708 => x"06517080", +5709 => x"2e0b0b0b", +5710 => x"0baa38ff", +5711 => x"125271ff", +5712 => x"2e0b0b0b", +5713 => x"0b973873", +5714 => x"73708105", +5715 => x"5534ff12", +5716 => x"5271ff2e", +5717 => x"0981060b", +5718 => x"0b0b0beb", +5719 => x"3874800c", +5720 => x"863d0d04", +5721 => x"7474882b", +5722 => x"75077071", +5723 => x"902b0751", +5724 => x"54518f72", +5725 => x"270b0b0b", +5726 => x"0ba93872", +5727 => x"71708405", +5728 => x"530c7271", +5729 => x"70840553", +5730 => x"0c727170", +5731 => x"8405530c", +5732 => x"72717084", +5733 => x"05530cf0", +5734 => x"1252718f", +5735 => x"260b0b0b", +5736 => x"0bd93883", +5737 => x"72270b0b", +5738 => x"0b0b9438", +5739 => x"72717084", +5740 => x"05530cfc", +5741 => x"12527183", +5742 => x"260b0b0b", +5743 => x"0bee3870", +5744 => x"530b0b0b", +5745 => x"fef53904", +5746 => x"04f93d0d", +5747 => x"797b80cc", +5748 => x"12085658", +5749 => x"5673802e", +5750 => x"0b0b0b0b", +5751 => x"a9387610", +5752 => x"10147008", +5753 => x"55557380", +5754 => x"2e0b0b0b", +5755 => x"80c03873", +5756 => x"08750c80", +5757 => x"0b90150c", +5758 => x"800b8c15", +5759 => x"0c735574", +5760 => x"800c893d", +5761 => x"0d049053", +5762 => x"84527551", +5763 => x"0b0b0ba8", +5764 => x"c63f8008", +5765 => x"80cc170c", +5766 => x"80085580", +5767 => x"08802e0b", +5768 => x"0b0b0bdb", +5769 => x"38800854", +5770 => x"0b0b0bff", +5771 => x"b1398177", +5772 => x"2b701010", +5773 => x"94055458", +5774 => x"81527551", +5775 => x"0b0b0ba8", +5776 => x"963f8008", +5777 => x"80085654", +5778 => x"8008802e", +5779 => x"0b0b0bff", +5780 => x"ae387680", +5781 => x"0884050c", +5782 => x"77800888", +5783 => x"050c800b", +5784 => x"90150c80", +5785 => x"0b8c150c", +5786 => x"73550b0b", +5787 => x"0bff9039", +5788 => x"70707452", +5789 => x"71802e0b", +5790 => x"0b0b0b95", +5791 => x"38738413", +5792 => x"08101080", +5793 => x"cc120805", +5794 => x"7008740c", +5795 => x"73710c51", +5796 => x"51505004", +5797 => x"f53d0d7d", +5798 => x"7f616390", +5799 => x"13089414", +5800 => x"5b5d5b5c", +5801 => x"5c5c8057", +5802 => x"8216227a", +5803 => x"71291977", +5804 => x"227c7129", +5805 => x"72902a05", +5806 => x"70902a73", +5807 => x"83ffff06", +5808 => x"72848080", +5809 => x"29057b70", +5810 => x"84055d0c", +5811 => x"811c5c52", +5812 => x"535a5555", +5813 => x"7877240b", +5814 => x"0b0b0bcc", +5815 => x"3877802e", +5816 => x"0b0b0b0b", +5817 => x"9a387888", +5818 => x"1c08250b", +5819 => x"0b0b0b96", +5820 => x"38781010", +5821 => x"1b789412", +5822 => x"0c548119", +5823 => x"901c0c7a", +5824 => x"800c8d3d", +5825 => x"0d04841b", +5826 => x"08810552", +5827 => x"7b510b0b", +5828 => x"0bfdb63f", +5829 => x"8008901c", +5830 => x"08101088", +5831 => x"05548c1c", +5832 => x"5380088c", +5833 => x"0552540b", +5834 => x"0bfedcdf", +5835 => x"3f7a527b", +5836 => x"510b0b0b", +5837 => x"feba3f73", +5838 => x"79101011", +5839 => x"7994120c", +5840 => x"55811a90", +5841 => x"120c5b0b", +5842 => x"0b0bffb3", +5843 => x"39f63d0d", +5844 => x"7c7e6062", +5845 => x"890b8812", +5846 => x"355b5e5c", +5847 => x"59598056", +5848 => x"81557477", +5849 => x"250b0b0b", +5850 => x"0b903874", +5851 => x"10811757", +5852 => x"55767524", +5853 => x"0b0b0b0b", +5854 => x"f2387552", +5855 => x"78510b0b", +5856 => x"0bfcc63f", +5857 => x"80086180", +5858 => x"0894050c", +5859 => x"56810b80", +5860 => x"0890050c", +5861 => x"8957767a", +5862 => x"250b0b0b", +5863 => x"80e13876", +5864 => x"18587770", +5865 => x"81055933", +5866 => x"d005548a", +5867 => x"53755278", +5868 => x"510b0b0b", +5869 => x"fdde3f80", +5870 => x"08811858", +5871 => x"56797724", +5872 => x"0b0b0b0b", +5873 => x"dd388118", +5874 => x"58767b25", +5875 => x"0b0b0b0b", +5876 => x"a7387a77", +5877 => x"31577770", +5878 => x"81055933", +5879 => x"d005548a", +5880 => x"53755278", +5881 => x"510b0b0b", +5882 => x"fdaa3f80", +5883 => x"08ff1858", +5884 => x"56760b0b", +5885 => x"0b0bdf38", +5886 => x"75800c8c", +5887 => x"3d0d048a", +5888 => x"18580b0b", +5889 => x"0b0bc239", +5890 => x"70707074", +5891 => x"528072fc", +5892 => x"80800652", +5893 => x"5370732e", +5894 => x"0981060b", +5895 => x"0b0b0b87", +5896 => x"38907271", +5897 => x"2b535371", +5898 => x"81ff0a06", +5899 => x"51700b0b", +5900 => x"0b0b8838", +5901 => x"88137288", +5902 => x"2b535371", +5903 => x"8f0a0651", +5904 => x"700b0b0b", +5905 => x"0b883884", +5906 => x"1372842b", +5907 => x"53537183", +5908 => x"0a065170", +5909 => x"0b0b0b0b", +5910 => x"88388213", +5911 => x"72822b53", +5912 => x"53807224", +5913 => x"0b0b0b0b", +5914 => x"97388113", +5915 => x"729e2a70", +5916 => x"81065152", +5917 => x"53a05270", +5918 => x"802e0b0b", +5919 => x"0b0b8338", +5920 => x"72527180", +5921 => x"0c505050", +5922 => x"04fc3d0d", +5923 => x"76700870", +5924 => x"87065353", +5925 => x"5570802e", +5926 => x"0b0b0b0b", +5927 => x"b1387181", +5928 => x"06518053", +5929 => x"70732e09", +5930 => x"81060b0b", +5931 => x"0b0b9838", +5932 => x"710a100a", +5933 => x"70810652", +5934 => x"5370802e", +5935 => x"0b0b0b81", +5936 => x"89387275", +5937 => x"0c815372", +5938 => x"800c863d", +5939 => x"0d047072", +5940 => x"83ffff06", +5941 => x"52547080", +5942 => x"2e0b0b0b", +5943 => x"80e03871", +5944 => x"81ff0651", +5945 => x"700b0b0b", +5946 => x"0b883888", +5947 => x"1472882a", +5948 => x"5354718f", +5949 => x"0651700b", +5950 => x"0b0b0b88", +5951 => x"38841472", +5952 => x"842a5354", +5953 => x"71830651", +5954 => x"700b0b0b", +5955 => x"0b883882", +5956 => x"1472822a", +5957 => x"53547181", +5958 => x"0651700b", +5959 => x"0b0b0b94", +5960 => x"38811472", +5961 => x"0a100a53", +5962 => x"54a05371", +5963 => x"802e0b0b", +5964 => x"0bff9438", +5965 => x"71750c73", +5966 => x"800c863d", +5967 => x"0d049072", +5968 => x"712a5354", +5969 => x"0b0b0bff", +5970 => x"96397182", +5971 => x"2a750c82", +5972 => x"0b800c86", +5973 => x"3d0d0470", +5974 => x"70815273", +5975 => x"510b0b0b", +5976 => x"f8e73f74", +5977 => x"80089405", +5978 => x"0c810b80", +5979 => x"0890050c", +5980 => x"505004ee", +5981 => x"3d0d6567", +5982 => x"90120890", +5983 => x"12085856", +5984 => x"57537375", +5985 => x"250b0b0b", +5986 => x"0b8d3872", +5987 => x"76717790", +5988 => x"14085957", +5989 => x"58544274", +5990 => x"14708815", +5991 => x"08248415", +5992 => x"08055365", +5993 => x"525e0b0b", +5994 => x"0bf89e3f", +5995 => x"80088008", +5996 => x"94057060", +5997 => x"822b7211", +5998 => x"43465941", +5999 => x"427f7f27", +6000 => x"0b0b0b0b", +6001 => x"91388077", +6002 => x"70840559", +6003 => x"0c7e7726", +6004 => x"0b0b0b0b", +6005 => x"f1389413", +6006 => x"74101011", +6007 => x"94187710", +6008 => x"10116341", +6009 => x"445d5d5f", +6010 => x"7a61270b", +6011 => x"0b0b81c9", +6012 => x"387a0870", +6013 => x"83ffff06", +6014 => x"59537780", +6015 => x"2e0b0b0b", +6016 => x"80cb387e", +6017 => x"7d575780", +6018 => x"5a767084", +6019 => x"05580870", +6020 => x"83ffff06", +6021 => x"82182271", +6022 => x"7b29057c", +6023 => x"1173902a", +6024 => x"7c297a22", +6025 => x"5e7d0571", +6026 => x"902a0570", +6027 => x"902a5f59", +6028 => x"51515454", +6029 => x"74762372", +6030 => x"82172384", +6031 => x"16567b77", +6032 => x"260b0b0b", +6033 => x"0bc33879", +6034 => x"760c7a08", +6035 => x"5372902a", +6036 => x"5877802e", +6037 => x"0b0b0b80", +6038 => x"d1387e7d", +6039 => x"5757807d", +6040 => x"08705b56", +6041 => x"5a767084", +6042 => x"05580870", +6043 => x"83ffff06", +6044 => x"707a297b", +6045 => x"902a057c", +6046 => x"11515154", +6047 => x"54727623", +6048 => x"74821723", +6049 => x"84167490", +6050 => x"2a792971", +6051 => x"08821322", +6052 => x"5d5b7b05", +6053 => x"74902a05", +6054 => x"70902a5c", +6055 => x"56567b77", +6056 => x"260b0b0b", +6057 => x"ffbf3874", +6058 => x"760c841b", +6059 => x"841e5e5b", +6060 => x"607b260b", +6061 => x"0b0bfeb9", +6062 => x"38626005", +6063 => x"56807e25", +6064 => x"0b0b0b0b", +6065 => x"9838fc16", +6066 => x"5675080b", +6067 => x"0b0b0b8d", +6068 => x"38ff1e5e", +6069 => x"7d80240b", +6070 => x"0b0b0bea", +6071 => x"387d6290", +6072 => x"050c6180", +6073 => x"0c943d0d", +6074 => x"04f73d0d", +6075 => x"7b7d7f70", +6076 => x"83065858", +6077 => x"5a5a740b", +6078 => x"0b0b8181", +6079 => x"3875822c", +6080 => x"5675802e", +6081 => x"0b0b0b80", +6082 => x"cc3880c8", +6083 => x"1a087056", +6084 => x"5776802e", +6085 => x"0b0b0b81", +6086 => x"a3387581", +6087 => x"0655740b", +6088 => x"0b0b0bb8", +6089 => x"3875812c", +6090 => x"5675802e", +6091 => x"0b0b0b0b", +6092 => x"a4387608", +6093 => x"70595574", +6094 => x"802e0b0b", +6095 => x"0b80e038", +6096 => x"74577581", +6097 => x"06557480", +6098 => x"2e0b0b0b", +6099 => x"0bd7380b", +6100 => x"0b0b0b88", +6101 => x"3978800c", +6102 => x"8b3d0d04", +6103 => x"76537852", +6104 => x"79510b0b", +6105 => x"0bfc8c3f", +6106 => x"80087953", +6107 => x"7a52550b", +6108 => x"0b0bf5fc", +6109 => x"3f74590b", +6110 => x"0b0bffa9", +6111 => x"39805474", +6112 => x"10100b0b", +6113 => x"82f49c05", +6114 => x"70085455", +6115 => x"78527951", +6116 => x"0b0b0bf5", +6117 => x"ff3f8008", +6118 => x"590b0b0b", +6119 => x"fedf3976", +6120 => x"53765279", +6121 => x"510b0b0b", +6122 => x"fbc93f80", +6123 => x"08770c80", +6124 => x"08788008", +6125 => x"0c570b0b", +6126 => x"0bff8739", +6127 => x"84f15279", +6128 => x"510b0b0b", +6129 => x"fb913f80", +6130 => x"0880c81b", +6131 => x"0c800875", +6132 => x"80080c76", +6133 => x"81065657", +6134 => x"74802e0b", +6135 => x"0b0bfec5", +6136 => x"380b0b0b", +6137 => x"fef639f5", +6138 => x"3d0d7d7f", +6139 => x"6170852c", +6140 => x"84130890", +6141 => x"14081281", +6142 => x"05881508", +6143 => x"595e5959", +6144 => x"5a5c5c72", +6145 => x"79250b0b", +6146 => x"0b0b9038", +6147 => x"81157310", +6148 => x"54557873", +6149 => x"240b0b0b", +6150 => x"0bf23874", +6151 => x"527b510b", +6152 => x"0b0bf3a5", +6153 => x"3f800880", +6154 => x"08940555", +6155 => x"5a807625", +6156 => x"0b0b0b0b", +6157 => x"94387553", +6158 => x"80747084", +6159 => x"05560cff", +6160 => x"1353720b", +6161 => x"0b0b0bf0", +6162 => x"38941b90", +6163 => x"1c081010", +6164 => x"11799f06", +6165 => x"5a585377", +6166 => x"802e0b0b", +6167 => x"0b80ca38", +6168 => x"a0783155", +6169 => x"80567208", +6170 => x"782b7607", +6171 => x"74708405", +6172 => x"560c7270", +6173 => x"84055408", +6174 => x"752a5676", +6175 => x"73260b0b", +6176 => x"0b0be338", +6177 => x"75740c75", +6178 => x"802e0b0b", +6179 => x"0b0b8438", +6180 => x"811959ff", +6181 => x"19901b0c", +6182 => x"7a527b51", +6183 => x"0b0b0bf3", +6184 => x"cf3f7980", +6185 => x"0c8d3d0d", +6186 => x"04727084", +6187 => x"05540874", +6188 => x"70840556", +6189 => x"0c727727", +6190 => x"0b0b0b0b", +6191 => x"d6387270", +6192 => x"84055408", +6193 => x"74708405", +6194 => x"560c7673", +6195 => x"260b0b0b", +6196 => x"0bd7380b", +6197 => x"0b0bffbb", +6198 => x"39fb3d0d", +6199 => x"77799011", +6200 => x"08901308", +6201 => x"71317056", +6202 => x"54555754", +6203 => x"700b0b0b", +6204 => x"0bb33894", +6205 => x"1473822b", +6206 => x"71117119", +6207 => x"94055254", +6208 => x"5255fc12", +6209 => x"fc127108", +6210 => x"71085656", +6211 => x"52527373", +6212 => x"2e098106", +6213 => x"0b0b0b0b", +6214 => x"93387175", +6215 => x"260b0b0b", +6216 => x"0be03880", +6217 => x"5271800c", +6218 => x"873d0d04", +6219 => x"ff517274", +6220 => x"260b0b0b", +6221 => x"0b833881", +6222 => x"5170800c", +6223 => x"873d0d04", +6224 => x"f33d0d7f", +6225 => x"61637055", +6226 => x"71545754", +6227 => x"560b0b0b", +6228 => x"ff873f80", +6229 => x"08548008", +6230 => x"802e0b0b", +6231 => x"0b81e038", +6232 => x"80547380", +6233 => x"08240b0b", +6234 => x"0b81f638", +6235 => x"84130852", +6236 => x"75510b0b", +6237 => x"0bf0d23f", +6238 => x"80087480", +6239 => x"088c050c", +6240 => x"90140894", +6241 => x"15711010", +6242 => x"11941990", +6243 => x"1a081010", +6244 => x"11800894", +6245 => x"055d415d", +6246 => x"415a5c5d", +6247 => x"805a7770", +6248 => x"84055908", +6249 => x"7083ffff", +6250 => x"067a7084", +6251 => x"055c0870", +6252 => x"83ffff06", +6253 => x"7271311e", +6254 => x"74902a73", +6255 => x"902a3171", +6256 => x"902c1170", +6257 => x"902c4151", +6258 => x"55515657", +6259 => x"57547377", +6260 => x"23728218", +6261 => x"23841757", +6262 => x"7b79260b", +6263 => x"0b0bffbe", +6264 => x"38777e27", +6265 => x"0b0b0b0b", +6266 => x"b0387770", +6267 => x"84055908", +6268 => x"7083ffff", +6269 => x"067b1170", +6270 => x"902c7390", +6271 => x"2a057090", +6272 => x"2c5e5351", +6273 => x"54547377", +6274 => x"23728218", +6275 => x"23841757", +6276 => x"7d78260b", +6277 => x"0b0b0bd2", +6278 => x"38fc1757", +6279 => x"76080b0b", +6280 => x"0b0b9138", +6281 => x"ff1bfc18", +6282 => x"585b7608", +6283 => x"802e0b0b", +6284 => x"0b0bf138", +6285 => x"7a901e0c", +6286 => x"7c800c8f", +6287 => x"3d0d0480", +6288 => x"08527551", +6289 => x"0b0b0bef", +6290 => x"803f8008", +6291 => x"5d810b80", +6292 => x"0890050c", +6293 => x"73800894", +6294 => x"050c7c80", +6295 => x"0c8f3d0d", +6296 => x"04727554", +6297 => x"55810b84", +6298 => x"14085376", +6299 => x"52540b0b", +6300 => x"0beed63f", +6301 => x"80087480", +6302 => x"088c050c", +6303 => x"90140894", +6304 => x"15711010", +6305 => x"11941990", +6306 => x"1a081010", +6307 => x"11800894", +6308 => x"055d415d", +6309 => x"415a5c5d", +6310 => x"805a0b0b", +6311 => x"0bfdff39", +6312 => x"fa3d0d78", +6313 => x"7a7c5457", +6314 => x"7258769f", +6315 => x"fe0a0686", +6316 => x"bf0a0553", +6317 => x"53807225", +6318 => x"0b0b0b0b", +6319 => x"95387154", +6320 => x"80557375", +6321 => x"53730c71", +6322 => x"84140c72", +6323 => x"800c883d", +6324 => x"0d047130", +6325 => x"70942c53", +6326 => x"51937225", +6327 => x"0b0b0b0b", +6328 => x"ab388054", +6329 => x"ec129f71", +6330 => x"3181712b", +6331 => x"5152529e", +6332 => x"72250b0b", +6333 => x"0b0b8338", +6334 => x"81517055", +6335 => x"73755373", +6336 => x"0c718414", +6337 => x"0c72800c", +6338 => x"883d0d04", +6339 => x"a0808072", +6340 => x"2c548055", +6341 => x"0b0b0bff", +6342 => x"a939f63d", +6343 => x"0d7c7e94", +6344 => x"11901208", +6345 => x"101011fc", +6346 => x"11700870", +6347 => x"575a5157", +6348 => x"5853590b", +6349 => x"0b0bf1d0", +6350 => x"3f80087f", +6351 => x"a00b8008", +6352 => x"31710c53", +6353 => x"538a0b80", +6354 => x"08250b0b", +6355 => x"0b80f738", +6356 => x"80577376", +6357 => x"260b0b0b", +6358 => x"80c438f5", +6359 => x"13537280", +6360 => x"2e0b0b0b", +6361 => x"80c838a0", +6362 => x"73317574", +6363 => x"2b78722a", +6364 => x"079ffc0a", +6365 => x"075b5880", +6366 => x"55757427", +6367 => x"0b0b0b0b", +6368 => x"8538fc14", +6369 => x"08557673", +6370 => x"2b75792a", +6371 => x"075b797b", +6372 => x"54790c72", +6373 => x"841a0c78", +6374 => x"800c8c3d", +6375 => x"0d04fc14", +6376 => x"7008f515", +6377 => x"55585472", +6378 => x"0b0b0bff", +6379 => x"ba38749f", +6380 => x"fc0a075a", +6381 => x"765b797b", +6382 => x"54790c72", +6383 => x"841a0c78", +6384 => x"800c8c3d", +6385 => x"0d048b0b", +6386 => x"80083175", +6387 => x"712a9ffc", +6388 => x"0a075b57", +6389 => x"80587574", +6390 => x"270b0b0b", +6391 => x"0b8538fc", +6392 => x"14085895", +6393 => x"1375712b", +6394 => x"79792a07", +6395 => x"5c52797b", +6396 => x"54790c72", +6397 => x"841a0c78", +6398 => x"800c8c3d", +6399 => x"0d04f33d", +6400 => x"0d626462", +6401 => x"64575f75", +6402 => x"405b5981", +6403 => x"527f510b", +6404 => x"0b0bebb5", +6405 => x"3f800880", +6406 => x"0894057e", +6407 => x"70bfffff", +6408 => x"06705f71", +6409 => x"fe0a0670", +6410 => x"4270942a", +6411 => x"5b525755", +6412 => x"59577580", +6413 => x"2e0b0b0b", +6414 => x"0b873873", +6415 => x"90800a07", +6416 => x"5b7d5372", +6417 => x"802e0b0b", +6418 => x"0b80e038", +6419 => x"725c8f3d", +6420 => x"f405510b", +6421 => x"0b0bf0b1", +6422 => x"3f800855", +6423 => x"8008802e", +6424 => x"0b0b0b81", +6425 => x"8d38a00b", +6426 => x"8008317b", +6427 => x"712b7d07", +6428 => x"790c537a", +6429 => x"80082a5b", +6430 => x"7a70841a", +6431 => x"0c703070", +6432 => x"72078025", +6433 => x"82713170", +6434 => x"901c0c51", +6435 => x"51545475", +6436 => x"802e0b0b", +6437 => x"0b0bb638", +6438 => x"7416f7cd", +6439 => x"05790cb5", +6440 => x"75317a0c", +6441 => x"76800c8f", +6442 => x"3d0d048f", +6443 => x"3df00551", +6444 => x"0b0b0bef", +6445 => x"d43f7a78", +6446 => x"0c810b90", +6447 => x"180c810b", +6448 => x"8008a005", +6449 => x"5653750b", +6450 => x"0b0b0bcc", +6451 => x"38f7ce15", +6452 => x"790c7285", +6453 => x"2b731010", +6454 => x"19fc1108", +6455 => x"5354540b", +6456 => x"0b0beea4", +6457 => x"3f738008", +6458 => x"317a0c76", +6459 => x"800c8f3d", +6460 => x"0d047b78", +6461 => x"0c7a7084", +6462 => x"1a0c7030", +6463 => x"70720780", +6464 => x"25827131", +6465 => x"70901c0c", +6466 => x"51515454", +6467 => x"0b0b0bfe", +6468 => x"fe39f03d", +6469 => x"0d626466", +6470 => x"953de411", +6471 => x"577256f8", +6472 => x"05545858", +6473 => x"580b0b0b", +6474 => x"fbf03f92", +6475 => x"3de01154", +6476 => x"7653f005", +6477 => x"510b0b0b", +6478 => x"fbe03f90", +6479 => x"17089017", +6480 => x"0831852b", +6481 => x"7b7b3111", +6482 => x"51568076", +6483 => x"250b0b0b", +6484 => x"0bb03875", +6485 => x"90800a29", +6486 => x"6005407d", +6487 => x"7f585476", +6488 => x"557f6158", +6489 => x"52765392", +6490 => x"3de80551", +6491 => x"0b0b80d6", +6492 => x"ac3f7b7d", +6493 => x"58780c76", +6494 => x"84190c77", +6495 => x"800c923d", +6496 => x"0d047530", +6497 => x"7090800a", +6498 => x"291f5f56", +6499 => x"7d7f5854", +6500 => x"76557f61", +6501 => x"58527653", +6502 => x"923de805", +6503 => x"510b0b80", +6504 => x"d5fb3f7b", +6505 => x"7d58780c", +6506 => x"7684190c", +6507 => x"77800c92", +6508 => x"3d0d04f3", +6509 => x"3d0d7f61", +6510 => x"575c9ffc", +6511 => x"0a578058", +6512 => x"7597240b", +6513 => x"0b0b0b9d", +6514 => x"38751010", +6515 => x"100b0b82", +6516 => x"f2d80584", +6517 => x"11087108", +6518 => x"7e0c841e", +6519 => x"0c7c800c", +6520 => x"568f3d0d", +6521 => x"04807625", +6522 => x"0b0b0b0b", +6523 => x"ab388d3d", +6524 => x"5b80c882", +6525 => x"0a59805a", +6526 => x"78547955", +6527 => x"76527753", +6528 => x"7a510b0b", +6529 => x"0bb6963f", +6530 => x"7c7eff18", +6531 => x"58595775", +6532 => x"80240b0b", +6533 => x"0b0be138", +6534 => x"767c0c77", +6535 => x"841d0c7b", +6536 => x"800c8f3d", +6537 => x"0d04ef3d", +6538 => x"0d636567", +6539 => x"405d427b", +6540 => x"802e0b0b", +6541 => x"0b85ea38", +6542 => x"61510b0b", +6543 => x"0be7883f", +6544 => x"f81c7084", +6545 => x"120870fc", +6546 => x"0670628b", +6547 => x"0570f806", +6548 => x"4159455b", +6549 => x"5c415796", +6550 => x"74270b0b", +6551 => x"0b82fe38", +6552 => x"807b247e", +6553 => x"7c260759", +6554 => x"80547874", +6555 => x"2e098106", +6556 => x"0b0b0b82", +6557 => x"e138777b", +6558 => x"250b0b0b", +6559 => x"82ab3877", +6560 => x"170b0b82", +6561 => x"fcc80b88", +6562 => x"05085e56", +6563 => x"7c762e0b", +6564 => x"0b0b859f", +6565 => x"38841608", +6566 => x"70fe0617", +6567 => x"84110881", +6568 => x"06515555", +6569 => x"730b0b0b", +6570 => x"82bb3874", +6571 => x"fc06597c", +6572 => x"762e0b0b", +6573 => x"0b85c938", +6574 => x"77195f7e", +6575 => x"7b250b0b", +6576 => x"0b82aa38", +6577 => x"79810654", +6578 => x"730b0b0b", +6579 => x"82f53876", +6580 => x"77083184", +6581 => x"1108fc06", +6582 => x"565a7580", +6583 => x"2e0b0b0b", +6584 => x"0b97387c", +6585 => x"762e0b0b", +6586 => x"0b85d438", +6587 => x"74191859", +6588 => x"787b250b", +6589 => x"0b0b84e2", +6590 => x"3879802e", +6591 => x"0b0b0b82", +6592 => x"c2387715", +6593 => x"567a7624", +6594 => x"0b0b0b82", +6595 => x"b6388c1a", +6596 => x"08881b08", +6597 => x"718c120c", +6598 => x"88120c55", +6599 => x"79765957", +6600 => x"881761fc", +6601 => x"05575975", +6602 => x"a4260b0b", +6603 => x"0b86e638", +6604 => x"7b795555", +6605 => x"9376270b", +6606 => x"0b0b80d1", +6607 => x"387b7084", +6608 => x"055d087c", +6609 => x"56790c74", +6610 => x"70840556", +6611 => x"088c180c", +6612 => x"9017549b", +6613 => x"76270b0b", +6614 => x"0b0bb238", +6615 => x"74708405", +6616 => x"5608740c", +6617 => x"74708405", +6618 => x"56089418", +6619 => x"0c981754", +6620 => x"a376270b", +6621 => x"0b0b0b95", +6622 => x"38747084", +6623 => x"05560874", +6624 => x"0c747084", +6625 => x"0556089c", +6626 => x"180ca017", +6627 => x"54747084", +6628 => x"05560874", +6629 => x"70840556", +6630 => x"0c747084", +6631 => x"05560874", +6632 => x"70840556", +6633 => x"0c740874", +6634 => x"0c777b31", +6635 => x"56758f26", +6636 => x"0b0b0b80", +6637 => x"d5388417", +6638 => x"08810678", +6639 => x"0784180c", +6640 => x"77178411", +6641 => x"08810784", +6642 => x"120c5461", +6643 => x"510b0b0b", +6644 => x"e3f63f88", +6645 => x"17547380", +6646 => x"0c933d0d", +6647 => x"04905b0b", +6648 => x"0b0bfcfc", +6649 => x"3978560b", +6650 => x"0b0bfdd8", +6651 => x"398c1608", +6652 => x"88170871", +6653 => x"8c120c88", +6654 => x"120c557e", +6655 => x"707c3157", +6656 => x"588f7627", +6657 => x"0b0b0bff", +6658 => x"ad387a17", +6659 => x"84180881", +6660 => x"067c0784", +6661 => x"190c7681", +6662 => x"0784120c", +6663 => x"76118411", +6664 => x"08810784", +6665 => x"120c5588", +6666 => x"05526151", +6667 => x"0b0bffbc", +6668 => x"873f6151", +6669 => x"0b0b0be3", +6670 => x"8f3f8817", +6671 => x"540b0b0b", +6672 => x"ff94397d", +6673 => x"5261510b", +6674 => x"0b0bcef6", +6675 => x"3f800859", +6676 => x"8008802e", +6677 => x"0b0b0b81", +6678 => x"b7388008", +6679 => x"f8056084", +6680 => x"0508fe06", +6681 => x"61055557", +6682 => x"76742e0b", +6683 => x"0b0b84b7", +6684 => x"38fc1856", +6685 => x"75a4260b", +6686 => x"0b0b81c1", +6687 => x"387b8008", +6688 => x"55559376", +6689 => x"270b0b0b", +6690 => x"80e03874", +6691 => x"70840556", +6692 => x"08800870", +6693 => x"8405800c", +6694 => x"0c800875", +6695 => x"70840557", +6696 => x"08717084", +6697 => x"05530c54", +6698 => x"9b76270b", +6699 => x"0b0b0bba", +6700 => x"38747084", +6701 => x"05560874", +6702 => x"70840556", +6703 => x"0c747084", +6704 => x"05560874", +6705 => x"70840556", +6706 => x"0ca37627", +6707 => x"0b0b0b0b", +6708 => x"99387470", +6709 => x"84055608", +6710 => x"74708405", +6711 => x"560c7470", +6712 => x"84055608", +6713 => x"74708405", +6714 => x"560c7470", +6715 => x"84055608", +6716 => x"74708405", +6717 => x"560c7470", +6718 => x"84055608", +6719 => x"74708405", +6720 => x"560c7408", +6721 => x"740c7b52", +6722 => x"61510b0b", +6723 => x"ffbaa93f", +6724 => x"61510b0b", +6725 => x"0be1b13f", +6726 => x"78547380", +6727 => x"0c933d0d", +6728 => x"047d5261", +6729 => x"510b0b0b", +6730 => x"cd983f80", +6731 => x"08800c93", +6732 => x"3d0d0484", +6733 => x"1608550b", +6734 => x"0b0bfaef", +6735 => x"3975537b", +6736 => x"52800851", +6737 => x"0b0bfec0", +6738 => x"c23f7b52", +6739 => x"61510b0b", +6740 => x"ffb9e53f", +6741 => x"0b0b0bff", +6742 => x"b7398c16", +6743 => x"08881708", +6744 => x"718c120c", +6745 => x"88120c55", +6746 => x"8c1a0888", +6747 => x"1b08718c", +6748 => x"120c8812", +6749 => x"0c557979", +6750 => x"59570b0b", +6751 => x"0bfba139", +6752 => x"7719901c", +6753 => x"55557375", +6754 => x"240b0b0b", +6755 => x"fab6387a", +6756 => x"17700b0b", +6757 => x"82fcc80b", +6758 => x"88050c75", +6759 => x"7c318107", +6760 => x"84120c5d", +6761 => x"84170881", +6762 => x"067b0784", +6763 => x"180c6151", +6764 => x"0b0b0be0", +6765 => x"933f8817", +6766 => x"540b0b0b", +6767 => x"fc983974", +6768 => x"1918901c", +6769 => x"555d737d", +6770 => x"240b0b0b", +6771 => x"faab388c", +6772 => x"1a08881b", +6773 => x"08718c12", +6774 => x"0c88120c", +6775 => x"55881a61", +6776 => x"fc055759", +6777 => x"75a4260b", +6778 => x"0b0b81ca", +6779 => x"387b7955", +6780 => x"55937627", +6781 => x"0b0b0b80", +6782 => x"d1387b70", +6783 => x"84055d08", +6784 => x"7c56790c", +6785 => x"74708405", +6786 => x"56088c1b", +6787 => x"0c901a54", +6788 => x"9b76270b", +6789 => x"0b0b0bb2", +6790 => x"38747084", +6791 => x"05560874", +6792 => x"0c747084", +6793 => x"05560894", +6794 => x"1b0c981a", +6795 => x"54a37627", +6796 => x"0b0b0b0b", +6797 => x"95387470", +6798 => x"84055608", +6799 => x"740c7470", +6800 => x"84055608", +6801 => x"9c1b0ca0", +6802 => x"1a547470", +6803 => x"84055608", +6804 => x"74708405", +6805 => x"560c7470", +6806 => x"84055608", +6807 => x"74708405", +6808 => x"560c7408", +6809 => x"740c7a1a", +6810 => x"700b0b82", +6811 => x"fcc80b88", +6812 => x"050c7d7c", +6813 => x"31810784", +6814 => x"120c5484", +6815 => x"1a088106", +6816 => x"7b07841b", +6817 => x"0c61510b", +6818 => x"0b0bdebc", +6819 => x"3f78540b", +6820 => x"0b0bfd86", +6821 => x"3975537b", +6822 => x"5278510b", +6823 => x"0bfebdeb", +6824 => x"3f0b0b0b", +6825 => x"fa833984", +6826 => x"1708fc06", +6827 => x"18605858", +6828 => x"0b0b0bf9", +6829 => x"f4397553", +6830 => x"7b527851", +6831 => x"0b0bfebd", +6832 => x"ca3f7a1a", +6833 => x"700b0b82", +6834 => x"fcc80b88", +6835 => x"050c7d7c", +6836 => x"31810784", +6837 => x"120c5484", +6838 => x"1a088106", +6839 => x"7b07841b", +6840 => x"0c0b0b0b", +6841 => x"ff9f3970", +6842 => x"70707075", +6843 => x"77535371", +6844 => x"54733070", +6845 => x"75079f2a", +6846 => x"7075fe0a", +6847 => x"06079081", +6848 => x"0a119ffe", +6849 => x"0a723107", +6850 => x"709f2a81", +6851 => x"7131800c", +6852 => x"51515151", +6853 => x"51505050", +6854 => x"50047070", +6855 => x"70707577", +6856 => x"53537154", +6857 => x"73307075", +6858 => x"079f2a70", +6859 => x"75fe0a06", +6860 => x"079ffe0a", +6861 => x"71319f2a", +6862 => x"800c5151", +6863 => x"51505050", +6864 => x"50047070", +6865 => x"7070800b", +6866 => x"0b0b8385", +6867 => x"840c7651", +6868 => x"0b0b0b8c", +6869 => x"f33f8008", +6870 => x"538008ff", +6871 => x"2e0b0b0b", +6872 => x"0b893872", +6873 => x"800c5050", +6874 => x"5050040b", +6875 => x"0b838584", +6876 => x"08547380", +6877 => x"2e0b0b0b", +6878 => x"0be93875", +6879 => x"74710c52", +6880 => x"72800c50", +6881 => x"50505004", +6882 => x"f93d0d79", +6883 => x"7c557b54", +6884 => x"8e112270", +6885 => x"902b7090", +6886 => x"2c55570b", +6887 => x"0b82f4ec", +6888 => x"08535856", +6889 => x"0b0b0b88", +6890 => x"ac3f8008", +6891 => x"57800b80", +6892 => x"08240b0b", +6893 => x"0b0b9338", +6894 => x"80d01608", +6895 => x"80080580", +6896 => x"d0170c76", +6897 => x"800c893d", +6898 => x"0d048c16", +6899 => x"2283dfff", +6900 => x"0655748c", +6901 => x"17237680", +6902 => x"0c893d0d", +6903 => x"04fa3d0d", +6904 => x"788c1122", +6905 => x"70882a70", +6906 => x"81065157", +6907 => x"5856740b", +6908 => x"0b0b0bae", +6909 => x"388c1622", +6910 => x"83dfff06", +6911 => x"55748c17", +6912 => x"237a5479", +6913 => x"538e1622", +6914 => x"70902b70", +6915 => x"902c5456", +6916 => x"0b0b82f4", +6917 => x"ec085256", +6918 => x"0b0b0b83", +6919 => x"f33f883d", +6920 => x"0d048254", +6921 => x"80538e16", +6922 => x"2270902b", +6923 => x"70902c54", +6924 => x"560b0b82", +6925 => x"f4ec0852", +6926 => x"570b0b0b", +6927 => x"86d03f8c", +6928 => x"162283df", +6929 => x"ff065574", +6930 => x"8c17237a", +6931 => x"5479538e", +6932 => x"16227090", +6933 => x"2b70902c", +6934 => x"54560b0b", +6935 => x"82f4ec08", +6936 => x"52560b0b", +6937 => x"0b83a93f", +6938 => x"883d0d04", +6939 => x"f93d0d79", +6940 => x"7c557b54", +6941 => x"8e112270", +6942 => x"902b7090", +6943 => x"2c55570b", +6944 => x"0b82f4ec", +6945 => x"08535856", +6946 => x"0b0b0b86", +6947 => x"813f8008", +6948 => x"578008ff", +6949 => x"2e0b0b0b", +6950 => x"0b99388c", +6951 => x"1622a080", +6952 => x"0755748c", +6953 => x"17238008", +6954 => x"80d0170c", +6955 => x"76800c89", +6956 => x"3d0d048c", +6957 => x"162283df", +6958 => x"ff065574", +6959 => x"8c172376", +6960 => x"800c893d", +6961 => x"0d047070", +6962 => x"70748e11", +6963 => x"2270902b", +6964 => x"70902c55", +6965 => x"5151530b", +6966 => x"0b82f4ec", +6967 => x"08510b0b", +6968 => x"0b84a03f", +6969 => x"50505004", +6970 => x"fb3d0d77", +6971 => x"79707207", +6972 => x"83065354", +6973 => x"52700b0b", +6974 => x"0b0b9638", +6975 => x"71737308", +6976 => x"54565471", +6977 => x"73082e0b", +6978 => x"0b0b80d0", +6979 => x"38737554", +6980 => x"52713370", +6981 => x"81ff0652", +6982 => x"5470802e", +6983 => x"0b0b0b0b", +6984 => x"a5387233", +6985 => x"5570752e", +6986 => x"0981060b", +6987 => x"0b0b0b99", +6988 => x"38811281", +6989 => x"14713370", +6990 => x"81ff0654", +6991 => x"56545270", +6992 => x"0b0b0b0b", +6993 => x"dd387233", +6994 => x"557381ff", +6995 => x"067581ff", +6996 => x"06717131", +6997 => x"800c5252", +6998 => x"873d0d04", +6999 => x"710970f7", +7000 => x"fbfdff14", +7001 => x"0670f884", +7002 => x"82818006", +7003 => x"51515170", +7004 => x"0b0b0b0b", +7005 => x"9e388414", +7006 => x"84167108", +7007 => x"54565471", +7008 => x"75082e0b", +7009 => x"0b0b0bd4", +7010 => x"38737554", +7011 => x"520b0b0b", +7012 => x"feff3980", +7013 => x"0b800c87", +7014 => x"3d0d0470", +7015 => x"70707075", +7016 => x"70718306", +7017 => x"53555270", +7018 => x"0b0b0b80", +7019 => x"c0387170", +7020 => x"087009f7", +7021 => x"fbfdff12", +7022 => x"0670f884", +7023 => x"82818006", +7024 => x"51515253", +7025 => x"700b0b0b", +7026 => x"0ba13884", +7027 => x"13700870", +7028 => x"09f7fbfd", +7029 => x"ff120670", +7030 => x"f8848281", +7031 => x"80065151", +7032 => x"52537080", +7033 => x"2e0b0b0b", +7034 => x"0be13872", +7035 => x"52713351", +7036 => x"70802e0b", +7037 => x"0b0b0b8e", +7038 => x"38811270", +7039 => x"33525270", +7040 => x"0b0b0b0b", +7041 => x"f4387174", +7042 => x"31800c50", +7043 => x"50505004", +7044 => x"fb3d0d80", +7045 => x"0b0b0b83", +7046 => x"85840c7a", +7047 => x"53795278", +7048 => x"510b0b0b", +7049 => x"88de3f80", +7050 => x"08558008", +7051 => x"ff2e0b0b", +7052 => x"0b0b8838", +7053 => x"74800c87", +7054 => x"3d0d040b", +7055 => x"0b838584", +7056 => x"08567580", +7057 => x"2e0b0b0b", +7058 => x"0bea3877", +7059 => x"76710c54", +7060 => x"74800c87", +7061 => x"3d0d04fb", +7062 => x"3d0d787a", +7063 => x"29527751", +7064 => x"0b0b0bc2", +7065 => x"dd3f8008", +7066 => x"80085556", +7067 => x"8008802e", +7068 => x"0b0b0b80", +7069 => x"f2388008", +7070 => x"fc0508fc", +7071 => x"06fc0555", +7072 => x"74a4260b", +7073 => x"0b0b80e6", +7074 => x"38937527", +7075 => x"0b0b0b80", +7076 => x"c338800b", +7077 => x"80087084", +7078 => x"05800c0c", +7079 => x"80085480", +7080 => x"74708405", +7081 => x"560c9b75", +7082 => x"270b0b0b", +7083 => x"0ba63880", +7084 => x"74708405", +7085 => x"560c8074", +7086 => x"70840556", +7087 => x"0ca37527", +7088 => x"0b0b0b0b", +7089 => x"8f388074", +7090 => x"70840556", +7091 => x"0c807470", +7092 => x"8405560c", +7093 => x"80747084", +7094 => x"05560c80", +7095 => x"74708405", +7096 => x"560c8074", +7097 => x"0c755473", +7098 => x"800c873d", +7099 => x"0d047453", +7100 => x"80528008", +7101 => x"510b0b0b", +7102 => x"d49b3f75", +7103 => x"540b0b0b", +7104 => x"0be53970", +7105 => x"70707080", +7106 => x"0b0b0b83", +7107 => x"85840c76", +7108 => x"510b0b0b", +7109 => x"8a943f80", +7110 => x"08538008", +7111 => x"ff2e0b0b", +7112 => x"0b0b8938", +7113 => x"72800c50", +7114 => x"50505004", +7115 => x"0b0b8385", +7116 => x"84085473", +7117 => x"802e0b0b", +7118 => x"0b0be938", +7119 => x"7574710c", +7120 => x"5272800c", +7121 => x"50505050", +7122 => x"04fc3d0d", +7123 => x"800b0b0b", +7124 => x"8385840c", +7125 => x"78527751", +7126 => x"0b0b0b8d", +7127 => x"823f8008", +7128 => x"548008ff", +7129 => x"2e0b0b0b", +7130 => x"0b883873", +7131 => x"800c863d", +7132 => x"0d040b0b", +7133 => x"83858408", +7134 => x"5574802e", +7135 => x"0b0b0b0b", +7136 => x"ea387675", +7137 => x"710c5373", +7138 => x"800c863d", +7139 => x"0d04fb3d", +7140 => x"0d800b0b", +7141 => x"0b838584", +7142 => x"0c7a5379", +7143 => x"5278510b", +7144 => x"0b0b8a9e", +7145 => x"3f800855", +7146 => x"8008ff2e", +7147 => x"0b0b0b0b", +7148 => x"88387480", +7149 => x"0c873d0d", +7150 => x"040b0b83", +7151 => x"85840856", +7152 => x"75802e0b", +7153 => x"0b0b0bea", +7154 => x"38777671", +7155 => x"0c547480", +7156 => x"0c873d0d", +7157 => x"04fb3d0d", +7158 => x"800b0b0b", +7159 => x"8385840c", +7160 => x"7a537952", +7161 => x"78510b0b", +7162 => x"0b86b13f", +7163 => x"80085580", +7164 => x"08ff2e0b", +7165 => x"0b0b0b88", +7166 => x"3874800c", +7167 => x"873d0d04", +7168 => x"0b0b8385", +7169 => x"84085675", +7170 => x"802e0b0b", +7171 => x"0b0bea38", +7172 => x"7776710c", +7173 => x"5474800c", +7174 => x"873d0d04", +7175 => x"fc3d0d76", +7176 => x"78700855", +7177 => x"5555720b", +7178 => x"0b0b0b8f", +7179 => x"38735274", +7180 => x"510b0bff", +7181 => x"ac823f86", +7182 => x"3d0d0472", +7183 => x"5274510b", +7184 => x"0b0b0bd8", +7185 => x"3f735274", +7186 => x"510b0bff", +7187 => x"abea3f86", +7188 => x"3d0d04fb", +7189 => x"3d0d7755", +7190 => x"740b0b82", +7191 => x"f4ec082e", +7192 => x"0b0b0b80", +7193 => x"fe3880cc", +7194 => x"15085380", +7195 => x"5672762e", +7196 => x"0981060b", +7197 => x"0b0b8180", +7198 => x"3882c815", +7199 => x"08537280", +7200 => x"2e0b0b0b", +7201 => x"0bb23882", +7202 => x"cc155672", +7203 => x"762e0b0b", +7204 => x"0b0ba538", +7205 => x"72547574", +7206 => x"2e0b0b0b", +7207 => x"0b9a3873", +7208 => x"74085552", +7209 => x"74510b0b", +7210 => x"ffab8d3f", +7211 => x"75742e09", +7212 => x"81060b0b", +7213 => x"0b0be838", +7214 => x"80d41508", +7215 => x"53720b0b", +7216 => x"0b80d938", +7217 => x"b8150880", +7218 => x"2e0b0b0b", +7219 => x"0b953874", +7220 => x"51bc1508", +7221 => x"53722d84", +7222 => x"dc150853", +7223 => x"720b0b0b", +7224 => x"80ca3887", +7225 => x"3d0d0481", +7226 => x"1656758e", +7227 => x"240b0b0b", +7228 => x"80c83880", +7229 => x"cc150853", +7230 => x"75101013", +7231 => x"70085553", +7232 => x"73802e0b", +7233 => x"0b0b0bdf", +7234 => x"38737408", +7235 => x"55527451", +7236 => x"0b0bffaa", +7237 => x"a33f0b0b", +7238 => x"0b0be539", +7239 => x"72527451", +7240 => x"0b0bffaa", +7241 => x"933f0b0b", +7242 => x"0bff9939", +7243 => x"72527451", +7244 => x"0b0b0bfd", +7245 => x"e73f873d", +7246 => x"0d0480cc", +7247 => x"15085274", +7248 => x"510b0bff", +7249 => x"a9f23f0b", +7250 => x"0b0bfead", +7251 => x"39fb3d0d", +7252 => x"77567580", +7253 => x"2e0b0b0b", +7254 => x"80dc3882", +7255 => x"c8160855", +7256 => x"74802e0b", +7257 => x"0b0b0bb5", +7258 => x"38841508", +7259 => x"ff055480", +7260 => x"74240b0b", +7261 => x"0b0b9c38", +7262 => x"73101015", +7263 => x"88055372", +7264 => x"08fc1454", +7265 => x"52712dff", +7266 => x"14547380", +7267 => x"250b0b0b", +7268 => x"0bed3874", +7269 => x"0855740b", +7270 => x"0b0b0bcd", +7271 => x"38bc1608", +7272 => x"0b0b0b0b", +7273 => x"8538873d", +7274 => x"0d047551", +7275 => x"bc160852", +7276 => x"712d873d", +7277 => x"0d040b0b", +7278 => x"82f4ec08", +7279 => x"82c81108", +7280 => x"56560b0b", +7281 => x"0bff9939", +7282 => x"7070700b", +7283 => x"0b8384fc", +7284 => x"080b0b0b", +7285 => x"0b8d380b", +7286 => x"0b838588", +7287 => x"0b0b0b83", +7288 => x"84fc0c0b", +7289 => x"0b8384fc", +7290 => x"08751152", +7291 => x"52ff5370", +7292 => x"0b87fb80", +7293 => x"80260b0b", +7294 => x"0b0b8a38", +7295 => x"700b0b83", +7296 => x"84fc0c71", +7297 => x"5372800c", +7298 => x"50505004", +7299 => x"fd3d0d80", +7300 => x"0b0b0b82", +7301 => x"f4e00854", +7302 => x"5472812e", +7303 => x"0b0b0b0b", +7304 => x"ab38730b", +7305 => x"0b838580", +7306 => x"0c0b0bfe", +7307 => x"a5853f0b", +7308 => x"0bfea3cc", +7309 => x"3f0b0b83", +7310 => x"84d05281", +7311 => x"510b0bfe", +7312 => x"a7dd3f80", +7313 => x"08510b0b", +7314 => x"0b89973f", +7315 => x"720b0b83", +7316 => x"85800c0b", +7317 => x"0bfea4db", +7318 => x"3f0b0bfe", +7319 => x"a3a23f0b", +7320 => x"0b8384d0", +7321 => x"5281510b", +7322 => x"0bfea7b3", +7323 => x"3f800851", +7324 => x"0b0b0b88", +7325 => x"ed3f000b", +7326 => x"0b0b0bfb", +7327 => x"39000b0b", +7328 => x"0b0bfb39", +7329 => x"f53d0d7e", +7330 => x"600b0b83", +7331 => x"85800870", +7332 => x"5b585b5b", +7333 => x"750b0b0b", +7334 => x"80db3877", +7335 => x"7a250b0b", +7336 => x"0b0bac38", +7337 => x"771b7033", +7338 => x"7081ff06", +7339 => x"58585975", +7340 => x"8a2e0b0b", +7341 => x"0b0b9f38", +7342 => x"7681ff06", +7343 => x"510b0bfe", +7344 => x"a3cc3f81", +7345 => x"18587978", +7346 => x"240b0b0b", +7347 => x"0bd63879", +7348 => x"800c8d3d", +7349 => x"0d048d51", +7350 => x"0b0bfea3", +7351 => x"b13f7833", +7352 => x"7081ff06", +7353 => x"52570b0b", +7354 => x"fea3a33f", +7355 => x"8118580b", +7356 => x"0b0b0bd2", +7357 => x"3979557a", +7358 => x"547d5385", +7359 => x"528d3dfc", +7360 => x"05510b0b", +7361 => x"fea2c03f", +7362 => x"8008560b", +7363 => x"0b0b87c9", +7364 => x"3f7b8008", +7365 => x"0c75800c", +7366 => x"8d3d0d04", +7367 => x"f63d0d7d", +7368 => x"7f0b0b83", +7369 => x"85800870", +7370 => x"5b585a5a", +7371 => x"750b0b0b", +7372 => x"80d63877", +7373 => x"79250b0b", +7374 => x"0b80c438", +7375 => x"0b0bfea2", +7376 => x"a43f8008", +7377 => x"81ff0670", +7378 => x"8d327030", +7379 => x"709f2a51", +7380 => x"51575776", +7381 => x"8a2e0b0b", +7382 => x"0b80d438", +7383 => x"75802e0b", +7384 => x"0b0b80cb", +7385 => x"38771a56", +7386 => x"76763476", +7387 => x"510b0bfe", +7388 => x"a29c3f81", +7389 => x"18587878", +7390 => x"240b0b0b", +7391 => x"ffbe3877", +7392 => x"5675800c", +7393 => x"8c3d0d04", +7394 => x"78557954", +7395 => x"7c538452", +7396 => x"8c3dfc05", +7397 => x"510b0bfe", +7398 => x"a1ad3f80", +7399 => x"08560b0b", +7400 => x"0b86b63f", +7401 => x"7a80080c", +7402 => x"75800c8c", +7403 => x"3d0d0477", +7404 => x"1a568a76", +7405 => x"34811858", +7406 => x"8d510b0b", +7407 => x"fea1cf3f", +7408 => x"8a510b0b", +7409 => x"fea1c73f", +7410 => x"77560b0b", +7411 => x"0bffb239", +7412 => x"f93d0d79", +7413 => x"570b0b83", +7414 => x"85800880", +7415 => x"2e0b0b0b", +7416 => x"0bb53876", +7417 => x"510b0b0b", +7418 => x"f3b13f7b", +7419 => x"567a5580", +7420 => x"08810554", +7421 => x"76538252", +7422 => x"893dfc05", +7423 => x"510b0bfe", +7424 => x"a0c53f80", +7425 => x"08570b0b", +7426 => x"0b85ce3f", +7427 => x"7780080c", +7428 => x"76800c89", +7429 => x"3d0d040b", +7430 => x"0b0b85bd", +7431 => x"3f850b80", +7432 => x"080cff0b", +7433 => x"800c893d", +7434 => x"0d04fb3d", +7435 => x"0d0b0b83", +7436 => x"85800870", +7437 => x"5654730b", +7438 => x"0b0b0b88", +7439 => x"3874800c", +7440 => x"873d0d04", +7441 => x"77538352", +7442 => x"873dfc05", +7443 => x"510b0bfe", +7444 => x"9ff53f80", +7445 => x"08540b0b", +7446 => x"0b84fe3f", +7447 => x"7580080c", +7448 => x"73800c87", +7449 => x"3d0d04ff", +7450 => x"0b800c04", +7451 => x"fb3d0d77", +7452 => x"550b0b83", +7453 => x"85800880", +7454 => x"2e0b0b0b", +7455 => x"0bb13874", +7456 => x"510b0b0b", +7457 => x"f2953f80", +7458 => x"08810554", +7459 => x"74538752", +7460 => x"873dfc05", +7461 => x"510b0bfe", +7462 => x"9fad3f80", +7463 => x"08550b0b", +7464 => x"0b84b63f", +7465 => x"7580080c", +7466 => x"74800c87", +7467 => x"3d0d040b", +7468 => x"0b0b84a5", +7469 => x"3f850b80", +7470 => x"080cff0b", +7471 => x"800c873d", +7472 => x"0d04fa3d", +7473 => x"0d0b0b83", +7474 => x"85800880", +7475 => x"2e0b0b0b", +7476 => x"0ba8387a", +7477 => x"55795478", +7478 => x"53865288", +7479 => x"3dfc0551", +7480 => x"0b0bfe9e", +7481 => x"e23f8008", +7482 => x"560b0b0b", +7483 => x"83eb3f76", +7484 => x"80080c75", +7485 => x"800c883d", +7486 => x"0d040b0b", +7487 => x"0b83da3f", +7488 => x"9d0b8008", +7489 => x"0cff0b80", +7490 => x"0c883d0d", +7491 => x"04fb3d0d", +7492 => x"77795656", +7493 => x"80705454", +7494 => x"7375250b", +7495 => x"0b0b0ba3", +7496 => x"38741010", +7497 => x"10f80552", +7498 => x"72167033", +7499 => x"70742b76", +7500 => x"078116f8", +7501 => x"16565656", +7502 => x"51517473", +7503 => x"240b0b0b", +7504 => x"0be63873", +7505 => x"800c873d", +7506 => x"0d04fc3d", +7507 => x"0d767855", +7508 => x"55bc5380", +7509 => x"5273510b", +7510 => x"0b0bc7b9", +7511 => x"3f845274", +7512 => x"510b0b0b", +7513 => x"ffa73f80", +7514 => x"08742384", +7515 => x"52841551", +7516 => x"0b0b0bff", +7517 => x"983f8008", +7518 => x"82152384", +7519 => x"52881551", +7520 => x"0b0b0bff", +7521 => x"883f8008", +7522 => x"84150c84", +7523 => x"528c1551", +7524 => x"0b0b0bfe", +7525 => x"f83f8008", +7526 => x"88152384", +7527 => x"52901551", +7528 => x"0b0b0bfe", +7529 => x"e83f8008", +7530 => x"8a152384", +7531 => x"52941551", +7532 => x"0b0b0bfe", +7533 => x"d83f8008", +7534 => x"8c152384", +7535 => x"52981551", +7536 => x"0b0b0bfe", +7537 => x"c83f8008", +7538 => x"8e152388", +7539 => x"529c1551", +7540 => x"0b0b0bfe", +7541 => x"b83f8008", +7542 => x"90150c86", +7543 => x"3d0d04e9", +7544 => x"3d0d6a0b", +7545 => x"0b838580", +7546 => x"08575775", +7547 => x"0b0b0b0b", +7548 => x"933880c0", +7549 => x"800b8418", +7550 => x"0c75ac18", +7551 => x"0c75800c", +7552 => x"993d0d04", +7553 => x"893d7055", +7554 => x"6a54558a", +7555 => x"52993dff", +7556 => x"bc05510b", +7557 => x"0bfe9caf", +7558 => x"3f800877", +7559 => x"53755256", +7560 => x"0b0b0bfe", +7561 => x"a53f0b0b", +7562 => x"0b81ae3f", +7563 => x"7780080c", +7564 => x"75800c99", +7565 => x"3d0d04e9", +7566 => x"3d0d6957", +7567 => x"0b0b8385", +7568 => x"8008802e", +7569 => x"0b0b0b80", +7570 => x"c1387651", +7571 => x"0b0b0bee", +7572 => x"ca3f893d", +7573 => x"70568008", +7574 => x"81055577", +7575 => x"54568f52", +7576 => x"993dffbc", +7577 => x"05510b0b", +7578 => x"fe9bdc3f", +7579 => x"80086b53", +7580 => x"7652570b", +7581 => x"0b0bfdd2", +7582 => x"3f0b0b0b", +7583 => x"80db3f77", +7584 => x"80080c76", +7585 => x"800c993d", +7586 => x"0d040b0b", +7587 => x"0b80ca3f", +7588 => x"850b8008", +7589 => x"0cff0b80", +7590 => x"0c993d0d", +7591 => x"04fc3d0d", +7592 => x"81540b0b", +7593 => x"83858008", +7594 => x"0b0b0b0b", +7595 => x"88387380", +7596 => x"0c863d0d", +7597 => x"04765397", +7598 => x"b952863d", +7599 => x"fc05510b", +7600 => x"0bfe9b83", +7601 => x"3f800854", +7602 => x"0b0b0b0b", +7603 => x"8c3f7480", +7604 => x"080c7380", +7605 => x"0c863d0d", +7606 => x"040b0b82", +7607 => x"f4ec0880", +7608 => x"0c04f73d", +7609 => x"0d7b0b0b", +7610 => x"82f4ec08", +7611 => x"82c81108", +7612 => x"5a545a77", +7613 => x"802e0b0b", +7614 => x"0b80ee38", +7615 => x"81881884", +7616 => x"1908ff05", +7617 => x"81712b59", +7618 => x"55598074", +7619 => x"240b0b0b", +7620 => x"81893880", +7621 => x"74240b0b", +7622 => x"0b0bbd38", +7623 => x"73822b78", +7624 => x"11880556", +7625 => x"56818019", +7626 => x"08770653", +7627 => x"72802e0b", +7628 => x"0b0b80c6", +7629 => x"38781670", +7630 => x"08535379", +7631 => x"51740853", +7632 => x"722dff14", +7633 => x"fc17fc17", +7634 => x"79812c5a", +7635 => x"57575473", +7636 => x"80250b0b", +7637 => x"0b0bce38", +7638 => x"77085877", +7639 => x"0b0b0bff", +7640 => x"9b380b0b", +7641 => x"82f4ec08", +7642 => x"53bc1308", +7643 => x"0b0b0b0b", +7644 => x"b2387951", +7645 => x"0b0b0bf5", +7646 => x"fd3f7408", +7647 => x"53722dff", +7648 => x"14fc17fc", +7649 => x"1779812c", +7650 => x"5a575754", +7651 => x"7380250b", +7652 => x"0b0bff91", +7653 => x"380b0b0b", +7654 => x"ffbe3980", +7655 => x"570b0b0b", +7656 => x"fef13972", +7657 => x"51bc1308", +7658 => x"53722d79", +7659 => x"510b0b0b", +7660 => x"f5c43f8c", +7661 => x"08028c0c", +7662 => x"d43d0d8c", +7663 => x"08880508", +7664 => x"510b0b0b", +7665 => x"8fb43f80", +7666 => x"08547380", +7667 => x"2e0b0b0b", +7668 => x"0b93388c", +7669 => x"08880508", +7670 => x"708c08d0", +7671 => x"050c540b", +7672 => x"0b0b8e8a", +7673 => x"398c088c", +7674 => x"0508510b", +7675 => x"0b0b8f8a", +7676 => x"3f800854", +7677 => x"73802e0b", +7678 => x"0b0b0b93", +7679 => x"388c088c", +7680 => x"0508708c", +7681 => x"08d0050c", +7682 => x"540b0b0b", +7683 => x"8de0398c", +7684 => x"08880508", +7685 => x"510b0b0b", +7686 => x"8eaa3f80", +7687 => x"08547380", +7688 => x"2e0b0b0b", +7689 => x"80d9388c", +7690 => x"088c0508", +7691 => x"510b0b0b", +7692 => x"8e923f80", +7693 => x"08547380", +7694 => x"2e0b0b0b", +7695 => x"0baf388c", +7696 => x"08880508", +7697 => x"8c088c05", +7698 => x"08555584", +7699 => x"15088415", +7700 => x"082e0b0b", +7701 => x"0b0b9638", +7702 => x"0b0b0b8d", +7703 => x"d43f8008", +7704 => x"708c08d0", +7705 => x"050c540b", +7706 => x"0b0b8d82", +7707 => x"398c0888", +7708 => x"0508708c", +7709 => x"08d0050c", +7710 => x"540b0b0b", +7711 => x"8cf0398c", +7712 => x"088c0508", +7713 => x"510b0b0b", +7714 => x"8dba3f80", +7715 => x"08547380", +7716 => x"2e0b0b0b", +7717 => x"0b93388c", +7718 => x"088c0508", +7719 => x"708c08d0", +7720 => x"050c540b", +7721 => x"0b0b8cc6", +7722 => x"398c088c", +7723 => x"0508510b", +7724 => x"0b0b8cc7", +7725 => x"3f800854", +7726 => x"73802e0b", +7727 => x"0b0b80f5", +7728 => x"388c0888", +7729 => x"0508510b", +7730 => x"0b0b8caf", +7731 => x"3f800854", +7732 => x"73802e0b", +7733 => x"0b0b80cb", +7734 => x"388c0890", +7735 => x"05088c08", +7736 => x"88050871", +7737 => x"58565494", +7738 => x"70547553", +7739 => x"7652540b", +7740 => x"0bfea197", +7741 => x"3f8c0890", +7742 => x"05088c08", +7743 => x"8805088c", +7744 => x"088c0508", +7745 => x"84120884", +7746 => x"12080684", +7747 => x"140c8c08", +7748 => x"90050870", +7749 => x"8c08d005", +7750 => x"0c515656", +7751 => x"560b0b0b", +7752 => x"8bcc398c", +7753 => x"08880508", +7754 => x"708c08d0", +7755 => x"050c540b", +7756 => x"0b0b8bba", +7757 => x"398c0888", +7758 => x"0508510b", +7759 => x"0b0b8bbb", +7760 => x"3f800854", +7761 => x"73802e0b", +7762 => x"0b0b0b93", +7763 => x"388c088c", +7764 => x"0508708c", +7765 => x"08d0050c", +7766 => x"540b0b0b", +7767 => x"8b90398c", +7768 => x"08880508", +7769 => x"8811088c", +7770 => x"08f4050c", +7771 => x"8c088c05", +7772 => x"08881108", +7773 => x"8c08f005", +7774 => x"0c8c0888", +7775 => x"05085151", +7776 => x"54901408", +7777 => x"8c150855", +7778 => x"55738c08", +7779 => x"e8050c74", +7780 => x"8c08ec05", +7781 => x"0c8c088c", +7782 => x"05085490", +7783 => x"14088c15", +7784 => x"08555573", +7785 => x"8c08e005", +7786 => x"0c748c08", +7787 => x"e4050c8c", +7788 => x"08f40508", +7789 => x"8c08f005", +7790 => x"08318c08", +7791 => x"dc050c8c", +7792 => x"08dc0508", +7793 => x"80250b0b", +7794 => x"0b0b8c38", +7795 => x"8c08dc05", +7796 => x"08308c08", +7797 => x"dc050c8c", +7798 => x"08dc0508", +7799 => x"bf240b0b", +7800 => x"0b81bf38", +7801 => x"8c08f005", +7802 => x"088c08f4", +7803 => x"0508250b", +7804 => x"0b0b80cf", +7805 => x"388c08f0", +7806 => x"05088105", +7807 => x"8c08f005", +7808 => x"0c8c08e0", +7809 => x"05088006", +7810 => x"8c08e405", +7811 => x"0881068c", +7812 => x"08e00508", +7813 => x"9f2b8c08", +7814 => x"e4050881", +7815 => x"2a707207", +7816 => x"8c08e005", +7817 => x"08812a70", +7818 => x"76078c08", +7819 => x"e0050c74", +7820 => x"72078c08", +7821 => x"e4050c59", +7822 => x"595b5b58", +7823 => x"560b0b0b", +7824 => x"ffa2398c", +7825 => x"08f40508", +7826 => x"8c08f005", +7827 => x"08250b0b", +7828 => x"0b819a38", +7829 => x"8c08f405", +7830 => x"0881058c", +7831 => x"08f4050c", +7832 => x"8c08e805", +7833 => x"0880068c", +7834 => x"08ec0508", +7835 => x"81068c08", +7836 => x"e805089f", +7837 => x"2b8c08ec", +7838 => x"0508812a", +7839 => x"7072078c", +7840 => x"08e80508", +7841 => x"812a7076", +7842 => x"078c08e8", +7843 => x"050c7472", +7844 => x"078c08ec", +7845 => x"050c5959", +7846 => x"5b5b5856", +7847 => x"0b0b0bff", +7848 => x"a2398c08", +7849 => x"f005088c", +7850 => x"08f40508", +7851 => x"250b0b0b", +7852 => x"0ba1388c", +7853 => x"08f40508", +7854 => x"8c08f005", +7855 => x"0c805480", +7856 => x"55738c08", +7857 => x"e0050c74", +7858 => x"8c08e405", +7859 => x"0c0b0b0b", +7860 => x"0b9b398c", +7861 => x"08f00508", +7862 => x"8c08f405", +7863 => x"0c805480", +7864 => x"55738c08", +7865 => x"e8050c74", +7866 => x"8c08ec05", +7867 => x"0c8c0888", +7868 => x"05088c08", +7869 => x"8c050855", +7870 => x"55841508", +7871 => x"8415082e", +7872 => x"0b0b0b85", +7873 => x"85388c08", +7874 => x"88050854", +7875 => x"84140880", +7876 => x"2e0b0b0b", +7877 => x"81bc388c", +7878 => x"08e00508", +7879 => x"8c08e405", +7880 => x"08565473", +7881 => x"8c08c805", +7882 => x"0c748c08", +7883 => x"cc050c8c", +7884 => x"08e80508", +7885 => x"8c08ec05", +7886 => x"08575574", +7887 => x"8c08c005", +7888 => x"0c758c08", +7889 => x"c4050c8c", +7890 => x"08cc0508", +7891 => x"8c08c405", +7892 => x"08717131", +7893 => x"708c08ff", +7894 => x"bc050c52", +7895 => x"5556810b", +7896 => x"8c08ffb4", +7897 => x"050c8c08", +7898 => x"ffbc0508", +7899 => x"8c08cc05", +7900 => x"08575574", +7901 => x"76260b0b", +7902 => x"0b0b8938", +7903 => x"800b8c08", +7904 => x"ffb4050c", +7905 => x"8c08c805", +7906 => x"088c08c0", +7907 => x"05087171", +7908 => x"31708c08", +7909 => x"ffb8050c", +7910 => x"8c08ffb8", +7911 => x"0508708c", +7912 => x"08ffb405", +7913 => x"0831708c", +7914 => x"08ffb805", +7915 => x"0c525952", +7916 => x"56548c08", +7917 => x"ffb80508", +7918 => x"8c08ffbc", +7919 => x"05085654", +7920 => x"738c08f8", +7921 => x"050c748c", +7922 => x"08fc050c", +7923 => x"0b0b0b81", +7924 => x"bf398c08", +7925 => x"e805088c", +7926 => x"08ec0508", +7927 => x"5755748c", +7928 => x"08ffac05", +7929 => x"0c758c08", +7930 => x"ffb0050c", +7931 => x"8c08e005", +7932 => x"088c08e4", +7933 => x"05085654", +7934 => x"738c08ff", +7935 => x"a4050c74", +7936 => x"8c08ffa8", +7937 => x"050c8c08", +7938 => x"ffb00508", +7939 => x"8c08ffa8", +7940 => x"05087171", +7941 => x"31708c08", +7942 => x"ffa0050c", +7943 => x"52575581", +7944 => x"0b8c08ff", +7945 => x"98050c8c", +7946 => x"08ffa005", +7947 => x"088c08ff", +7948 => x"b0050856", +7949 => x"54737526", +7950 => x"0b0b0b0b", +7951 => x"8938800b", +7952 => x"8c08ff98", +7953 => x"050c8c08", +7954 => x"ffac0508", +7955 => x"8c08ffa4", +7956 => x"05087171", +7957 => x"31708c08", +7958 => x"ff9c050c", +7959 => x"8c08ff9c", +7960 => x"0508708c", +7961 => x"08ff9805", +7962 => x"0831708c", +7963 => x"08ff9c05", +7964 => x"0c535852", +7965 => x"55568c08", +7966 => x"ff9c0508", +7967 => x"8c08ffa0", +7968 => x"05085654", +7969 => x"738c08f8", +7970 => x"050c748c", +7971 => x"08fc050c", +7972 => x"800b8c08", +7973 => x"f8050824", +7974 => x"0b0b0b0b", +7975 => x"ba388c08", +7976 => x"90050854", +7977 => x"800b8415", +7978 => x"0c8c0890", +7979 => x"05088c08", +7980 => x"f4050888", +7981 => x"120c8c08", +7982 => x"90050857", +7983 => x"548c08f8", +7984 => x"05088c08", +7985 => x"fc050856", +7986 => x"54738c17", +7987 => x"0c749017", +7988 => x"0c0b0b0b", +7989 => x"80d1398c", +7990 => x"08900508", +7991 => x"54810b84", +7992 => x"150c8c08", +7993 => x"9005088c", +7994 => x"08f40508", +7995 => x"88120c8c", +7996 => x"08900508", +7997 => x"8c08d405", +7998 => x"5858548c", +7999 => x"08f80508", +8000 => x"8c08fc05", +8001 => x"08565473", +8002 => x"52745375", +8003 => x"510b0b80", +8004 => x"cfcb3f8c", +8005 => x"08d40508", +8006 => x"8c08d805", +8007 => x"08565473", +8008 => x"8c180c74", +8009 => x"90180c8c", +8010 => x"08900508", +8011 => x"548c1408", +8012 => x"f00a260b", +8013 => x"0b0b82bb", +8014 => x"388c0890", +8015 => x"05088c11", +8016 => x"08709013", +8017 => x"08075155", +8018 => x"5573802e", +8019 => x"0b0b0b82", +8020 => x"a2388c08", +8021 => x"9005088c", +8022 => x"08900508", +8023 => x"9011089f", +8024 => x"2a8c1208", +8025 => x"10707207", +8026 => x"8c150c90", +8027 => x"13081090", +8028 => x"150c8c08", +8029 => x"90050888", +8030 => x"1108ff05", +8031 => x"88120c53", +8032 => x"58585557", +8033 => x"0b0b0bff", +8034 => x"9e398c08", +8035 => x"9005088c", +8036 => x"08880508", +8037 => x"84110884", +8038 => x"130c8c08", +8039 => x"9005088c", +8040 => x"08f40508", +8041 => x"88120c8c", +8042 => x"08900508", +8043 => x"8c08ff94", +8044 => x"050c5256", +8045 => x"548c08e8", +8046 => x"05088c08", +8047 => x"ec050857", +8048 => x"55748c08", +8049 => x"ff8c050c", +8050 => x"758c08ff", +8051 => x"90050c8c", +8052 => x"08e00508", +8053 => x"8c08e405", +8054 => x"08565473", +8055 => x"8c08ff84", +8056 => x"050c748c", +8057 => x"08ff8805", +8058 => x"0c8c08ff", +8059 => x"9005088c", +8060 => x"08ff8805", +8061 => x"08701270", +8062 => x"8c08ff80", +8063 => x"050c5257", +8064 => x"55810b8c", +8065 => x"08fef805", +8066 => x"0c8c08ff", +8067 => x"8005088c", +8068 => x"08ff9005", +8069 => x"08565474", +8070 => x"74260b0b", +8071 => x"0b0b8938", +8072 => x"800b8c08", +8073 => x"fef8050c", +8074 => x"8c08ff8c", +8075 => x"05088c08", +8076 => x"ff840508", +8077 => x"7012708c", +8078 => x"08fefc05", +8079 => x"0c8c08fe", +8080 => x"fc05088c", +8081 => x"08fef805", +8082 => x"0811708c", +8083 => x"08fefc05", +8084 => x"0c535852", +8085 => x"55568c08", +8086 => x"fefc0508", +8087 => x"8c08ff80", +8088 => x"05088c08", +8089 => x"ff940508", +8090 => x"58565473", +8091 => x"8c170c74", +8092 => x"90170c8c", +8093 => x"08900508", +8094 => x"5483740c", +8095 => x"8c089005", +8096 => x"08548c14", +8097 => x"08f80a26", +8098 => x"0b0b0b0b", +8099 => x"87380b0b", +8100 => x"0b80cf39", +8101 => x"8c089005", +8102 => x"088c0890", +8103 => x"05088c11", +8104 => x"08800690", +8105 => x"12088106", +8106 => x"8c089005", +8107 => x"088c1108", +8108 => x"9f2b9012", +8109 => x"08812a70", +8110 => x"72078c14", +8111 => x"08812a70", +8112 => x"77078c1a", +8113 => x"0c757207", +8114 => x"901a0c8c", +8115 => x"08900508", +8116 => x"88110881", +8117 => x"0588120c", +8118 => x"51575c5f", +8119 => x"5f5c5a58", +8120 => x"555b8c08", +8121 => x"90050870", +8122 => x"8c08d005", +8123 => x"0c548c08", +8124 => x"d0050880", +8125 => x"0cae3d0d", +8126 => x"8c0c048c", +8127 => x"08028c0c", +8128 => x"7070800b", +8129 => x"8c08fc05", +8130 => x"0c8c0888", +8131 => x"05085170", +8132 => x"08822e09", +8133 => x"81060b0b", +8134 => x"0b0b8838", +8135 => x"810b8c08", +8136 => x"fc050c8c", +8137 => x"08fc0508", +8138 => x"70800c51", +8139 => x"50508c0c", +8140 => x"048c0802", +8141 => x"8c0c700b", +8142 => x"0b82f4b8", +8143 => x"70800c51", +8144 => x"508c0c04", +8145 => x"8c08028c", +8146 => x"0c707080", +8147 => x"0b8c08fc", +8148 => x"050c8c08", +8149 => x"88050851", +8150 => x"7008842e", +8151 => x"0981060b", +8152 => x"0b0b0b88", +8153 => x"38810b8c", +8154 => x"08fc050c", +8155 => x"8c08fc05", +8156 => x"0870800c", +8157 => x"5150508c", +8158 => x"0c048c08", +8159 => x"028c0c70", +8160 => x"70800b8c", +8161 => x"08fc050c", +8162 => x"8c088805", +8163 => x"08517008", +8164 => x"802e0b0b", +8165 => x"0b0b9738", +8166 => x"8c088805", +8167 => x"08517008", +8168 => x"812e0b0b", +8169 => x"0b0b8738", +8170 => x"0b0b0b0b", +8171 => x"8839810b", +8172 => x"8c08fc05", +8173 => x"0c8c08fc", +8174 => x"05087080", +8175 => x"0c515050", +8176 => x"8c0c048c", +8177 => x"08028c0c", +8178 => x"e73d0d8c", +8179 => x"08880508", +8180 => x"568c088c", +8181 => x"05088c08", +8182 => x"90050856", +8183 => x"54738c08", +8184 => x"ffb8050c", +8185 => x"748c08ff", +8186 => x"bc050c8c", +8187 => x"08940508", +8188 => x"8c089805", +8189 => x"08565473", +8190 => x"8c08ffb0", +8191 => x"050c748c", +8192 => x"08ffb405", +8193 => x"0c8c08ec", +8194 => x"0570538c", +8195 => x"08ffb805", +8196 => x"70535154", +8197 => x"0b0b80de", +8198 => x"c13f8c08", +8199 => x"d8057053", +8200 => x"8c08ffb0", +8201 => x"05705351", +8202 => x"540b0b80", +8203 => x"deac3f8c", +8204 => x"08c40570", +8205 => x"548c08d8", +8206 => x"0570548c", +8207 => x"08ec0570", +8208 => x"54515154", +8209 => x"0b0b0bee", +8210 => x"ea3f8008", +8211 => x"708c08c0", +8212 => x"050c8c08", +8213 => x"c0050853", +8214 => x"7652540b", +8215 => x"0b80ccb8", +8216 => x"3f75800c", +8217 => x"9b3d0d8c", +8218 => x"0c048c08", +8219 => x"028c0ce7", +8220 => x"3d0d8c08", +8221 => x"88050856", +8222 => x"8c088c05", +8223 => x"088c0890", +8224 => x"05085654", +8225 => x"738c08ff", +8226 => x"b8050c74", +8227 => x"8c08ffbc", +8228 => x"050c8c08", +8229 => x"9405088c", +8230 => x"08980508", +8231 => x"5654738c", +8232 => x"08ffb005", +8233 => x"0c748c08", +8234 => x"ffb4050c", +8235 => x"8c08ec05", +8236 => x"70538c08", +8237 => x"ffb80570", +8238 => x"5351540b", +8239 => x"0b80dd9a", +8240 => x"3f8c08d8", +8241 => x"0570538c", +8242 => x"08ffb005", +8243 => x"70535154", +8244 => x"0b0b80dd", +8245 => x"853f8c08", +8246 => x"dc050881", +8247 => x"328c08dc", +8248 => x"050c8c08", +8249 => x"c4057054", +8250 => x"8c08d805", +8251 => x"70548c08", +8252 => x"ec057054", +8253 => x"5151540b", +8254 => x"0b0bedb7", +8255 => x"3f800870", +8256 => x"8c08c005", +8257 => x"0c8c08c0", +8258 => x"05085376", +8259 => x"52540b0b", +8260 => x"80cb853f", +8261 => x"75800c9b", +8262 => x"3d0d8c0c", +8263 => x"048c0802", +8264 => x"8c0cff83", +8265 => x"3d0d8c08", +8266 => x"8c05088c", +8267 => x"08900508", +8268 => x"5856758c", +8269 => x"08ffb805", +8270 => x"0c768c08", +8271 => x"ffbc050c", +8272 => x"8c089405", +8273 => x"088c0898", +8274 => x"05085856", +8275 => x"758c08ff", +8276 => x"b0050c76", +8277 => x"8c08ffb4", +8278 => x"050c8c08", +8279 => x"ec057053", +8280 => x"8c08ffb8", +8281 => x"05705351", +8282 => x"560b0b80", +8283 => x"dbec3f8c", +8284 => x"08d80570", +8285 => x"538c08ff", +8286 => x"b0057053", +8287 => x"51560b0b", +8288 => x"80dbd73f", +8289 => x"8c08ec05", +8290 => x"8c08ffac", +8291 => x"050c8c08", +8292 => x"d8058c08", +8293 => x"ffa8050c", +8294 => x"8c08c405", +8295 => x"8c08ffa4", +8296 => x"050c8056", +8297 => x"8057758c", +8298 => x"08ff9805", +8299 => x"0c768c08", +8300 => x"ff9c050c", +8301 => x"80568057", +8302 => x"758c08ff", +8303 => x"90050c76", +8304 => x"8c08ff94", +8305 => x"050c8c08", +8306 => x"ffac0508", +8307 => x"510b0b0b", +8308 => x"9d823f80", +8309 => x"08567580", +8310 => x"2e0b0b0b", +8311 => x"80da388c", +8312 => x"08ffac05", +8313 => x"088c08fe", +8314 => x"c4050c80", +8315 => x"0b8c08fe", +8316 => x"c0050c8c", +8317 => x"08ffac05", +8318 => x"088c08ff", +8319 => x"a8050857", +8320 => x"57841708", +8321 => x"8417082e", +8322 => x"0b0b0b0b", +8323 => x"8938810b", +8324 => x"8c08fec0", +8325 => x"050c8c08", +8326 => x"fec40508", +8327 => x"8c08fec0", +8328 => x"05088412", +8329 => x"0c8c08ff", +8330 => x"ac05088c", +8331 => x"08ffa005", +8332 => x"0c560b0b", +8333 => x"0b9af139", +8334 => x"8c08ffa8", +8335 => x"0508510b", +8336 => x"0b0b9c90", +8337 => x"3f800856", +8338 => x"75802e0b", +8339 => x"0b0b80da", +8340 => x"388c08ff", +8341 => x"a805088c", +8342 => x"08febc05", +8343 => x"0c800b8c", +8344 => x"08feb805", +8345 => x"0c8c08ff", +8346 => x"ac05088c", +8347 => x"08ffa805", +8348 => x"08575784", +8349 => x"17088417", +8350 => x"082e0b0b", +8351 => x"0b0b8938", +8352 => x"810b8c08", +8353 => x"feb8050c", +8354 => x"8c08febc", +8355 => x"05088c08", +8356 => x"feb80508", +8357 => x"84120c8c", +8358 => x"08ffa805", +8359 => x"088c08ff", +8360 => x"a0050c57", +8361 => x"0b0b0b99", +8362 => x"ff398c08", +8363 => x"ffac0508", +8364 => x"510b0b0b", +8365 => x"9ae83f80", +8366 => x"08567580", +8367 => x"2e0b0b0b", +8368 => x"8189388c", +8369 => x"08ffa805", +8370 => x"08510b0b", +8371 => x"0b9a993f", +8372 => x"80085675", +8373 => x"802e0b0b", +8374 => x"0b0b9738", +8375 => x"0b0b0b99", +8376 => x"f43f8008", +8377 => x"708c08ff", +8378 => x"a0050c56", +8379 => x"0b0b0b99", +8380 => x"b7398c08", +8381 => x"ffac0508", +8382 => x"8c08feb4", +8383 => x"050c800b", +8384 => x"8c08feb0", +8385 => x"050c8c08", +8386 => x"ffac0508", +8387 => x"8c08ffa8", +8388 => x"05085757", +8389 => x"84170884", +8390 => x"17082e0b", +8391 => x"0b0b0b89", +8392 => x"38810b8c", +8393 => x"08feb005", +8394 => x"0c8c08fe", +8395 => x"b405088c", +8396 => x"08feb005", +8397 => x"0884120c", +8398 => x"8c08ffac", +8399 => x"05088c08", +8400 => x"ffa0050c", +8401 => x"560b0b0b", +8402 => x"98de398c", +8403 => x"08ffa805", +8404 => x"08510b0b", +8405 => x"0b99c73f", +8406 => x"80085675", +8407 => x"802e0b0b", +8408 => x"0b818938", +8409 => x"8c08ffac", +8410 => x"0508510b", +8411 => x"0b0b98f8", +8412 => x"3f800856", +8413 => x"75802e0b", +8414 => x"0b0b0b97", +8415 => x"380b0b0b", +8416 => x"98d33f80", +8417 => x"08708c08", +8418 => x"ffa0050c", +8419 => x"560b0b0b", +8420 => x"9896398c", +8421 => x"08ffa805", +8422 => x"088c08fe", +8423 => x"ac050c80", +8424 => x"0b8c08fe", +8425 => x"a8050c8c", +8426 => x"08ffac05", +8427 => x"088c08ff", +8428 => x"a8050857", +8429 => x"57841708", +8430 => x"8417082e", +8431 => x"0b0b0b0b", +8432 => x"8938810b", +8433 => x"8c08fea8", +8434 => x"050c8c08", +8435 => x"feac0508", +8436 => x"8c08fea8", +8437 => x"05088412", +8438 => x"0c8c08ff", +8439 => x"a805088c", +8440 => x"08ffa005", +8441 => x"0c570b0b", +8442 => x"0b97bd39", +8443 => x"8c08ffac", +8444 => x"0508510b", +8445 => x"0b0b97f0", +8446 => x"3f800856", +8447 => x"75802e0b", +8448 => x"0b0b80da", +8449 => x"388c08ff", +8450 => x"ac05088c", +8451 => x"08fea405", +8452 => x"0c800b8c", +8453 => x"08fea005", +8454 => x"0c8c08ff", +8455 => x"ac05088c", +8456 => x"08ffa805", +8457 => x"08575784", +8458 => x"17088417", +8459 => x"082e0b0b", +8460 => x"0b0b8938", +8461 => x"810b8c08", +8462 => x"fea0050c", +8463 => x"8c08fea4", +8464 => x"05088c08", +8465 => x"fea00508", +8466 => x"84120c8c", +8467 => x"08ffac05", +8468 => x"088c08ff", +8469 => x"a0050c56", +8470 => x"0b0b0b96", +8471 => x"cb398c08", +8472 => x"ffa80508", +8473 => x"510b0b0b", +8474 => x"96fe3f80", +8475 => x"08567580", +8476 => x"2e0b0b0b", +8477 => x"80da388c", +8478 => x"08ffa805", +8479 => x"088c08fe", +8480 => x"9c050c80", +8481 => x"0b8c08fe", +8482 => x"98050c8c", +8483 => x"08ffac05", +8484 => x"088c08ff", +8485 => x"a8050857", +8486 => x"57841708", +8487 => x"8417082e", +8488 => x"0b0b0b0b", +8489 => x"8938810b", +8490 => x"8c08fe98", +8491 => x"050c8c08", +8492 => x"fe9c0508", +8493 => x"8c08fe98", +8494 => x"05088412", +8495 => x"0c8c08ff", +8496 => x"a805088c", +8497 => x"08ffa005", +8498 => x"0c570b0b", +8499 => x"0b95d939", +8500 => x"8c08ffac", +8501 => x"05089011", +8502 => x"088c08ff", +8503 => x"8c050c8c", +8504 => x"08ffac05", +8505 => x"088c1108", +8506 => x"802a5959", +8507 => x"5680778c", +8508 => x"08ff8805", +8509 => x"0c8c08ff", +8510 => x"a8050890", +8511 => x"11088c08", +8512 => x"ff84050c", +8513 => x"8c08ffa8", +8514 => x"05088c11", +8515 => x"08802a5a", +8516 => x"5a515680", +8517 => x"778c08ff", +8518 => x"80050c8c", +8519 => x"08ff8405", +8520 => x"085a5680", +8521 => x"0b8c08ff", +8522 => x"8c050858", +8523 => x"58800b8c", +8524 => x"08fef005", +8525 => x"5b567554", +8526 => x"76557752", +8527 => x"78537951", +8528 => x"0b0b0bbb", +8529 => x"b23f8c08", +8530 => x"fef00508", +8531 => x"8c08fef4", +8532 => x"05085856", +8533 => x"758c08fe", +8534 => x"f8050c76", +8535 => x"8c08fefc", +8536 => x"050c8c08", +8537 => x"ff800508", +8538 => x"59800b8c", +8539 => x"08ff8c05", +8540 => x"08585880", +8541 => x"0b8c08fe", +8542 => x"e8055b56", +8543 => x"75547655", +8544 => x"77527853", +8545 => x"79510b0b", +8546 => x"0bbaec3f", +8547 => x"8c08fee8", +8548 => x"05088c08", +8549 => x"feec0508", +8550 => x"5856758c", +8551 => x"08fef005", +8552 => x"0c768c08", +8553 => x"fef4050c", +8554 => x"8c08ff84", +8555 => x"05085980", +8556 => x"0b8c08ff", +8557 => x"88050858", +8558 => x"58800b8c", +8559 => x"08fee005", +8560 => x"5b567554", +8561 => x"76557752", +8562 => x"78537951", +8563 => x"0b0b0bba", +8564 => x"a63f8c08", +8565 => x"fee00508", +8566 => x"8c08fee4", +8567 => x"05085856", +8568 => x"758c08fe", +8569 => x"e8050c76", +8570 => x"8c08feec", +8571 => x"050c8c08", +8572 => x"ff800508", +8573 => x"59800b8c", +8574 => x"08ff8805", +8575 => x"08585880", +8576 => x"0b8c08fe", +8577 => x"d8055b56", +8578 => x"75547655", +8579 => x"77527853", +8580 => x"79510b0b", +8581 => x"0bb9e03f", +8582 => x"8c08fed8", +8583 => x"05088c08", +8584 => x"fedc0508", +8585 => x"5856758c", +8586 => x"08fee005", +8587 => x"0c768c08", +8588 => x"fee4050c", +8589 => x"80568057", +8590 => x"758c08fe", +8591 => x"d8050c76", +8592 => x"8c08fedc", +8593 => x"050c8056", +8594 => x"8057758c", +8595 => x"08fed005", +8596 => x"0c768c08", +8597 => x"fed4050c", +8598 => x"8c08fef0", +8599 => x"05088c08", +8600 => x"fef40508", +8601 => x"5856758c", +8602 => x"08fe9005", +8603 => x"0c768c08", +8604 => x"fe94050c", +8605 => x"8c08fee8", +8606 => x"05088c08", +8607 => x"feec0508", +8608 => x"5856758c", +8609 => x"08fe8805", +8610 => x"0c768c08", +8611 => x"fe8c050c", +8612 => x"8c08fe94", +8613 => x"05088c08", +8614 => x"fe8c0508", +8615 => x"7012708c", +8616 => x"08fe8405", +8617 => x"0c525757", +8618 => x"810b8c08", +8619 => x"fdfc050c", +8620 => x"8c08fe84", +8621 => x"05088c08", +8622 => x"fe940508", +8623 => x"57577577", +8624 => x"260b0b0b", +8625 => x"0b893880", +8626 => x"0b8c08fd", +8627 => x"fc050c8c", +8628 => x"08fe9005", +8629 => x"088c08fe", +8630 => x"88050870", +8631 => x"12708c08", +8632 => x"fe80050c", +8633 => x"8c08fe80", +8634 => x"05088c08", +8635 => x"fdfc0508", +8636 => x"11708c08", +8637 => x"fe80050c", +8638 => x"53515257", +8639 => x"578c08fe", +8640 => x"8005088c", +8641 => x"08fe8405", +8642 => x"08585675", +8643 => x"8c08fec8", +8644 => x"050c768c", +8645 => x"08fecc05", +8646 => x"0c8c08fe", +8647 => x"f005088c", +8648 => x"08fec805", +8649 => x"08260b0b", +8650 => x"0b0bb038", +8651 => x"8c08fef0", +8652 => x"05088c08", +8653 => x"fec80508", +8654 => x"2e098106", +8655 => x"0b0b0b81", +8656 => x"d1388c08", +8657 => x"fef40508", +8658 => x"8c08fecc", +8659 => x"0508260b", +8660 => x"0b0b0b87", +8661 => x"380b0b0b", +8662 => x"81b8398c", +8663 => x"08fed805", +8664 => x"088c08fe", +8665 => x"dc050858", +8666 => x"56758c08", +8667 => x"fdf4050c", +8668 => x"768c08fd", +8669 => x"f8050c81", +8670 => x"56805775", +8671 => x"8c08fdec", +8672 => x"050c768c", +8673 => x"08fdf005", +8674 => x"0c8c08fd", +8675 => x"f805088c", +8676 => x"08fdf005", +8677 => x"08701270", +8678 => x"8c08fde8", +8679 => x"050c5257", +8680 => x"57810b8c", +8681 => x"08fde005", +8682 => x"0c8c08fd", +8683 => x"e805088c", +8684 => x"08fdf805", +8685 => x"08575775", +8686 => x"77260b0b", +8687 => x"0b0b8938", +8688 => x"800b8c08", +8689 => x"fde0050c", +8690 => x"8c08fdf4", +8691 => x"05088c08", +8692 => x"fdec0508", +8693 => x"7012708c", +8694 => x"08fde405", +8695 => x"0c8c08fd", +8696 => x"e405088c", +8697 => x"08fde005", +8698 => x"0811708c", +8699 => x"08fde405", +8700 => x"0c535152", +8701 => x"57578c08", +8702 => x"fde40508", +8703 => x"8c08fde8", +8704 => x"05085856", +8705 => x"758c08fe", +8706 => x"d8050c76", +8707 => x"8c08fedc", +8708 => x"050c8c08", +8709 => x"fecc0508", +8710 => x"57807780", +8711 => x"2b8c08fe", +8712 => x"f0050c56", +8713 => x"800b8c08", +8714 => x"fef4050c", +8715 => x"8c08fef8", +8716 => x"05088c08", +8717 => x"fefc0508", +8718 => x"5856758c", +8719 => x"08fdd805", +8720 => x"0c768c08", +8721 => x"fddc050c", +8722 => x"8c08fef0", +8723 => x"05088c08", +8724 => x"fef40508", +8725 => x"5856758c", +8726 => x"08fdd005", +8727 => x"0c768c08", +8728 => x"fdd4050c", +8729 => x"8c08fddc", +8730 => x"05088c08", +8731 => x"fdd40508", +8732 => x"7012708c", +8733 => x"08fdcc05", +8734 => x"0c525757", +8735 => x"810b8c08", +8736 => x"fdc4050c", +8737 => x"8c08fdcc", +8738 => x"05088c08", +8739 => x"fddc0508", +8740 => x"57577577", +8741 => x"260b0b0b", +8742 => x"0b893880", +8743 => x"0b8c08fd", +8744 => x"c4050c8c", +8745 => x"08fdd805", +8746 => x"088c08fd", +8747 => x"d0050870", +8748 => x"12708c08", +8749 => x"fdc8050c", +8750 => x"8c08fdc8", +8751 => x"05088c08", +8752 => x"fdc40508", +8753 => x"11708c08", +8754 => x"fdc8050c", +8755 => x"53515257", +8756 => x"578c08fd", +8757 => x"c805088c", +8758 => x"08fdcc05", +8759 => x"08585675", +8760 => x"8c08fed0", +8761 => x"050c768c", +8762 => x"08fed405", +8763 => x"0c8c08fe", +8764 => x"f805088c", +8765 => x"08fed005", +8766 => x"08260b0b", +8767 => x"0b0bb038", +8768 => x"8c08fef8", +8769 => x"05088c08", +8770 => x"fed00508", +8771 => x"2e098106", +8772 => x"0b0b0b81", +8773 => x"d1388c08", +8774 => x"fefc0508", +8775 => x"8c08fed4", +8776 => x"0508260b", +8777 => x"0b0b0b87", +8778 => x"380b0b0b", +8779 => x"81b8398c", +8780 => x"08fed805", +8781 => x"088c08fe", +8782 => x"dc050858", +8783 => x"56758c08", +8784 => x"fdbc050c", +8785 => x"768c08fd", +8786 => x"c0050c80", +8787 => x"56815775", +8788 => x"8c08fdb4", +8789 => x"050c768c", +8790 => x"08fdb805", +8791 => x"0c8c08fd", +8792 => x"c005088c", +8793 => x"08fdb805", +8794 => x"08701270", +8795 => x"8c08fdb0", +8796 => x"050c5257", +8797 => x"57810b8c", +8798 => x"08fda805", +8799 => x"0c8c08fd", +8800 => x"b005088c", +8801 => x"08fdc005", +8802 => x"08575775", +8803 => x"77260b0b", +8804 => x"0b0b8938", +8805 => x"800b8c08", +8806 => x"fda8050c", +8807 => x"8c08fdbc", +8808 => x"05088c08", +8809 => x"fdb40508", +8810 => x"7012708c", +8811 => x"08fdac05", +8812 => x"0c8c08fd", +8813 => x"ac05088c", +8814 => x"08fda805", +8815 => x"0811708c", +8816 => x"08fdac05", +8817 => x"0c535152", +8818 => x"57578c08", +8819 => x"fdac0508", +8820 => x"8c08fdb0", +8821 => x"05085856", +8822 => x"758c08fe", +8823 => x"d8050c76", +8824 => x"8c08fedc", +8825 => x"050c8c08", +8826 => x"fec80508", +8827 => x"802a708c", +8828 => x"08fda405", +8829 => x"0c578070", +8830 => x"8c08fda0", +8831 => x"050c568c", +8832 => x"08fda005", +8833 => x"088c08fd", +8834 => x"a4050858", +8835 => x"56758c08", +8836 => x"fda0050c", +8837 => x"768c08fd", +8838 => x"a4050c8c", +8839 => x"08fee005", +8840 => x"088c08fe", +8841 => x"e4050858", +8842 => x"56758c08", +8843 => x"fd98050c", +8844 => x"768c08fd", +8845 => x"9c050c8c", +8846 => x"08fda405", +8847 => x"088c08fd", +8848 => x"9c050870", +8849 => x"12708c08", +8850 => x"fd94050c", +8851 => x"52575781", +8852 => x"0b8c08fd", +8853 => x"8c050c8c", +8854 => x"08fd9405", +8855 => x"088c08fd", +8856 => x"a4050857", +8857 => x"57757726", +8858 => x"0b0b0b0b", +8859 => x"8938800b", +8860 => x"8c08fd8c", +8861 => x"050c8c08", +8862 => x"fda00508", +8863 => x"8c08fd98", +8864 => x"05087012", +8865 => x"708c08fd", +8866 => x"90050c8c", +8867 => x"08fd9005", +8868 => x"088c08fd", +8869 => x"8c050811", +8870 => x"708c08fd", +8871 => x"90050c53", +8872 => x"51525757", +8873 => x"8c08fed8", +8874 => x"05088c08", +8875 => x"fedc0508", +8876 => x"5856758c", +8877 => x"08fd8405", +8878 => x"0c768c08", +8879 => x"fd88050c", +8880 => x"8c08fd88", +8881 => x"05088c08", +8882 => x"fd940508", +8883 => x"7012708c", +8884 => x"08fd8005", +8885 => x"0c525757", +8886 => x"810b8c08", +8887 => x"fcf8050c", +8888 => x"8c08fd80", +8889 => x"05088c08", +8890 => x"fd880508", +8891 => x"57577577", +8892 => x"260b0b0b", +8893 => x"0b893880", +8894 => x"0b8c08fc", +8895 => x"f8050c8c", +8896 => x"08fd8405", +8897 => x"088c08fd", +8898 => x"90050870", +8899 => x"12708c08", +8900 => x"fcfc050c", +8901 => x"8c08fcfc", +8902 => x"05088c08", +8903 => x"fcf80508", +8904 => x"11708c08", +8905 => x"fcfc050c", +8906 => x"53515257", +8907 => x"578c08fc", +8908 => x"fc05088c", +8909 => x"08fd8005", +8910 => x"08585675", +8911 => x"8c08fed8", +8912 => x"050c768c", +8913 => x"08fedc05", +8914 => x"0c8c08fe", +8915 => x"d805088c", +8916 => x"08fedc05", +8917 => x"08585675", +8918 => x"8c08ff90", +8919 => x"050c768c", +8920 => x"08ff9405", +8921 => x"0c8c08fe", +8922 => x"d005088c", +8923 => x"08fed405", +8924 => x"08585675", +8925 => x"8c08ff98", +8926 => x"050c768c", +8927 => x"08ff9c05", +8928 => x"0c8c08ff", +8929 => x"a405088c", +8930 => x"08ffac05", +8931 => x"088c08ff", +8932 => x"a8050888", +8933 => x"12088812", +8934 => x"08058411", +8935 => x"88150c8c", +8936 => x"08ffa405", +8937 => x"088c08fc", +8938 => x"f4050c51", +8939 => x"58585880", +8940 => x"0b8c08fc", +8941 => x"f0050c8c", +8942 => x"08ffac05", +8943 => x"088c08ff", +8944 => x"a8050857", +8945 => x"57841708", +8946 => x"8417082e", +8947 => x"0b0b0b0b", +8948 => x"8938810b", +8949 => x"8c08fcf0", +8950 => x"050c8c08", +8951 => x"fcf40508", +8952 => x"8c08fcf0", +8953 => x"05088412", +8954 => x"0c578c08", +8955 => x"ff900508", +8956 => x"f80a260b", +8957 => x"0b0b0b87", +8958 => x"380b0b0b", +8959 => x"81ae398c", +8960 => x"08ffa405", +8961 => x"08881108", +8962 => x"81058812", +8963 => x"0c8c08ff", +8964 => x"90050880", +8965 => x"068c08ff", +8966 => x"94050881", +8967 => x"06705259", +8968 => x"51567580", +8969 => x"2e0b0b0b", +8970 => x"80cf388c", +8971 => x"08ff9805", +8972 => x"089f2b8c", +8973 => x"08ff9c05", +8974 => x"08812a70", +8975 => x"72078c08", +8976 => x"ff980508", +8977 => x"812a5959", +8978 => x"5959758c", +8979 => x"08ff9805", +8980 => x"0c768c08", +8981 => x"ff9c050c", +8982 => x"8c08ff98", +8983 => x"0508810a", +8984 => x"078c08ff", +8985 => x"9c050880", +8986 => x"07585675", +8987 => x"8c08ff98", +8988 => x"050c768c", +8989 => x"08ff9c05", +8990 => x"0c8c08ff", +8991 => x"9005089f", +8992 => x"2b8c08ff", +8993 => x"94050881", +8994 => x"2a707207", +8995 => x"8c08ff90", +8996 => x"0508812a", +8997 => x"59595959", +8998 => x"758c08ff", +8999 => x"90050c76", +9000 => x"8c08ff94", +9001 => x"050c0b0b", +9002 => x"0bfebf39", +9003 => x"8c08ff90", +9004 => x"0508f00a", +9005 => x"260b0b0b", +9006 => x"81a1388c", +9007 => x"08ffa405", +9008 => x"08881108", +9009 => x"ff058812", +9010 => x"0c8c08ff", +9011 => x"9405089f", +9012 => x"2a8c08ff", +9013 => x"90050810", +9014 => x"7072078c", +9015 => x"08ff9405", +9016 => x"08105b53", +9017 => x"5a5a5675", +9018 => x"8c08ff90", +9019 => x"050c768c", +9020 => x"08ff9405", +9021 => x"0c800b8c", +9022 => x"08ff9805", +9023 => x"08240b0b", +9024 => x"0b0b8738", +9025 => x"0b0b0b0b", +9026 => x"a1398c08", +9027 => x"ff900508", +9028 => x"80078c08", +9029 => x"ff940508", +9030 => x"81075856", +9031 => x"758c08ff", +9032 => x"90050c76", +9033 => x"8c08ff94", +9034 => x"050c8c08", +9035 => x"ff9c0508", +9036 => x"9f2a8c08", +9037 => x"ff980508", +9038 => x"10707207", +9039 => x"8c08ff9c", +9040 => x"0508105a", +9041 => x"58595975", +9042 => x"8c08ff98", +9043 => x"050c768c", +9044 => x"08ff9c05", +9045 => x"0c0b0b0b", +9046 => x"fed2398c", +9047 => x"08ff9005", +9048 => x"08800670", +9049 => x"8c08fce8", +9050 => x"050c8c08", +9051 => x"ff940508", +9052 => x"81ff0670", +9053 => x"8c08fcec", +9054 => x"050c5856", +9055 => x"8c08fce8", +9056 => x"05088c08", +9057 => x"fcec0508", +9058 => x"5856758c", +9059 => x"08fce805", +9060 => x"0c768c08", +9061 => x"fcec050c", +9062 => x"8c08fce8", +9063 => x"05085776", +9064 => x"0b0b0b83", +9065 => x"d0388c08", +9066 => x"fcec0508", +9067 => x"56758180", +9068 => x"2e098106", +9069 => x"0b0b0b83", +9070 => x"bc388c08", +9071 => x"ff900508", +9072 => x"982b8c08", +9073 => x"ff940508", +9074 => x"882a7072", +9075 => x"078c08ff", +9076 => x"90050888", +9077 => x"2a718106", +9078 => x"51595959", +9079 => x"5975802e", +9080 => x"0b0b0b81", +9081 => x"bf388c08", +9082 => x"ff900508", +9083 => x"8c08ff94", +9084 => x"05085856", +9085 => x"758c08fc", +9086 => x"e0050c76", +9087 => x"8c08fce4", +9088 => x"050c8056", +9089 => x"81805775", +9090 => x"8c08fcd8", +9091 => x"050c768c", +9092 => x"08fcdc05", +9093 => x"0c8c08fc", +9094 => x"e405088c", +9095 => x"08fcdc05", +9096 => x"08701270", +9097 => x"8c08fcd4", +9098 => x"050c5257", +9099 => x"57810b8c", +9100 => x"08fccc05", +9101 => x"0c8c08fc", +9102 => x"d405088c", +9103 => x"08fce405", +9104 => x"08575775", +9105 => x"77260b0b", +9106 => x"0b0b8938", +9107 => x"800b8c08", +9108 => x"fccc050c", +9109 => x"8c08fce0", +9110 => x"05088c08", +9111 => x"fcd80508", +9112 => x"7012708c", +9113 => x"08fcd005", +9114 => x"0c8c08fc", +9115 => x"d005088c", +9116 => x"08fccc05", +9117 => x"0811708c", +9118 => x"08fcd005", +9119 => x"0c535152", +9120 => x"57578c08", +9121 => x"fcd00508", +9122 => x"8c08fcd4", +9123 => x"05085856", +9124 => x"758c08ff", +9125 => x"90050c76", +9126 => x"8c08ff94", +9127 => x"050c0b0b", +9128 => x"0b81d239", +9129 => x"8c08ff98", +9130 => x"0508708c", +9131 => x"08ff9c05", +9132 => x"08075156", +9133 => x"75802e0b", +9134 => x"0b0b81b9", +9135 => x"388c08ff", +9136 => x"9005088c", +9137 => x"08ff9405", +9138 => x"08585675", +9139 => x"8c08fcc4", +9140 => x"050c768c", +9141 => x"08fcc805", +9142 => x"0c805681", +9143 => x"8057758c", +9144 => x"08fcbc05", +9145 => x"0c768c08", +9146 => x"fcc0050c", +9147 => x"8c08fcc8", +9148 => x"05088c08", +9149 => x"fcc00508", +9150 => x"7012708c", +9151 => x"08fcb805", +9152 => x"0c525757", +9153 => x"810b8c08", +9154 => x"fcb0050c", +9155 => x"8c08fcb8", +9156 => x"05088c08", +9157 => x"fcc80508", +9158 => x"57577577", +9159 => x"260b0b0b", +9160 => x"0b893880", +9161 => x"0b8c08fc", +9162 => x"b0050c8c", +9163 => x"08fcc405", +9164 => x"088c08fc", +9165 => x"bc050870", +9166 => x"12708c08", +9167 => x"fcb4050c", +9168 => x"8c08fcb4", +9169 => x"05088c08", +9170 => x"fcb00508", +9171 => x"11708c08", +9172 => x"fcb4050c", +9173 => x"53515257", +9174 => x"578c08fc", +9175 => x"b405088c", +9176 => x"08fcb805", +9177 => x"08585675", +9178 => x"8c08ff90", +9179 => x"050c768c", +9180 => x"08ff9405", +9181 => x"0c8c08ff", +9182 => x"a4050856", +9183 => x"8c08ff90", +9184 => x"05088c08", +9185 => x"ff940508", +9186 => x"5957768c", +9187 => x"170c7790", +9188 => x"170c8c08", +9189 => x"ffa40508", +9190 => x"5683760c", +9191 => x"8c08ffa4", +9192 => x"05088c08", +9193 => x"ffa0050c", +9194 => x"8c08ffa0", +9195 => x"0508708c", +9196 => x"08c0050c", +9197 => x"8c08c005", +9198 => x"08538c08", +9199 => x"88050852", +9200 => x"560b0b0b", +9201 => x"add23f8c", +9202 => x"08880508", +9203 => x"800c80ff", +9204 => x"3d0d8c0c", +9205 => x"048c0802", +9206 => x"8c0c700b", +9207 => x"0b82f4b8", +9208 => x"70800c51", +9209 => x"508c0c04", +9210 => x"8c08028c", +9211 => x"0c707080", +9212 => x"0b8c08fc", +9213 => x"050c8c08", +9214 => x"88050851", +9215 => x"7008822e", +9216 => x"0981060b", +9217 => x"0b0b0b88", +9218 => x"38810b8c", +9219 => x"08fc050c", +9220 => x"8c08fc05", +9221 => x"0870800c", +9222 => x"5150508c", +9223 => x"0c048c08", +9224 => x"028c0c70", +9225 => x"70800b8c", +9226 => x"08fc050c", +9227 => x"8c088805", +9228 => x"08517008", +9229 => x"842e0981", +9230 => x"060b0b0b", +9231 => x"0b883881", +9232 => x"0b8c08fc", +9233 => x"050c8c08", +9234 => x"fc050870", +9235 => x"800c5150", +9236 => x"508c0c04", +9237 => x"8c08028c", +9238 => x"0c707080", +9239 => x"0b8c08fc", +9240 => x"050c8c08", +9241 => x"88050851", +9242 => x"7008802e", +9243 => x"0b0b0b0b", +9244 => x"97388c08", +9245 => x"88050851", +9246 => x"7008812e", +9247 => x"0b0b0b0b", +9248 => x"87380b0b", +9249 => x"0b0b8839", +9250 => x"810b8c08", +9251 => x"fc050c8c", +9252 => x"08fc0508", +9253 => x"70800c51", +9254 => x"50508c0c", +9255 => x"048c0802", +9256 => x"8c0cffbc", +9257 => x"3d0d8c08", +9258 => x"8c05088c", +9259 => x"08900508", +9260 => x"5553728c", +9261 => x"08cc050c", +9262 => x"738c08d0", +9263 => x"050c8c08", +9264 => x"9405088c", +9265 => x"08980508", +9266 => x"5553728c", +9267 => x"08c4050c", +9268 => x"738c08c8", +9269 => x"050c8c08", +9270 => x"ec057053", +9271 => x"8c08cc05", +9272 => x"70535153", +9273 => x"0b0b0bbc", +9274 => x"f13f8c08", +9275 => x"d8057053", +9276 => x"8c08c405", +9277 => x"70535153", +9278 => x"0b0b0bbc", +9279 => x"dd3f8c08", +9280 => x"ec058c08", +9281 => x"c0050c8c", +9282 => x"08d8058c", +9283 => x"08ffbc05", +9284 => x"0c8c08c0", +9285 => x"0508510b", +9286 => x"0b0b9084", +9287 => x"3f800853", +9288 => x"72802e0b", +9289 => x"0b0b0b92", +9290 => x"388c08c0", +9291 => x"05088c08", +9292 => x"ffb8050c", +9293 => x"0b0b0b8e", +9294 => x"bb398c08", +9295 => x"ffbc0508", +9296 => x"510b0b0b", +9297 => x"8fda3f80", +9298 => x"08537280", +9299 => x"2e0b0b0b", +9300 => x"0b93388c", +9301 => x"08ffbc05", +9302 => x"088c08ff", +9303 => x"b8050c0b", +9304 => x"0b0b8e90", +9305 => x"398c08c0", +9306 => x"05088c08", +9307 => x"c005088c", +9308 => x"08ffbc05", +9309 => x"08841208", +9310 => x"84120832", +9311 => x"84140c8c", +9312 => x"08c00508", +9313 => x"54555555", +9314 => x"0b0b0b8e", +9315 => x"dd3f8008", +9316 => x"53720b0b", +9317 => x"0b0b9d38", +9318 => x"8c08c005", +9319 => x"08510b0b", +9320 => x"0b8e913f", +9321 => x"80085372", +9322 => x"0b0b0b0b", +9323 => x"87380b0b", +9324 => x"0b80c339", +9325 => x"8c08c005", +9326 => x"088c08ff", +9327 => x"bc050854", +9328 => x"54730873", +9329 => x"082e0981", +9330 => x"060b0b0b", +9331 => x"0b97380b", +9332 => x"0b0b8dcd", +9333 => x"3f800870", +9334 => x"8c08ffb8", +9335 => x"050c530b", +9336 => x"0b0b8d90", +9337 => x"398c08c0", +9338 => x"05088c08", +9339 => x"ffb8050c", +9340 => x"0b0b0b8c", +9341 => x"ff398c08", +9342 => x"ffbc0508", +9343 => x"510b0b0b", +9344 => x"8de83f80", +9345 => x"08537280", +9346 => x"2e0b0b0b", +9347 => x"0baf388c", +9348 => x"08c00508", +9349 => x"53805480", +9350 => x"55738c14", +9351 => x"0c749014", +9352 => x"0c8c08c0", +9353 => x"05085380", +9354 => x"0b88140c", +9355 => x"8c08c005", +9356 => x"088c08ff", +9357 => x"b8050c0b", +9358 => x"0b0b8cb8", +9359 => x"398c08ff", +9360 => x"bc050851", +9361 => x"0b0b0b8c", +9362 => x"eb3f8008", +9363 => x"5372802e", +9364 => x"0b0b0b0b", +9365 => x"9b388c08", +9366 => x"c0050853", +9367 => x"84730c8c", +9368 => x"08c00508", +9369 => x"8c08ffb8", +9370 => x"050c0b0b", +9371 => x"0b8c8539", +9372 => x"8c08c005", +9373 => x"088c08c0", +9374 => x"05088c08", +9375 => x"ffbc0508", +9376 => x"88120888", +9377 => x"12083188", +9378 => x"140c8c08", +9379 => x"c0050851", +9380 => x"55555590", +9381 => x"13088c14", +9382 => x"08545472", +9383 => x"8c08ffa8", +9384 => x"050c738c", +9385 => x"08ffac05", +9386 => x"0c8c08ff", +9387 => x"bc050853", +9388 => x"9013088c", +9389 => x"14085454", +9390 => x"728c08ff", +9391 => x"a0050c73", +9392 => x"8c08ffa4", +9393 => x"050c8c08", +9394 => x"ffa00508", +9395 => x"8c08ffa8", +9396 => x"0508260b", +9397 => x"0b0b0bb0", +9398 => x"388c08ff", +9399 => x"a005088c", +9400 => x"08ffa805", +9401 => x"082e0981", +9402 => x"060b0b0b", +9403 => x"81e9388c", +9404 => x"08ffa405", +9405 => x"088c08ff", +9406 => x"ac050826", +9407 => x"0b0b0b0b", +9408 => x"87380b0b", +9409 => x"0b81d039", +9410 => x"8c08ffa8", +9411 => x"05088c08", +9412 => x"ffac0508", +9413 => x"5553728c", +9414 => x"08ff9005", +9415 => x"0c738c08", +9416 => x"ff94050c", +9417 => x"8c08ff90", +9418 => x"05088c08", +9419 => x"ff940508", +9420 => x"5553728c", +9421 => x"08ff8805", +9422 => x"0c738c08", +9423 => x"ff8c050c", +9424 => x"8c08ff8c", +9425 => x"05088c08", +9426 => x"ff940508", +9427 => x"7012708c", +9428 => x"08ff8405", +9429 => x"0c525454", +9430 => x"810b8c08", +9431 => x"fefc050c", +9432 => x"8c08ff84", +9433 => x"05088c08", +9434 => x"ff8c0508", +9435 => x"54547274", +9436 => x"260b0b0b", +9437 => x"0b893880", +9438 => x"0b8c08fe", +9439 => x"fc050c8c", +9440 => x"08ff8805", +9441 => x"088c08ff", +9442 => x"90050870", +9443 => x"12708c08", +9444 => x"ff80050c", +9445 => x"8c08ff80", +9446 => x"05088c08", +9447 => x"fefc0508", +9448 => x"11708c08", +9449 => x"ff80050c", +9450 => x"53515254", +9451 => x"548c08ff", +9452 => x"8005088c", +9453 => x"08ff8405", +9454 => x"08555372", +9455 => x"8c08ffa8", +9456 => x"050c738c", +9457 => x"08ffac05", +9458 => x"0c8c08c0", +9459 => x"05088811", +9460 => x"08ff0588", +9461 => x"120c5388", +9462 => x"0a538054", +9463 => x"728c08ff", +9464 => x"b0050c73", +9465 => x"8c08ffb4", +9466 => x"050c8053", +9467 => x"8054728c", +9468 => x"08ff9805", +9469 => x"0c738c08", +9470 => x"ff9c050c", +9471 => x"8c08ffb0", +9472 => x"0508708c", +9473 => x"08ffb405", +9474 => x"08075153", +9475 => x"72802e0b", +9476 => x"0b0b849f", +9477 => x"388c08ff", +9478 => x"a005088c", +9479 => x"08ffa805", +9480 => x"08260b0b", +9481 => x"0b829838", +9482 => x"8c08ffa0", +9483 => x"05088c08", +9484 => x"ffa80508", +9485 => x"2e098106", +9486 => x"0b0b0b0b", +9487 => x"94388c08", +9488 => x"ffa40508", +9489 => x"8c08ffac", +9490 => x"0508260b", +9491 => x"0b0b81ef", +9492 => x"388c08ff", +9493 => x"9805088c", +9494 => x"08ffb005", +9495 => x"08078c08", +9496 => x"ff9c0508", +9497 => x"8c08ffb4", +9498 => x"05080755", +9499 => x"53728c08", +9500 => x"ff98050c", +9501 => x"738c08ff", +9502 => x"9c050c8c", +9503 => x"08ffa805", +9504 => x"088c08ff", +9505 => x"ac050855", +9506 => x"53728c08", +9507 => x"fef4050c", +9508 => x"738c08fe", +9509 => x"f8050c8c", +9510 => x"08ffa005", +9511 => x"088c08ff", +9512 => x"a4050855", +9513 => x"53728c08", +9514 => x"feec050c", +9515 => x"738c08fe", +9516 => x"f0050c8c", +9517 => x"08fef805", +9518 => x"088c08fe", +9519 => x"f0050871", +9520 => x"7131708c", +9521 => x"08fee805", +9522 => x"0c525454", +9523 => x"810b8c08", +9524 => x"fee0050c", +9525 => x"8c08fee8", +9526 => x"05088c08", +9527 => x"fef80508", +9528 => x"54547373", +9529 => x"260b0b0b", +9530 => x"0b893880", +9531 => x"0b8c08fe", +9532 => x"e0050c8c", +9533 => x"08fef405", +9534 => x"088c08fe", +9535 => x"ec050871", +9536 => x"7131708c", +9537 => x"08fee405", +9538 => x"0c8c08fe", +9539 => x"e4050870", +9540 => x"8c08fee0", +9541 => x"05083170", +9542 => x"8c08fee4", +9543 => x"050c5351", +9544 => x"5254548c", +9545 => x"08fee405", +9546 => x"088c08fe", +9547 => x"e8050855", +9548 => x"53728c08", +9549 => x"ffa8050c", +9550 => x"738c08ff", +9551 => x"ac050c8c", +9552 => x"08ffb005", +9553 => x"089f2b8c", +9554 => x"08ffb405", +9555 => x"08812a70", +9556 => x"72078c08", +9557 => x"ffb00508", +9558 => x"812a5656", +9559 => x"5656728c", +9560 => x"08ffb005", +9561 => x"0c738c08", +9562 => x"ffb4050c", +9563 => x"8c08ffa8", +9564 => x"05088c08", +9565 => x"ffac0508", +9566 => x"5553728c", +9567 => x"08fed805", +9568 => x"0c738c08", +9569 => x"fedc050c", +9570 => x"8c08fed8", +9571 => x"05088c08", +9572 => x"fedc0508", +9573 => x"5553728c", +9574 => x"08fed005", +9575 => x"0c738c08", +9576 => x"fed4050c", +9577 => x"8c08fed4", +9578 => x"05088c08", +9579 => x"fedc0508", +9580 => x"7012708c", +9581 => x"08fecc05", +9582 => x"0c525454", +9583 => x"810b8c08", +9584 => x"fec4050c", +9585 => x"8c08fecc", +9586 => x"05088c08", +9587 => x"fed40508", +9588 => x"54547274", +9589 => x"260b0b0b", +9590 => x"0b893880", +9591 => x"0b8c08fe", +9592 => x"c4050c8c", +9593 => x"08fed005", +9594 => x"088c08fe", +9595 => x"d8050870", +9596 => x"12708c08", +9597 => x"fec8050c", +9598 => x"8c08fec8", +9599 => x"05088c08", +9600 => x"fec40508", +9601 => x"11708c08", +9602 => x"fec8050c", +9603 => x"53515254", +9604 => x"548c08fe", +9605 => x"c805088c", +9606 => x"08fecc05", +9607 => x"08555372", +9608 => x"8c08ffa8", +9609 => x"050c738c", +9610 => x"08ffac05", +9611 => x"0c0b0b0b", +9612 => x"fbca398c", +9613 => x"08ff9805", +9614 => x"08800670", +9615 => x"8c08febc", +9616 => x"050c8c08", +9617 => x"ff9c0508", +9618 => x"81ff0670", +9619 => x"8c08fec0", +9620 => x"050c5454", +9621 => x"8c08febc", +9622 => x"05088c08", +9623 => x"fec00508", +9624 => x"5553728c", +9625 => x"08febc05", +9626 => x"0c738c08", +9627 => x"fec0050c", +9628 => x"8c08febc", +9629 => x"05085473", +9630 => x"0b0b0b83", +9631 => x"d0388c08", +9632 => x"fec00508", +9633 => x"53728180", +9634 => x"2e098106", +9635 => x"0b0b0b83", +9636 => x"bc388c08", +9637 => x"ff980508", +9638 => x"982b8c08", +9639 => x"ff9c0508", +9640 => x"882a7072", +9641 => x"078c08ff", +9642 => x"98050888", +9643 => x"2a718106", +9644 => x"51565656", +9645 => x"5672802e", +9646 => x"0b0b0b81", +9647 => x"bf388c08", +9648 => x"ff980508", +9649 => x"8c08ff9c", +9650 => x"05085553", +9651 => x"728c08fe", +9652 => x"b4050c73", +9653 => x"8c08feb8", +9654 => x"050c8053", +9655 => x"81805472", +9656 => x"8c08feac", +9657 => x"050c738c", +9658 => x"08feb005", +9659 => x"0c8c08fe", +9660 => x"b805088c", +9661 => x"08feb005", +9662 => x"08701270", +9663 => x"8c08fea8", +9664 => x"050c5254", +9665 => x"54810b8c", +9666 => x"08fea005", +9667 => x"0c8c08fe", +9668 => x"a805088c", +9669 => x"08feb805", +9670 => x"08545472", +9671 => x"74260b0b", +9672 => x"0b0b8938", +9673 => x"800b8c08", +9674 => x"fea0050c", +9675 => x"8c08feb4", +9676 => x"05088c08", +9677 => x"feac0508", +9678 => x"7012708c", +9679 => x"08fea405", +9680 => x"0c8c08fe", +9681 => x"a405088c", +9682 => x"08fea005", +9683 => x"0811708c", +9684 => x"08fea405", +9685 => x"0c535152", +9686 => x"54548c08", +9687 => x"fea40508", +9688 => x"8c08fea8", +9689 => x"05085553", +9690 => x"728c08ff", +9691 => x"98050c73", +9692 => x"8c08ff9c", +9693 => x"050c0b0b", +9694 => x"0b81d239", +9695 => x"8c08ffa8", +9696 => x"0508708c", +9697 => x"08ffac05", +9698 => x"08075153", +9699 => x"72802e0b", +9700 => x"0b0b81b9", +9701 => x"388c08ff", +9702 => x"9805088c", +9703 => x"08ff9c05", +9704 => x"08555372", +9705 => x"8c08fe98", +9706 => x"050c738c", +9707 => x"08fe9c05", +9708 => x"0c805381", +9709 => x"8054728c", +9710 => x"08fe9005", +9711 => x"0c738c08", +9712 => x"fe94050c", +9713 => x"8c08fe9c", +9714 => x"05088c08", +9715 => x"fe940508", +9716 => x"7012708c", +9717 => x"08fe8c05", +9718 => x"0c525454", +9719 => x"810b8c08", +9720 => x"fe84050c", +9721 => x"8c08fe8c", +9722 => x"05088c08", +9723 => x"fe9c0508", +9724 => x"54547274", +9725 => x"260b0b0b", +9726 => x"0b893880", +9727 => x"0b8c08fe", +9728 => x"84050c8c", +9729 => x"08fe9805", +9730 => x"088c08fe", +9731 => x"90050870", +9732 => x"12708c08", +9733 => x"fe88050c", +9734 => x"8c08fe88", +9735 => x"05088c08", +9736 => x"fe840508", +9737 => x"11708c08", +9738 => x"fe88050c", +9739 => x"53515254", +9740 => x"548c08fe", +9741 => x"8805088c", +9742 => x"08fe8c05", +9743 => x"08555372", +9744 => x"8c08ff98", +9745 => x"050c738c", +9746 => x"08ff9c05", +9747 => x"0c8c08c0", +9748 => x"0508558c", +9749 => x"08ff9805", +9750 => x"088c08ff", +9751 => x"9c050855", +9752 => x"53728c16", +9753 => x"0c739016", +9754 => x"0c8c08c0", +9755 => x"05088c08", +9756 => x"ffb8050c", +9757 => x"8c08ffb8", +9758 => x"0508708c", +9759 => x"08d4050c", +9760 => x"8c08d405", +9761 => x"08538c08", +9762 => x"88050852", +9763 => x"530b0b0b", +9764 => x"9c863f8c", +9765 => x"08880508", +9766 => x"800c80c6", +9767 => x"3d0d8c0c", +9768 => x"048c0802", +9769 => x"8c0c700b", +9770 => x"0b82f4b8", +9771 => x"70800c51", +9772 => x"508c0c04", +9773 => x"8c08028c", +9774 => x"0c707080", +9775 => x"0b8c08fc", +9776 => x"050c8c08", +9777 => x"88050851", +9778 => x"7008822e", +9779 => x"0981060b", +9780 => x"0b0b0b88", +9781 => x"38810b8c", +9782 => x"08fc050c", +9783 => x"8c08fc05", +9784 => x"0870800c", +9785 => x"5150508c", +9786 => x"0c048c08", +9787 => x"028c0c70", +9788 => x"70800b8c", +9789 => x"08fc050c", +9790 => x"8c088805", +9791 => x"08517008", +9792 => x"842e0981", +9793 => x"060b0b0b", +9794 => x"0b883881", +9795 => x"0b8c08fc", +9796 => x"050c8c08", +9797 => x"fc050870", +9798 => x"800c5150", +9799 => x"508c0c04", +9800 => x"8c08028c", +9801 => x"0c707080", +9802 => x"0b8c08fc", +9803 => x"050c8c08", +9804 => x"88050851", +9805 => x"7008802e", +9806 => x"0b0b0b0b", +9807 => x"97388c08", +9808 => x"88050851", +9809 => x"7008812e", +9810 => x"0b0b0b0b", +9811 => x"87380b0b", +9812 => x"0b0b8839", +9813 => x"810b8c08", +9814 => x"fc050c8c", +9815 => x"08fc0508", +9816 => x"70800c51", +9817 => x"50508c0c", +9818 => x"048c0802", +9819 => x"8c0cee3d", +9820 => x"0d8c0888", +9821 => x"05088c08", +9822 => x"8c050855", +9823 => x"53728c08", +9824 => x"d0050c73", +9825 => x"8c08d405", +9826 => x"0c8c0890", +9827 => x"05088c08", +9828 => x"94050855", +9829 => x"53728c08", +9830 => x"c8050c73", +9831 => x"8c08cc05", +9832 => x"0c8c08ec", +9833 => x"0570538c", +9834 => x"08d00570", +9835 => x"5351530b", +9836 => x"0b0baba6", +9837 => x"3f8c08d8", +9838 => x"0570538c", +9839 => x"08c80570", +9840 => x"5351530b", +9841 => x"0b0bab92", +9842 => x"3f8c08ec", +9843 => x"05705253", +9844 => x"0b0b0b80", +9845 => x"df3f8008", +9846 => x"53720b0b", +9847 => x"0b0b9e38", +9848 => x"8c08d805", +9849 => x"7052530b", +9850 => x"0b0b80c8", +9851 => x"3f800853", +9852 => x"720b0b0b", +9853 => x"0b87380b", +9854 => x"0b0b0b8e", +9855 => x"39810b8c", +9856 => x"08c4050c", +9857 => x"0b0b0b0b", +9858 => x"9e398c08", +9859 => x"d8057053", +9860 => x"8c08ec05", +9861 => x"70535153", +9862 => x"0b0b0bae", +9863 => x"c53f8008", +9864 => x"708c08c4", +9865 => x"050c538c", +9866 => x"08c40508", +9867 => x"800c943d", +9868 => x"0d8c0c04", +9869 => x"8c08028c", +9870 => x"0c707080", +9871 => x"0b8c08fc", +9872 => x"050c8c08", +9873 => x"88050851", +9874 => x"7008802e", +9875 => x"0b0b0b0b", +9876 => x"97388c08", +9877 => x"88050851", +9878 => x"7008812e", +9879 => x"0b0b0b0b", +9880 => x"87380b0b", +9881 => x"0b0b8839", +9882 => x"810b8c08", +9883 => x"fc050c8c", +9884 => x"08fc0508", +9885 => x"70800c51", +9886 => x"50508c0c", +9887 => x"048c0802", +9888 => x"8c0cee3d", +9889 => x"0d8c0888", +9890 => x"05088c08", +9891 => x"8c050855", +9892 => x"53728c08", +9893 => x"d0050c73", +9894 => x"8c08d405", +9895 => x"0c8c0890", +9896 => x"05088c08", +9897 => x"94050855", +9898 => x"53728c08", +9899 => x"c8050c73", +9900 => x"8c08cc05", +9901 => x"0c8c08ec", +9902 => x"0570538c", +9903 => x"08d00570", +9904 => x"5351530b", +9905 => x"0b0ba992", +9906 => x"3f8c08d8", +9907 => x"0570538c", +9908 => x"08c80570", +9909 => x"5351530b", +9910 => x"0b0ba8fe", +9911 => x"3f8c08ec", +9912 => x"05705253", +9913 => x"0b0b0b80", +9914 => x"df3f8008", +9915 => x"53720b0b", +9916 => x"0b0b9e38", +9917 => x"8c08d805", +9918 => x"7052530b", +9919 => x"0b0b80c8", +9920 => x"3f800853", +9921 => x"720b0b0b", +9922 => x"0b87380b", +9923 => x"0b0b0b8e", +9924 => x"39810b8c", +9925 => x"08c4050c", +9926 => x"0b0b0b0b", +9927 => x"9e398c08", +9928 => x"d8057053", +9929 => x"8c08ec05", +9930 => x"70535153", +9931 => x"0b0b0bac", +9932 => x"b13f8008", +9933 => x"708c08c4", +9934 => x"050c538c", +9935 => x"08c40508", +9936 => x"800c943d", +9937 => x"0d8c0c04", +9938 => x"8c08028c", +9939 => x"0c707080", +9940 => x"0b8c08fc", +9941 => x"050c8c08", +9942 => x"88050851", +9943 => x"7008802e", +9944 => x"0b0b0b0b", +9945 => x"97388c08", +9946 => x"88050851", +9947 => x"7008812e", +9948 => x"0b0b0b0b", +9949 => x"87380b0b", +9950 => x"0b0b8839", +9951 => x"810b8c08", +9952 => x"fc050c8c", +9953 => x"08fc0508", +9954 => x"70800c51", +9955 => x"50508c0c", +9956 => x"048c0802", +9957 => x"8c0cee3d", +9958 => x"0d8c0888", +9959 => x"05088c08", +9960 => x"8c050855", +9961 => x"53728c08", +9962 => x"d0050c73", +9963 => x"8c08d405", +9964 => x"0c8c0890", +9965 => x"05088c08", +9966 => x"94050855", +9967 => x"53728c08", +9968 => x"c8050c73", +9969 => x"8c08cc05", +9970 => x"0c8c08ec", +9971 => x"0570538c", +9972 => x"08d00570", +9973 => x"5351530b", +9974 => x"0b0ba6fe", +9975 => x"3f8c08d8", +9976 => x"0570538c", +9977 => x"08c80570", +9978 => x"5351530b", +9979 => x"0b0ba6ea", +9980 => x"3f8c08ec", +9981 => x"05705253", +9982 => x"0b0b0b80", +9983 => x"df3f8008", +9984 => x"53720b0b", +9985 => x"0b0b9e38", +9986 => x"8c08d805", +9987 => x"7052530b", +9988 => x"0b0b80c8", +9989 => x"3f800853", +9990 => x"720b0b0b", +9991 => x"0b87380b", +9992 => x"0b0b0b8e", +9993 => x"39ff0b8c", +9994 => x"08c4050c", +9995 => x"0b0b0b0b", +9996 => x"9e398c08", +9997 => x"d8057053", +9998 => x"8c08ec05", +9999 => x"70535153", +10000 => x"0b0b0baa", +10001 => x"9d3f8008", +10002 => x"708c08c4", +10003 => x"050c538c", +10004 => x"08c40508", +10005 => x"800c943d", +10006 => x"0d8c0c04", +10007 => x"8c08028c", +10008 => x"0c707080", +10009 => x"0b8c08fc", +10010 => x"050c8c08", +10011 => x"88050851", +10012 => x"7008802e", +10013 => x"0b0b0b0b", +10014 => x"97388c08", +10015 => x"88050851", +10016 => x"7008812e", +10017 => x"0b0b0b0b", +10018 => x"87380b0b", +10019 => x"0b0b8839", +10020 => x"810b8c08", +10021 => x"fc050c8c", +10022 => x"08fc0508", +10023 => x"70800c51", +10024 => x"50508c0c", +10025 => x"048c0802", +10026 => x"8c0cee3d", +10027 => x"0d8c0888", +10028 => x"05088c08", +10029 => x"8c050855", +10030 => x"53728c08", +10031 => x"d0050c73", +10032 => x"8c08d405", +10033 => x"0c8c0890", +10034 => x"05088c08", +10035 => x"94050855", +10036 => x"53728c08", +10037 => x"c8050c73", +10038 => x"8c08cc05", +10039 => x"0c8c08ec", +10040 => x"0570538c", +10041 => x"08d00570", +10042 => x"5351530b", +10043 => x"0b0ba4ea", +10044 => x"3f8c08d8", +10045 => x"0570538c", +10046 => x"08c80570", +10047 => x"5351530b", +10048 => x"0b0ba4d6", +10049 => x"3f8c08ec", +10050 => x"05705253", +10051 => x"0b0b0b80", +10052 => x"df3f8008", +10053 => x"53720b0b", +10054 => x"0b0b9e38", +10055 => x"8c08d805", +10056 => x"7052530b", +10057 => x"0b0b80c8", +10058 => x"3f800853", +10059 => x"720b0b0b", +10060 => x"0b87380b", +10061 => x"0b0b0b8e", +10062 => x"39810b8c", +10063 => x"08c4050c", +10064 => x"0b0b0b0b", +10065 => x"9e398c08", +10066 => x"d8057053", +10067 => x"8c08ec05", +10068 => x"70535153", +10069 => x"0b0b0ba8", +10070 => x"893f8008", +10071 => x"708c08c4", +10072 => x"050c538c", +10073 => x"08c40508", +10074 => x"800c943d", +10075 => x"0d8c0c04", +10076 => x"8c08028c", +10077 => x"0c707080", +10078 => x"0b8c08fc", +10079 => x"050c8c08", +10080 => x"88050851", +10081 => x"7008802e", +10082 => x"0b0b0b0b", +10083 => x"97388c08", +10084 => x"88050851", +10085 => x"7008812e", +10086 => x"0b0b0b0b", +10087 => x"87380b0b", +10088 => x"0b0b8839", +10089 => x"810b8c08", +10090 => x"fc050c8c", +10091 => x"08fc0508", +10092 => x"70800c51", +10093 => x"50508c0c", +10094 => x"048c0802", +10095 => x"8c0cee3d", +10096 => x"0d8c0888", +10097 => x"05088c08", +10098 => x"8c050855", +10099 => x"53728c08", +10100 => x"d0050c73", +10101 => x"8c08d405", +10102 => x"0c8c0890", +10103 => x"05088c08", +10104 => x"94050855", +10105 => x"53728c08", +10106 => x"c8050c73", +10107 => x"8c08cc05", +10108 => x"0c8c08ec", +10109 => x"0570538c", +10110 => x"08d00570", +10111 => x"5351530b", +10112 => x"0b0ba2d6", +10113 => x"3f8c08d8", +10114 => x"0570538c", +10115 => x"08c80570", +10116 => x"5351530b", +10117 => x"0b0ba2c2", +10118 => x"3f8c08ec", +10119 => x"05705253", +10120 => x"0b0b0b80", +10121 => x"df3f8008", +10122 => x"53720b0b", +10123 => x"0b0b9e38", +10124 => x"8c08d805", +10125 => x"7052530b", +10126 => x"0b0b80c8", +10127 => x"3f800853", +10128 => x"720b0b0b", +10129 => x"0b87380b", +10130 => x"0b0b0b8e", +10131 => x"39810b8c", +10132 => x"08c4050c", +10133 => x"0b0b0b0b", +10134 => x"9e398c08", +10135 => x"d8057053", +10136 => x"8c08ec05", +10137 => x"70535153", +10138 => x"0b0b0ba5", +10139 => x"f53f8008", +10140 => x"708c08c4", +10141 => x"050c538c", +10142 => x"08c40508", +10143 => x"800c943d", +10144 => x"0d8c0c04", +10145 => x"8c08028c", +10146 => x"0c707080", +10147 => x"0b8c08fc", +10148 => x"050c8c08", +10149 => x"88050851", +10150 => x"7008802e", +10151 => x"0b0b0b0b", +10152 => x"97388c08", +10153 => x"88050851", +10154 => x"7008812e", +10155 => x"0b0b0b0b", +10156 => x"87380b0b", +10157 => x"0b0b8839", +10158 => x"810b8c08", +10159 => x"fc050c8c", +10160 => x"08fc0508", +10161 => x"70800c51", +10162 => x"50508c0c", +10163 => x"048c0802", +10164 => x"8c0cf63d", +10165 => x"0d830b8c", +10166 => x"08ec050c", +10167 => x"800b8c08", +10168 => x"e8050c8c", +10169 => x"088c0508", +10170 => x"80250b0b", +10171 => x"0b0b8838", +10172 => x"810b8c08", +10173 => x"e8050c8c", +10174 => x"08e80508", +10175 => x"8c08f005", +10176 => x"0c8c088c", +10177 => x"05080b0b", +10178 => x"0b0b8e38", +10179 => x"820b8c08", +10180 => x"ec050c0b", +10181 => x"0b0b81b5", +10182 => x"39bc0b8c", +10183 => x"08f4050c", +10184 => x"8c08f005", +10185 => x"08802e0b", +10186 => x"0b0b80c9", +10187 => x"388c088c", +10188 => x"0508810a", +10189 => x"2e098106", +10190 => x"0b0b0b0b", +10191 => x"9b388f83", +10192 => x"0a53800b", +10193 => x"8c088805", +10194 => x"08565472", +10195 => x"750c7384", +10196 => x"160c0b0b", +10197 => x"0b818939", +10198 => x"8c088c05", +10199 => x"0830708c", +10200 => x"08fc050c", +10201 => x"709f2c70", +10202 => x"8c08f805", +10203 => x"0c51530b", +10204 => x"0b0b0b97", +10205 => x"398c088c", +10206 => x"0508708c", +10207 => x"08fc050c", +10208 => x"709f2c70", +10209 => x"8c08f805", +10210 => x"0c51538c", +10211 => x"08f80508", +10212 => x"f00a260b", +10213 => x"0b0b0bb5", +10214 => x"388c08fc", +10215 => x"05089f2a", +10216 => x"8c08f805", +10217 => x"08107072", +10218 => x"078c08f8", +10219 => x"050c8c08", +10220 => x"fc050810", +10221 => x"8c08fc05", +10222 => x"0c8c08f4", +10223 => x"0508ff05", +10224 => x"8c08f405", +10225 => x"0c54540b", +10226 => x"0b0bffbf", +10227 => x"398c08ec", +10228 => x"0570538c", +10229 => x"08880508", +10230 => x"52530b0b", +10231 => x"0b8db93f", +10232 => x"8c088805", +10233 => x"08800c8c", +10234 => x"3d0d8c0c", +10235 => x"048c0802", +10236 => x"8c0cec3d", +10237 => x"0d8c0888", +10238 => x"05088c08", +10239 => x"8c050857", +10240 => x"55748c08", +10241 => x"e0050c75", +10242 => x"8c08e405", +10243 => x"0c8c08ec", +10244 => x"0570538c", +10245 => x"08e00570", +10246 => x"5351550b", +10247 => x"0b0b9eba", +10248 => x"3f8c08ec", +10249 => x"05705255", +10250 => x"0b0b0b83", +10251 => x"d93f8008", +10252 => x"5574802e", +10253 => x"0b0b0b0b", +10254 => x"8e38800b", +10255 => x"8c08d405", +10256 => x"0c0b0b0b", +10257 => x"82b4398c", +10258 => x"08ec0570", +10259 => x"52550b0b", +10260 => x"0b82ea3f", +10261 => x"80085574", +10262 => x"802e0b0b", +10263 => x"0b0b8e38", +10264 => x"800b8c08", +10265 => x"d4050c0b", +10266 => x"0b0b828e", +10267 => x"398c08ec", +10268 => x"05705255", +10269 => x"0b0b0b82", +10270 => x"8e3f8008", +10271 => x"5574802e", +10272 => x"0b0b0b0b", +10273 => x"b4388c08", +10274 => x"f0050880", +10275 => x"2e0b0b0b", +10276 => x"0b8f3881", +10277 => x"0a0b8c08", +10278 => x"d0050c0b", +10279 => x"0b0b0b89", +10280 => x"39fe0a0b", +10281 => x"8c08d005", +10282 => x"0c8c08d0", +10283 => x"05088c08", +10284 => x"d4050c0b", +10285 => x"0b0b81c2", +10286 => x"398c08f4", +10287 => x"05088025", +10288 => x"0b0b0b0b", +10289 => x"8e38800b", +10290 => x"8c08d405", +10291 => x"0c0b0b0b", +10292 => x"81a8399e", +10293 => x"0b8c08f4", +10294 => x"0508250b", +10295 => x"0b0b0bb4", +10296 => x"388c08f0", +10297 => x"0508802e", +10298 => x"0b0b0b0b", +10299 => x"8f38810a", +10300 => x"0b8c08cc", +10301 => x"050c0b0b", +10302 => x"0b0b8939", +10303 => x"fe0a0b8c", +10304 => x"08cc050c", +10305 => x"8c08cc05", +10306 => x"088c08d4", +10307 => x"050c0b0b", +10308 => x"0b80e739", +10309 => x"bc0b8c08", +10310 => x"f4050831", +10311 => x"8c08d805", +10312 => x"71565855", +10313 => x"8c08f805", +10314 => x"088c08fc", +10315 => x"05085755", +10316 => x"74527553", +10317 => x"76510b0b", +10318 => x"0b88d53f", +10319 => x"8c08d805", +10320 => x"088c08dc", +10321 => x"0508708c", +10322 => x"08e8050c", +10323 => x"8c08e805", +10324 => x"088c08c8", +10325 => x"050c5755", +10326 => x"8c08f005", +10327 => x"08802e0b", +10328 => x"0b0b0b8c", +10329 => x"388c08c8", +10330 => x"0508308c", +10331 => x"08c8050c", +10332 => x"8c08c805", +10333 => x"088c08d4", +10334 => x"050c8c08", +10335 => x"d4050880", +10336 => x"0c963d0d", +10337 => x"8c0c048c", +10338 => x"08028c0c", +10339 => x"7070800b", +10340 => x"8c08fc05", +10341 => x"0c8c0888", +10342 => x"05085170", +10343 => x"08842e09", +10344 => x"81060b0b", +10345 => x"0b0b8838", +10346 => x"810b8c08", +10347 => x"fc050c8c", +10348 => x"08fc0508", +10349 => x"70800c51", +10350 => x"50508c0c", +10351 => x"048c0802", +10352 => x"8c0c7070", +10353 => x"800b8c08", +10354 => x"fc050c8c", +10355 => x"08880508", +10356 => x"51700880", +10357 => x"2e0b0b0b", +10358 => x"0b97388c", +10359 => x"08880508", +10360 => x"51700881", +10361 => x"2e0b0b0b", +10362 => x"0b87380b", +10363 => x"0b0b0b88", +10364 => x"39810b8c", +10365 => x"08fc050c", +10366 => x"8c08fc05", +10367 => x"0870800c", +10368 => x"5150508c", +10369 => x"0c048c08", +10370 => x"028c0c70", +10371 => x"70800b8c", +10372 => x"08fc050c", +10373 => x"8c088805", +10374 => x"08517008", +10375 => x"822e0981", +10376 => x"060b0b0b", +10377 => x"0b883881", +10378 => x"0b8c08fc", +10379 => x"050c8c08", +10380 => x"fc050870", +10381 => x"800c5150", +10382 => x"508c0c04", +10383 => x"8c08028c", +10384 => x"0c707070", +10385 => x"7080538c", +10386 => x"088c0508", +10387 => x"528c0888", +10388 => x"0508510b", +10389 => x"0bfdccbf", +10390 => x"3f800870", +10391 => x"800c5450", +10392 => x"5050508c", +10393 => x"0c048c08", +10394 => x"028c0c70", +10395 => x"70707081", +10396 => x"538c088c", +10397 => x"0508528c", +10398 => x"08880508", +10399 => x"510b0bfd", +10400 => x"cc953f80", +10401 => x"0870800c", +10402 => x"54505050", +10403 => x"508c0c04", +10404 => x"8c08028c", +10405 => x"0c707080", +10406 => x"0b8c08fc", +10407 => x"050c8c08", +10408 => x"88050881", +10409 => x"06ff1170", +10410 => x"09708c08", +10411 => x"8c050806", +10412 => x"8c08fc05", +10413 => x"08118c08", +10414 => x"fc050c8c", +10415 => x"08880508", +10416 => x"812a8c08", +10417 => x"88050c8c", +10418 => x"088c0508", +10419 => x"108c088c", +10420 => x"050c5151", +10421 => x"51518c08", +10422 => x"88050880", +10423 => x"2e0b0b0b", +10424 => x"0b87380b", +10425 => x"0b0bffb6", +10426 => x"398c08fc", +10427 => x"05087080", +10428 => x"0c515050", +10429 => x"8c0c048c", +10430 => x"08028c0c", +10431 => x"eb3d0d80", +10432 => x"0b8c08f0", +10433 => x"050c800b", +10434 => x"8c08f405", +10435 => x"0c8c088c", +10436 => x"05088c08", +10437 => x"90050856", +10438 => x"54738c08", +10439 => x"f0050c74", +10440 => x"8c08f405", +10441 => x"0c8c08f8", +10442 => x"058c08f0", +10443 => x"05565688", +10444 => x"70547553", +10445 => x"7652540b", +10446 => x"0bfdcccf", +10447 => x"3f800b8c", +10448 => x"08e8050c", +10449 => x"800b8c08", +10450 => x"ec050c8c", +10451 => x"08940508", +10452 => x"8c089805", +10453 => x"08565473", +10454 => x"8c08e805", +10455 => x"0c748c08", +10456 => x"ec050c8c", +10457 => x"08f0058c", +10458 => x"08e80556", +10459 => x"56887054", +10460 => x"75537652", +10461 => x"540b0bfd", +10462 => x"cc913f80", +10463 => x"0b8c08e8", +10464 => x"050c800b", +10465 => x"8c08ec05", +10466 => x"0c8c08fc", +10467 => x"050883ff", +10468 => x"ff068c08", +10469 => x"cc050c8c", +10470 => x"08fc0508", +10471 => x"902a8c08", +10472 => x"c4050c8c", +10473 => x"08f40508", +10474 => x"83ffff06", +10475 => x"8c08c805", +10476 => x"0c8c08f4", +10477 => x"0508902a", +10478 => x"8c08c005", +10479 => x"0c8c08cc", +10480 => x"05088c08", +10481 => x"c8050829", +10482 => x"708c08dc", +10483 => x"050c8c08", +10484 => x"cc05088c", +10485 => x"08c00508", +10486 => x"29708c08", +10487 => x"d8050c8c", +10488 => x"08c40508", +10489 => x"8c08c805", +10490 => x"0829708c", +10491 => x"08d4050c", +10492 => x"8c08c405", +10493 => x"088c08c0", +10494 => x"05082970", +10495 => x"8c08d005", +10496 => x"0c8c08dc", +10497 => x"0508902a", +10498 => x"8c08d805", +10499 => x"08118c08", +10500 => x"d8050c8c", +10501 => x"08d80508", +10502 => x"8c08d405", +10503 => x"08058c08", +10504 => x"d8050c51", +10505 => x"51515154", +10506 => x"8c08d805", +10507 => x"088c08d4", +10508 => x"0508270b", +10509 => x"0b0b0b8f", +10510 => x"388c08d0", +10511 => x"05088480", +10512 => x"80058c08", +10513 => x"d0050c8c", +10514 => x"08d80508", +10515 => x"902a8c08", +10516 => x"d0050811", +10517 => x"8c08e005", +10518 => x"0c8c08d8", +10519 => x"050883ff", +10520 => x"ff067090", +10521 => x"2b8c08dc", +10522 => x"050883ff", +10523 => x"ff067012", +10524 => x"8c08e405", +10525 => x"0c525751", +10526 => x"548c08e0", +10527 => x"05088c08", +10528 => x"e4050856", +10529 => x"54738c08", +10530 => x"e8050c74", +10531 => x"8c08ec05", +10532 => x"0c8c08fc", +10533 => x"05088c08", +10534 => x"f0050829", +10535 => x"8c08f805", +10536 => x"088c08f4", +10537 => x"05082970", +10538 => x"128c08e8", +10539 => x"0508118c", +10540 => x"08e8050c", +10541 => x"5155558c", +10542 => x"08e80508", +10543 => x"8c08ec05", +10544 => x"088c0888", +10545 => x"05085856", +10546 => x"5473760c", +10547 => x"7484170c", +10548 => x"8c088805", +10549 => x"08800c97", +10550 => x"3d0d8c0c", +10551 => x"048c0802", +10552 => x"8c0cf63d", +10553 => x"0d800b8c", +10554 => x"08f0050c", +10555 => x"800b8c08", +10556 => x"f4050c8c", +10557 => x"088c0508", +10558 => x"8c089005", +10559 => x"08565473", +10560 => x"8c08f005", +10561 => x"0c748c08", +10562 => x"f4050c8c", +10563 => x"08f8058c", +10564 => x"08f00556", +10565 => x"56887054", +10566 => x"75537652", +10567 => x"540b0bfd", +10568 => x"c8e93f80", +10569 => x"0b8c08f0", +10570 => x"050c800b", +10571 => x"8c08f405", +10572 => x"0c8c08f8", +10573 => x"0508308c", +10574 => x"08ec050c", +10575 => x"8c08fc05", +10576 => x"08802e0b", +10577 => x"0b0b0b8d", +10578 => x"388c08ec", +10579 => x"0508ff05", +10580 => x"8c08ec05", +10581 => x"0c8c08ec", +10582 => x"05088c08", +10583 => x"f0050c8c", +10584 => x"08fc0508", +10585 => x"308c08f4", +10586 => x"050c8c08", +10587 => x"f005088c", +10588 => x"08f40508", +10589 => x"8c088805", +10590 => x"08585654", +10591 => x"73760c74", +10592 => x"84170c8c", +10593 => x"08880508", +10594 => x"800c8c3d", +10595 => x"0d8c0c04", +10596 => x"8c08028c", +10597 => x"0cf53d0d", +10598 => x"8c089405", +10599 => x"080b0b0b", +10600 => x"0ba0388c", +10601 => x"088c0508", +10602 => x"8c089005", +10603 => x"088c0888", +10604 => x"05085856", +10605 => x"5473760c", +10606 => x"7484170c", +10607 => x"0b0b0b81", +10608 => x"ca39800b", +10609 => x"8c08f005", +10610 => x"0c800b8c", +10611 => x"08f4050c", +10612 => x"8c088c05", +10613 => x"088c0890", +10614 => x"05085654", +10615 => x"738c08f0", +10616 => x"050c748c", +10617 => x"08f4050c", +10618 => x"8c08f805", +10619 => x"8c08f005", +10620 => x"56568870", +10621 => x"54755376", +10622 => x"52540b0b", +10623 => x"fdc78c3f", +10624 => x"a00b8c08", +10625 => x"94050831", +10626 => x"8c08ec05", +10627 => x"0c8c08ec", +10628 => x"05088024", +10629 => x"0b0b0b0b", +10630 => x"a138800b", +10631 => x"8c08f005", +10632 => x"0c8c08ec", +10633 => x"0508308c", +10634 => x"08f80508", +10635 => x"712a8c08", +10636 => x"f4050c54", +10637 => x"0b0b0b0b", +10638 => x"b9398c08", +10639 => x"f805088c", +10640 => x"08ec0508", +10641 => x"2b8c08e8", +10642 => x"050c8c08", +10643 => x"f805088c", +10644 => x"08940508", +10645 => x"2a8c08f0", +10646 => x"050c8c08", +10647 => x"fc05088c", +10648 => x"08940508", +10649 => x"2a708c08", +10650 => x"e8050807", +10651 => x"8c08f405", +10652 => x"0c548c08", +10653 => x"f005088c", +10654 => x"08f40508", +10655 => x"8c088805", +10656 => x"08585654", +10657 => x"73760c74", +10658 => x"84170c8c", +10659 => x"08880508", +10660 => x"800c8d3d", +10661 => x"0d8c0c04", +10662 => x"8c08028c", +10663 => x"0cc73d0d", +10664 => x"8c088c05", +10665 => x"08559015", +10666 => x"088c1608", +10667 => x"5656748c", +10668 => x"08f0050c", +10669 => x"758c08f4", +10670 => x"050c8c08", +10671 => x"8c050884", +10672 => x"11088c08", +10673 => x"ec050c55", +10674 => x"800b8c08", +10675 => x"e8050c8c", +10676 => x"088c0508", +10677 => x"510b0b0b", +10678 => x"90b73f80", +10679 => x"08557480", +10680 => x"2e0b0b0b", +10681 => x"0bad388f", +10682 => x"ff0b8c08", +10683 => x"e8050c8c", +10684 => x"08f00508", +10685 => x"a0808007", +10686 => x"8c08f405", +10687 => x"08800757", +10688 => x"55748c08", +10689 => x"f0050c75", +10690 => x"8c08f405", +10691 => x"0c0b0b0b", +10692 => x"8df4398c", +10693 => x"088c0508", +10694 => x"510b0b0b", +10695 => x"8fbd3f80", +10696 => x"08557480", +10697 => x"2e0b0b0b", +10698 => x"0b9f388f", +10699 => x"ff0b8c08", +10700 => x"e8050c80", +10701 => x"55805674", +10702 => x"8c08f005", +10703 => x"0c758c08", +10704 => x"f4050c0b", +10705 => x"0b0b8dbe", +10706 => x"398c088c", +10707 => x"0508510b", +10708 => x"0b0b8ed1", +10709 => x"3f800855", +10710 => x"74802e0b", +10711 => x"0b0b0b9e", +10712 => x"38800b8c", +10713 => x"08e8050c", +10714 => x"80558056", +10715 => x"748c08f0", +10716 => x"050c758c", +10717 => x"08f4050c", +10718 => x"0b0b0b8d", +10719 => x"89398c08", +10720 => x"f0050870", +10721 => x"8c08f405", +10722 => x"08075155", +10723 => x"740b0b0b", +10724 => x"0b8e3880", +10725 => x"0b8c08e8", +10726 => x"050c0b0b", +10727 => x"0b8ce739", +10728 => x"8c088c05", +10729 => x"08558815", +10730 => x"08f88225", +10731 => x"0b0b0b87", +10732 => x"af388c08", +10733 => x"8c0508f8", +10734 => x"820b8812", +10735 => x"08318c08", +10736 => x"e4050c55", +10737 => x"800b8c08", +10738 => x"e8050cb8", +10739 => x"0b8c08e4", +10740 => x"0508250b", +10741 => x"0b0b0b97", +10742 => x"38805580", +10743 => x"56748c08", +10744 => x"f0050c75", +10745 => x"8c08f405", +10746 => x"0c0b0b0b", +10747 => x"82b03980", +10748 => x"0b8c08e0", +10749 => x"050c8c08", +10750 => x"d8055780", +10751 => x"55810b8c", +10752 => x"08e40508", +10753 => x"55567452", +10754 => x"75537651", +10755 => x"0b0bfdbc", +10756 => x"ab3f8c08", +10757 => x"d805088c", +10758 => x"08dc0508", +10759 => x"5755748c", +10760 => x"08d0050c", +10761 => x"758c08d4", +10762 => x"050cff56", +10763 => x"ff57758c", +10764 => x"08c8050c", +10765 => x"768c08cc", +10766 => x"050c8c08", +10767 => x"d405088c", +10768 => x"08cc0508", +10769 => x"7012708c", +10770 => x"08c4050c", +10771 => x"52565781", +10772 => x"0b8c08ff", +10773 => x"bc050c8c", +10774 => x"08c40508", +10775 => x"8c08d405", +10776 => x"08585676", +10777 => x"76260b0b", +10778 => x"0b0b8938", +10779 => x"800b8c08", +10780 => x"ffbc050c", +10781 => x"8c08d005", +10782 => x"088c08c8", +10783 => x"05087012", +10784 => x"708c08c0", +10785 => x"050c8c08", +10786 => x"c005088c", +10787 => x"08ffbc05", +10788 => x"0811708c", +10789 => x"08c0050c", +10790 => x"8c08c005", +10791 => x"08708c08", +10792 => x"f0050806", +10793 => x"8c08c405", +10794 => x"08708c08", +10795 => x"f4050806", +10796 => x"72707207", +10797 => x"51525752", +10798 => x"5252525a", +10799 => x"52575576", +10800 => x"802e0b0b", +10801 => x"0b0b8838", +10802 => x"810b8c08", +10803 => x"e0050c8c", +10804 => x"08d8058c", +10805 => x"08e40508", +10806 => x"55578c08", +10807 => x"f005088c", +10808 => x"08f40508", +10809 => x"57557452", +10810 => x"75537651", +10811 => x"0b0b0bf9", +10812 => x"9f3f8c08", +10813 => x"d805088c", +10814 => x"08dc0508", +10815 => x"8c08e005", +10816 => x"089f2c8c", +10817 => x"08e00508", +10818 => x"71707507", +10819 => x"8c08f005", +10820 => x"0c737207", +10821 => x"8c08f405", +10822 => x"0c59595b", +10823 => x"59578c08", +10824 => x"f0050880", +10825 => x"06708c08", +10826 => x"ffb4050c", +10827 => x"8c08f405", +10828 => x"0881ff06", +10829 => x"708c08ff", +10830 => x"b8050c57", +10831 => x"558c08ff", +10832 => x"b405088c", +10833 => x"08ffb805", +10834 => x"08575574", +10835 => x"8c08ffb4", +10836 => x"050c758c", +10837 => x"08ffb805", +10838 => x"0c8c08ff", +10839 => x"b4050856", +10840 => x"750b0b0b", +10841 => x"81f8388c", +10842 => x"08ffb805", +10843 => x"08577681", +10844 => x"802e0981", +10845 => x"060b0b0b", +10846 => x"81e4388c", +10847 => x"08f00508", +10848 => x"982b8c08", +10849 => x"f4050888", +10850 => x"2a707207", +10851 => x"8c08f005", +10852 => x"08882a71", +10853 => x"81065158", +10854 => x"58585874", +10855 => x"802e0b0b", +10856 => x"0b82ef38", +10857 => x"8c08f005", +10858 => x"088c08f4", +10859 => x"05085755", +10860 => x"748c08ff", +10861 => x"ac050c75", +10862 => x"8c08ffb0", +10863 => x"050c8056", +10864 => x"81805775", +10865 => x"8c08ffa4", +10866 => x"050c768c", +10867 => x"08ffa805", +10868 => x"0c8c08ff", +10869 => x"b005088c", +10870 => x"08ffa805", +10871 => x"08701270", +10872 => x"8c08ffa0", +10873 => x"050c5256", +10874 => x"57810b8c", +10875 => x"08ff9805", +10876 => x"0c8c08ff", +10877 => x"a005088c", +10878 => x"08ffb005", +10879 => x"08585676", +10880 => x"76260b0b", +10881 => x"0b0b8938", +10882 => x"800b8c08", +10883 => x"ff98050c", +10884 => x"8c08ffac", +10885 => x"05088c08", +10886 => x"ffa40508", +10887 => x"7012708c", +10888 => x"08ff9c05", +10889 => x"0c8c08ff", +10890 => x"9c05088c", +10891 => x"08ff9805", +10892 => x"0811708c", +10893 => x"08ff9c05", +10894 => x"0c525a52", +10895 => x"57558c08", +10896 => x"ff9c0508", +10897 => x"8c08ffa0", +10898 => x"05085755", +10899 => x"748c08f0", +10900 => x"050c758c", +10901 => x"08f4050c", +10902 => x"0b0b0b81", +10903 => x"b5398c08", +10904 => x"f005088c", +10905 => x"08f40508", +10906 => x"5856758c", +10907 => x"08ff9005", +10908 => x"0c768c08", +10909 => x"ff94050c", +10910 => x"805580ff", +10911 => x"56748c08", +10912 => x"ff88050c", +10913 => x"758c08ff", +10914 => x"8c050c8c", +10915 => x"08ff9405", +10916 => x"088c08ff", +10917 => x"8c050870", +10918 => x"12708c08", +10919 => x"ff84050c", +10920 => x"52585681", +10921 => x"0b8c08fe", +10922 => x"fc050c8c", +10923 => x"08ff8405", +10924 => x"088c08ff", +10925 => x"94050857", +10926 => x"55757526", +10927 => x"0b0b0b0b", +10928 => x"8938800b", +10929 => x"8c08fefc", +10930 => x"050c8c08", +10931 => x"ff900508", +10932 => x"8c08ff88", +10933 => x"05087012", +10934 => x"708c08ff", +10935 => x"80050c8c", +10936 => x"08ff8005", +10937 => x"088c08fe", +10938 => x"fc050811", +10939 => x"708c08ff", +10940 => x"80050c53", +10941 => x"59525657", +10942 => x"8c08ff80", +10943 => x"05088c08", +10944 => x"ff840508", +10945 => x"5755748c", +10946 => x"08f0050c", +10947 => x"758c08f4", +10948 => x"050c8c08", +10949 => x"f00508f0", +10950 => x"0a260b0b", +10951 => x"0b0b8738", +10952 => x"0b0b0b0b", +10953 => x"8d398c08", +10954 => x"e8050881", +10955 => x"058c08e8", +10956 => x"050c8c08", +10957 => x"f0050898", +10958 => x"2b8c08f4", +10959 => x"0508882a", +10960 => x"7072078c", +10961 => x"08f00508", +10962 => x"882a5858", +10963 => x"5858748c", +10964 => x"08f0050c", +10965 => x"758c08f4", +10966 => x"050c0b0b", +10967 => x"0b85a739", +10968 => x"8c088c05", +10969 => x"085587ff", +10970 => x"0b881608", +10971 => x"250b0b0b", +10972 => x"0b9f388f", +10973 => x"ff0b8c08", +10974 => x"e8050c80", +10975 => x"55805674", +10976 => x"8c08f005", +10977 => x"0c758c08", +10978 => x"f4050c0b", +10979 => x"0b0b84f6", +10980 => x"398c088c", +10981 => x"05088811", +10982 => x"0887ff05", +10983 => x"8c08e805", +10984 => x"0c8c08f0", +10985 => x"05088006", +10986 => x"708c08fe", +10987 => x"f4050c8c", +10988 => x"08f40508", +10989 => x"81ff0670", +10990 => x"8c08fef8", +10991 => x"050c5957", +10992 => x"558c08fe", +10993 => x"f405088c", +10994 => x"08fef805", +10995 => x"08575574", +10996 => x"8c08fef4", +10997 => x"050c758c", +10998 => x"08fef805", +10999 => x"0c8c08fe", +11000 => x"f4050856", +11001 => x"750b0b0b", +11002 => x"81f8388c", +11003 => x"08fef805", +11004 => x"08577681", +11005 => x"802e0981", +11006 => x"060b0b0b", +11007 => x"81e4388c", +11008 => x"08f00508", +11009 => x"982b8c08", +11010 => x"f4050888", +11011 => x"2a707207", +11012 => x"8c08f005", +11013 => x"08882a71", +11014 => x"81065158", +11015 => x"58585874", +11016 => x"802e0b0b", +11017 => x"0b82ef38", +11018 => x"8c08f005", +11019 => x"088c08f4", +11020 => x"05085755", +11021 => x"748c08fe", +11022 => x"ec050c75", +11023 => x"8c08fef0", +11024 => x"050c8056", +11025 => x"81805775", +11026 => x"8c08fee4", +11027 => x"050c768c", +11028 => x"08fee805", +11029 => x"0c8c08fe", +11030 => x"f005088c", +11031 => x"08fee805", +11032 => x"08701270", +11033 => x"8c08fee0", +11034 => x"050c5256", +11035 => x"57810b8c", +11036 => x"08fed805", +11037 => x"0c8c08fe", +11038 => x"e005088c", +11039 => x"08fef005", +11040 => x"08585676", +11041 => x"76260b0b", +11042 => x"0b0b8938", +11043 => x"800b8c08", +11044 => x"fed8050c", +11045 => x"8c08feec", +11046 => x"05088c08", +11047 => x"fee40508", +11048 => x"7012708c", +11049 => x"08fedc05", +11050 => x"0c8c08fe", +11051 => x"dc05088c", +11052 => x"08fed805", +11053 => x"0811708c", +11054 => x"08fedc05", +11055 => x"0c525a52", +11056 => x"57558c08", +11057 => x"fedc0508", +11058 => x"8c08fee0", +11059 => x"05085755", +11060 => x"748c08f0", +11061 => x"050c758c", +11062 => x"08f4050c", +11063 => x"0b0b0b81", +11064 => x"b5398c08", +11065 => x"f005088c", +11066 => x"08f40508", +11067 => x"5856758c", +11068 => x"08fed005", +11069 => x"0c768c08", +11070 => x"fed4050c", +11071 => x"805580ff", +11072 => x"56748c08", +11073 => x"fec8050c", +11074 => x"758c08fe", +11075 => x"cc050c8c", +11076 => x"08fed405", +11077 => x"088c08fe", +11078 => x"cc050870", +11079 => x"12708c08", +11080 => x"fec4050c", +11081 => x"52585681", +11082 => x"0b8c08fe", +11083 => x"bc050c8c", +11084 => x"08fec405", +11085 => x"088c08fe", +11086 => x"d4050857", +11087 => x"55757526", +11088 => x"0b0b0b0b", +11089 => x"8938800b", +11090 => x"8c08febc", +11091 => x"050c8c08", +11092 => x"fed00508", +11093 => x"8c08fec8", +11094 => x"05087012", +11095 => x"708c08fe", +11096 => x"c0050c8c", +11097 => x"08fec005", +11098 => x"088c08fe", +11099 => x"bc050811", +11100 => x"708c08fe", +11101 => x"c0050c53", +11102 => x"59525657", +11103 => x"8c08fec0", +11104 => x"05088c08", +11105 => x"fec40508", +11106 => x"5755748c", +11107 => x"08f0050c", +11108 => x"758c08f4", +11109 => x"050c8c08", +11110 => x"f00508f8", +11111 => x"0a260b0b", +11112 => x"0b0b8738", +11113 => x"0b0b0b0b", +11114 => x"b5398c08", +11115 => x"f005089f", +11116 => x"2b8c08f4", +11117 => x"0508812a", +11118 => x"7072078c", +11119 => x"08f00508", +11120 => x"812a5858", +11121 => x"5858748c", +11122 => x"08f0050c", +11123 => x"758c08f4", +11124 => x"050c8c08", +11125 => x"e8050881", +11126 => x"058c08e8", +11127 => x"050c8c08", +11128 => x"f0050898", +11129 => x"2b8c08f4", +11130 => x"0508882a", +11131 => x"7072078c", +11132 => x"08f00508", +11133 => x"882a5858", +11134 => x"5858748c", +11135 => x"08f0050c", +11136 => x"758c08f4", +11137 => x"050c8c08", +11138 => x"f00508bf", +11139 => x"ffff068c", +11140 => x"08f8050c", +11141 => x"8c08f405", +11142 => x"08ff068c", +11143 => x"08fc050c", +11144 => x"8c08e805", +11145 => x"08568070", +11146 => x"8006778f", +11147 => x"ff067094", +11148 => x"2b535a58", +11149 => x"55800b8c", +11150 => x"08f80508", +11151 => x"76078c08", +11152 => x"f8050c70", +11153 => x"8c08fc05", +11154 => x"08078c08", +11155 => x"fc050c8c", +11156 => x"08ec0508", +11157 => x"51568070", +11158 => x"80067781", +11159 => x"06709f2b", +11160 => x"535a5855", +11161 => x"800b8c08", +11162 => x"f8050876", +11163 => x"078c08f8", +11164 => x"050c708c", +11165 => x"08fc0508", +11166 => x"078c08fc", +11167 => x"050c568c", +11168 => x"08f80508", +11169 => x"8c08fc05", +11170 => x"088c0888", +11171 => x"05085957", +11172 => x"5574770c", +11173 => x"7584180c", +11174 => x"8c088805", +11175 => x"08800cbb", +11176 => x"3d0d8c0c", +11177 => x"048c0802", +11178 => x"8c0c7070", +11179 => x"800b8c08", +11180 => x"fc050c8c", +11181 => x"08880508", +11182 => x"51700882", +11183 => x"2e098106", +11184 => x"0b0b0b0b", +11185 => x"8838810b", +11186 => x"8c08fc05", +11187 => x"0c8c08fc", +11188 => x"05087080", +11189 => x"0c515050", +11190 => x"8c0c048c", +11191 => x"08028c0c", +11192 => x"7070800b", +11193 => x"8c08fc05", +11194 => x"0c8c0888", +11195 => x"05085170", +11196 => x"08842e09", +11197 => x"81060b0b", +11198 => x"0b0b8838", +11199 => x"810b8c08", +11200 => x"fc050c8c", +11201 => x"08fc0508", +11202 => x"70800c51", +11203 => x"50508c0c", +11204 => x"048c0802", +11205 => x"8c0c7070", +11206 => x"800b8c08", +11207 => x"fc050c8c", +11208 => x"08880508", +11209 => x"51700880", +11210 => x"2e0b0b0b", +11211 => x"0b97388c", +11212 => x"08880508", +11213 => x"51700881", +11214 => x"2e0b0b0b", +11215 => x"0b87380b", +11216 => x"0b0b0b88", +11217 => x"39810b8c", +11218 => x"08fc050c", +11219 => x"8c08fc05", +11220 => x"0870800c", +11221 => x"5150508c", +11222 => x"0c048c08", +11223 => x"028c0cf8", +11224 => x"3d0d8c08", +11225 => x"88050870", +11226 => x"08bfffff", +11227 => x"068c08f8", +11228 => x"050c8411", +11229 => x"08ff068c", +11230 => x"08fc050c", +11231 => x"8c088805", +11232 => x"08700894", +11233 => x"2a545451", +11234 => x"80728fff", +11235 => x"068c08f4", +11236 => x"050c8c08", +11237 => x"88050870", +11238 => x"089f2a54", +11239 => x"54518072", +11240 => x"81068c08", +11241 => x"f0050c8c", +11242 => x"088c0508", +11243 => x"8c08f005", +11244 => x"0884120c", +11245 => x"51518c08", +11246 => x"f405080b", +11247 => x"0b0b81cf", +11248 => x"388c08f8", +11249 => x"0508708c", +11250 => x"08fc0508", +11251 => x"07515170", +11252 => x"0b0b0b0b", +11253 => x"90388c08", +11254 => x"8c050851", +11255 => x"82710c0b", +11256 => x"0b0b82f8", +11257 => x"398c088c", +11258 => x"05088c08", +11259 => x"f40508f8", +11260 => x"82058812", +11261 => x"0c8c08fc", +11262 => x"0508982a", +11263 => x"8c08f805", +11264 => x"08882b70", +11265 => x"72078c08", +11266 => x"fc050888", +11267 => x"2b565355", +11268 => x"5551708c", +11269 => x"08f8050c", +11270 => x"718c08fc", +11271 => x"050c8c08", +11272 => x"8c050851", +11273 => x"83710c8c", +11274 => x"08f80508", +11275 => x"f00a260b", +11276 => x"0b0b0bbb", +11277 => x"388c08fc", +11278 => x"05089f2a", +11279 => x"8c08f805", +11280 => x"08107072", +11281 => x"078c08fc", +11282 => x"05081055", +11283 => x"53545470", +11284 => x"8c08f805", +11285 => x"0c718c08", +11286 => x"fc050c8c", +11287 => x"088c0508", +11288 => x"881108ff", +11289 => x"0588120c", +11290 => x"510b0b0b", +11291 => x"ffb9398c", +11292 => x"088c0508", +11293 => x"538c08f8", +11294 => x"05088c08", +11295 => x"fc050853", +11296 => x"51708c14", +11297 => x"0c719014", +11298 => x"0c0b0b0b", +11299 => x"81ce398c", +11300 => x"08f40508", +11301 => x"8fff2e09", +11302 => x"81060b0b", +11303 => x"0b80f438", +11304 => x"8c08f805", +11305 => x"08708c08", +11306 => x"fc050807", +11307 => x"5151700b", +11308 => x"0b0b0b90", +11309 => x"388c088c", +11310 => x"05085184", +11311 => x"710c0b0b", +11312 => x"0b819939", +11313 => x"8c08f805", +11314 => x"08932a52", +11315 => x"80728106", +11316 => x"51517080", +11317 => x"2e0b0b0b", +11318 => x"0b90388c", +11319 => x"088c0508", +11320 => x"5181710c", +11321 => x"0b0b0b0b", +11322 => x"8a398c08", +11323 => x"8c050851", +11324 => x"80710c8c", +11325 => x"088c0508", +11326 => x"538c08f8", +11327 => x"05088c08", +11328 => x"fc050853", +11329 => x"51708c14", +11330 => x"0c719014", +11331 => x"0c0b0b0b", +11332 => x"80ca398c", +11333 => x"088c0508", +11334 => x"8c08f405", +11335 => x"08f88105", +11336 => x"88120c8c", +11337 => x"088c0508", +11338 => x"51518371", +11339 => x"0c8c088c", +11340 => x"05088c08", +11341 => x"fc050898", +11342 => x"2a8c08f8", +11343 => x"0508882b", +11344 => x"7072078c", +11345 => x"08fc0508", +11346 => x"882b7188", +11347 => x"0a078c16", +11348 => x"0c708007", +11349 => x"90160c56", +11350 => x"54555555", +11351 => x"8a3d0d8c", +11352 => x"0c048c08", +11353 => x"028c0cf0", +11354 => x"3d0d8c08", +11355 => x"88050851", +11356 => x"0b0b0b89", +11357 => x"993f8008", +11358 => x"52710b0b", +11359 => x"0b0b9d38", +11360 => x"8c088c05", +11361 => x"08510b0b", +11362 => x"0b89833f", +11363 => x"80085271", +11364 => x"0b0b0b0b", +11365 => x"87380b0b", +11366 => x"0b0b8e39", +11367 => x"810b8c08", +11368 => x"fc050c0b", +11369 => x"0b0b87ed", +11370 => x"398c0888", +11371 => x"0508510b", +11372 => x"0b0b88a4", +11373 => x"3f800852", +11374 => x"71802e0b", +11375 => x"0b0b0bb9", +11376 => x"388c088c", +11377 => x"0508510b", +11378 => x"0b0b888c", +11379 => x"3f800852", +11380 => x"71802e0b", +11381 => x"0b0b0ba1", +11382 => x"388c088c", +11383 => x"05088c08", +11384 => x"88050884", +11385 => x"12088412", +11386 => x"0831708c", +11387 => x"08fc050c", +11388 => x"5254520b", +11389 => x"0b0b879d", +11390 => x"398c0888", +11391 => x"0508510b", +11392 => x"0b0b87d4", +11393 => x"3f800852", +11394 => x"71802e0b", +11395 => x"0b0b0bb6", +11396 => x"388c0888", +11397 => x"05085284", +11398 => x"1208802e", +11399 => x"0b0b0b0b", +11400 => x"8e38ff0b", +11401 => x"8c08f805", +11402 => x"0c0b0b0b", +11403 => x"0b883981", +11404 => x"0b8c08f8", +11405 => x"050c8c08", +11406 => x"f805088c", +11407 => x"08fc050c", +11408 => x"0b0b0b86", +11409 => x"d0398c08", +11410 => x"8c050851", +11411 => x"0b0b0b87", +11412 => x"873f8008", +11413 => x"5271802e", +11414 => x"0b0b0b0b", +11415 => x"b6388c08", +11416 => x"8c050852", +11417 => x"84120880", +11418 => x"2e0b0b0b", +11419 => x"0b8e3881", +11420 => x"0b8c08f4", +11421 => x"050c0b0b", +11422 => x"0b0b8839", +11423 => x"ff0b8c08", +11424 => x"f4050c8c", +11425 => x"08f40508", +11426 => x"8c08fc05", +11427 => x"0c0b0b0b", +11428 => x"8683398c", +11429 => x"08880508", +11430 => x"510b0b0b", +11431 => x"86843f80", +11432 => x"08527180", +11433 => x"2e0b0b0b", +11434 => x"0ba6388c", +11435 => x"088c0508", +11436 => x"510b0b0b", +11437 => x"85ec3f80", +11438 => x"08527180", +11439 => x"2e0b0b0b", +11440 => x"0b8e3880", +11441 => x"0b8c08fc", +11442 => x"050c0b0b", +11443 => x"0b85c639", +11444 => x"8c088805", +11445 => x"08510b0b", +11446 => x"0b85c73f", +11447 => x"80085271", +11448 => x"802e0b0b", +11449 => x"0b0bb638", +11450 => x"8c088c05", +11451 => x"08528412", +11452 => x"08802e0b", +11453 => x"0b0b0b8e", +11454 => x"38810b8c", +11455 => x"08f0050c", +11456 => x"0b0b0b0b", +11457 => x"8839ff0b", +11458 => x"8c08f005", +11459 => x"0c8c08f0", +11460 => x"05088c08", +11461 => x"fc050c0b", +11462 => x"0b0b84f9", +11463 => x"398c088c", +11464 => x"0508510b", +11465 => x"0b0b84fa", +11466 => x"3f800852", +11467 => x"71802e0b", +11468 => x"0b0b0bb6", +11469 => x"388c0888", +11470 => x"05085284", +11471 => x"1208802e", +11472 => x"0b0b0b0b", +11473 => x"8e38ff0b", +11474 => x"8c08ec05", +11475 => x"0c0b0b0b", +11476 => x"0b883981", +11477 => x"0b8c08ec", +11478 => x"050c8c08", +11479 => x"ec05088c", +11480 => x"08fc050c", +11481 => x"0b0b0b84", +11482 => x"ac398c08", +11483 => x"8805088c", +11484 => x"088c0508", +11485 => x"53538413", +11486 => x"08841308", +11487 => x"2e0b0b0b", +11488 => x"0bb6388c", +11489 => x"08880508", +11490 => x"52841208", +11491 => x"802e0b0b", +11492 => x"0b0b8e38", +11493 => x"ff0b8c08", +11494 => x"e8050c0b", +11495 => x"0b0b0b88", +11496 => x"39810b8c", +11497 => x"08e8050c", +11498 => x"8c08e805", +11499 => x"088c08fc", +11500 => x"050c0b0b", +11501 => x"0b83de39", +11502 => x"8c088805", +11503 => x"088c088c", +11504 => x"05085353", +11505 => x"88120888", +11506 => x"1408250b", +11507 => x"0b0b0bb6", +11508 => x"388c0888", +11509 => x"05085284", +11510 => x"1208802e", +11511 => x"0b0b0b0b", +11512 => x"8e38ff0b", +11513 => x"8c08e405", +11514 => x"0c0b0b0b", +11515 => x"0b883981", +11516 => x"0b8c08e4", +11517 => x"050c8c08", +11518 => x"e405088c", +11519 => x"08fc050c", +11520 => x"0b0b0b83", +11521 => x"90398c08", +11522 => x"8805088c", +11523 => x"088c0508", +11524 => x"53538813", +11525 => x"08881308", +11526 => x"250b0b0b", +11527 => x"0bb6388c", +11528 => x"08880508", +11529 => x"52841208", +11530 => x"802e0b0b", +11531 => x"0b0b8e38", +11532 => x"810b8c08", +11533 => x"e0050c0b", +11534 => x"0b0b0b88", +11535 => x"39ff0b8c", +11536 => x"08e0050c", +11537 => x"8c08e005", +11538 => x"088c08fc", +11539 => x"050c0b0b", +11540 => x"0b82c239", +11541 => x"8c088805", +11542 => x"088c08dc", +11543 => x"050c8c08", +11544 => x"8c05088c", +11545 => x"08d8050c", +11546 => x"8c08dc05", +11547 => x"088c08d8", +11548 => x"05085452", +11549 => x"8c12088c", +11550 => x"1408260b", +11551 => x"0b0b0bbc", +11552 => x"388c08dc", +11553 => x"05088c08", +11554 => x"d8050854", +11555 => x"528c1208", +11556 => x"8c14082e", +11557 => x"0981060b", +11558 => x"0b0b80d5", +11559 => x"388c08dc", +11560 => x"05088c08", +11561 => x"d8050854", +11562 => x"52901208", +11563 => x"90140826", +11564 => x"0b0b0b0b", +11565 => x"87380b0b", +11566 => x"0b0bb639", +11567 => x"8c088805", +11568 => x"08528412", +11569 => x"08802e0b", +11570 => x"0b0b0b8e", +11571 => x"38ff0b8c", +11572 => x"08d4050c", +11573 => x"0b0b0b0b", +11574 => x"8839810b", +11575 => x"8c08d405", +11576 => x"0c8c08d4", +11577 => x"05088c08", +11578 => x"fc050c0b", +11579 => x"0b0b81a5", +11580 => x"398c088c", +11581 => x"05088c08", +11582 => x"d0050c8c", +11583 => x"08880508", +11584 => x"8c08cc05", +11585 => x"0c8c08d0", +11586 => x"05088c08", +11587 => x"cc050854", +11588 => x"528c1208", +11589 => x"8c140826", +11590 => x"0b0b0b0b", +11591 => x"bc388c08", +11592 => x"d005088c", +11593 => x"08cc0508", +11594 => x"54528c12", +11595 => x"088c1408", +11596 => x"2e098106", +11597 => x"0b0b0b80", +11598 => x"d5388c08", +11599 => x"d005088c", +11600 => x"08cc0508", +11601 => x"54529012", +11602 => x"08901408", +11603 => x"260b0b0b", +11604 => x"0b87380b", +11605 => x"0b0b0bb6", +11606 => x"398c0888", +11607 => x"05085284", +11608 => x"1208802e", +11609 => x"0b0b0b0b", +11610 => x"8e38810b", +11611 => x"8c08c805", +11612 => x"0c0b0b0b", +11613 => x"0b8839ff", +11614 => x"0b8c08c8", +11615 => x"050c8c08", +11616 => x"c805088c", +11617 => x"08fc050c", +11618 => x"0b0b0b0b", +11619 => x"8839800b", +11620 => x"8c08fc05", +11621 => x"0c8c08fc", +11622 => x"0508800c", +11623 => x"923d0d8c", +11624 => x"0c048c08", +11625 => x"028c0c70", +11626 => x"70800b8c", +11627 => x"08fc050c", +11628 => x"8c088805", +11629 => x"08517008", +11630 => x"822e0981", +11631 => x"060b0b0b", +11632 => x"0b883881", +11633 => x"0b8c08fc", +11634 => x"050c8c08", +11635 => x"fc050870", +11636 => x"800c5150", +11637 => x"508c0c04", +11638 => x"8c08028c", +11639 => x"0c707080", +11640 => x"0b8c08fc", +11641 => x"050c8c08", +11642 => x"88050851", +11643 => x"7008842e", +11644 => x"0981060b", +11645 => x"0b0b0b88", +11646 => x"38810b8c", +11647 => x"08fc050c", +11648 => x"8c08fc05", +11649 => x"0870800c", +11650 => x"5150508c", +11651 => x"0c048c08", +11652 => x"028c0c70", +11653 => x"70800b8c", +11654 => x"08fc050c", +11655 => x"8c088805", +11656 => x"08517008", +11657 => x"802e0b0b", +11658 => x"0b0b9738", +11659 => x"8c088805", +11660 => x"08517008", +11661 => x"812e0b0b", +11662 => x"0b0b8738", +11663 => x"0b0b0b0b", +11664 => x"8839810b", +11665 => x"8c08fc05", +11666 => x"0c8c08fc", +11667 => x"05087080", +11668 => x"0c515050", +11669 => x"8c0c0470", +11670 => x"700b0b83", +11671 => x"84d80bfc", +11672 => x"05700852", +11673 => x"5270ff2e", +11674 => x"0b0b0b0b", +11675 => x"9538702d", +11676 => x"fc127008", +11677 => x"525270ff", +11678 => x"2e098106", +11679 => x"0b0b0b0b", +11680 => x"ed385050", +11681 => x"04040b0b", +11682 => x"fd9e993f", +11683 => x"04000000", +11684 => x"00000040", +11685 => x"48656c6c", +11686 => x"6f20776f", +11687 => x"726c6421", +11688 => x"0a000000", +11689 => x"20202020", +11690 => x"20202020", +11691 => x"20202020", +11692 => x"20202020", +11693 => x"30303030", +11694 => x"30303030", +11695 => x"30303030", +11696 => x"30303030", +11697 => x"0000164c", +11698 => x"000010d6", +11699 => x"000010d6", +11700 => x"0000163f", +11701 => x"000010d6", +11702 => x"000010d6", +11703 => x"000010d6", +11704 => x"000010d6", +11705 => x"000010d6", +11706 => x"000010d6", +11707 => x"000010a4", +11708 => x"000015c6", +11709 => x"000010d6", +11710 => x"000010b9", +11711 => x"000012d9", +11712 => x"000010d6", +11713 => x"000015fe", +11714 => x"000015d5", +11715 => x"000015d5", +11716 => x"000015d5", +11717 => x"000015d5", +11718 => x"000015d5", +11719 => x"000015d5", +11720 => x"000015d5", +11721 => x"000015d5", +11722 => x"000015d5", +11723 => x"000010d6", +11724 => x"000010d6", +11725 => x"000010d6", +11726 => x"000010d6", +11727 => x"000010d6", +11728 => x"000010d6", +11729 => x"000010d6", +11730 => x"000010d6", +11731 => x"000010d6", +11732 => x"00001476", +11733 => x"00001060", +11734 => x"000013e5", +11735 => x"000010d6", +11736 => x"000013e5", +11737 => x"000010d6", +11738 => x"000010d6", +11739 => x"000010d6", +11740 => x"000010d6", +11741 => x"0000160c", +11742 => x"000010d6", +11743 => x"000010d6", +11744 => x"00001024", +11745 => x"000010d6", +11746 => x"000010d6", +11747 => x"000010d6", +11748 => x"0000152a", +11749 => x"000010d6", +11750 => x"00000ce0", +11751 => x"000010d6", +11752 => x"000010d6", +11753 => x"000014d2", +11754 => x"000010d6", +11755 => x"000010d6", +11756 => x"000010d6", +11757 => x"000010d6", +11758 => x"000010d6", +11759 => x"000010d6", +11760 => x"000010d6", +11761 => x"000010d6", +11762 => x"000010d6", +11763 => x"000010d6", +11764 => x"00001476", +11765 => x"00001064", +11766 => x"000013e5", +11767 => x"000013e5", +11768 => x"000013e5", +11769 => x"000013d7", +11770 => x"00001064", +11771 => x"000010d6", +11772 => x"000010d6", +11773 => x"000012b5", +11774 => x"000010d6", +11775 => x"00001592", +11776 => x"00001028", +11777 => x"0000132c", +11778 => x"000010c9", +11779 => x"000010d6", +11780 => x"0000152a", +11781 => x"000010d6", +11782 => x"00000ce4", +11783 => x"000010d6", +11784 => x"000010d6", +11785 => x"00001619", +11786 => x"62756720", +11787 => x"696e2076", +11788 => x"66707269", +11789 => x"6e74663a", +11790 => x"20626164", +11791 => x"20626173", +11792 => x"65000000", +11793 => x"30313233", +11794 => x"34353637", +11795 => x"38396162", +11796 => x"63646566", +11797 => x"00000000", +11798 => x"496e6600", +11799 => x"30313233", +11800 => x"34353637", +11801 => x"38394142", +11802 => x"43444546", +11803 => x"00000000", +11804 => x"30000000", +11805 => x"2e000000", +11806 => x"4e614e00", +11807 => x"286e756c", +11808 => x"6c290000", +11809 => x"432d5554", +11810 => x"462d3800", +11811 => x"432d534a", +11812 => x"49530000", +11813 => x"432d4555", +11814 => x"434a5000", +11815 => x"432d4a49", +11816 => x"53000000", +11817 => x"496e6669", +11818 => x"6e697479", +11819 => x"00000000", +11820 => x"000037a9", +11821 => x"000037a9", +11822 => x"0000378d", +11823 => x"000031e6", +11824 => x"00003792", +11825 => x"000031eb", +11826 => x"43000000", +11827 => x"49534f2d", +11828 => x"38383539", +11829 => x"2d310000", +11830 => x"0000b874", +11831 => x"0000b86c", +11832 => x"0000b86c", +11833 => x"0000b86c", +11834 => x"0000b86c", +11835 => x"0000b86c", +11836 => x"0000b86c", +11837 => x"0000b86c", +11838 => x"0000b86c", +11839 => x"0000b86c", +11840 => x"ffffffff", +11841 => x"ffffffff", +11842 => x"3c9cd2b2", +11843 => x"97d889bc", +11844 => x"3949f623", +11845 => x"d5a8a733", +11846 => x"32a50ffd", +11847 => x"44f4a73d", +11848 => x"255bba08", +11849 => x"cf8c979d", +11850 => x"0ac80628", +11851 => x"64ac6f43", +11852 => x"4341c379", +11853 => x"37e08000", +11854 => x"4693b8b5", +11855 => x"b5056e17", +11856 => x"4d384f03", +11857 => x"e93ff9f5", +11858 => x"5a827748", +11859 => x"f9301d32", +11860 => x"75154fdd", +11861 => x"7f73bf3c", +11862 => x"3ff00000", +11863 => x"00000000", +11864 => x"40240000", +11865 => x"00000000", +11866 => x"40590000", +11867 => x"00000000", +11868 => x"408f4000", +11869 => x"00000000", +11870 => x"40c38800", +11871 => x"00000000", +11872 => x"40f86a00", +11873 => x"00000000", +11874 => x"412e8480", +11875 => x"00000000", +11876 => x"416312d0", +11877 => x"00000000", +11878 => x"4197d784", +11879 => x"00000000", +11880 => x"41cdcd65", +11881 => x"00000000", +11882 => x"4202a05f", +11883 => x"20000000", +11884 => x"42374876", +11885 => x"e8000000", +11886 => x"426d1a94", +11887 => x"a2000000", +11888 => x"42a2309c", +11889 => x"e5400000", +11890 => x"42d6bcc4", +11891 => x"1e900000", +11892 => x"430c6bf5", +11893 => x"26340000", +11894 => x"4341c379", +11895 => x"37e08000", +11896 => x"43763457", +11897 => x"85d8a000", +11898 => x"43abc16d", +11899 => x"674ec800", +11900 => x"43e158e4", +11901 => x"60913d00", +11902 => x"4415af1d", +11903 => x"78b58c40", +11904 => x"444b1ae4", +11905 => x"d6e2ef50", +11906 => x"4480f0cf", +11907 => x"064dd592", +11908 => x"44b52d02", +11909 => x"c7e14af6", +11910 => x"44ea7843", +11911 => x"79d99db4", +11912 => x"00000005", +11913 => x"00000019", +11914 => x"0000007d", +11915 => x"64756d6d", +11916 => x"792e6578", +11917 => x"65000000", +11918 => x"00000000", +11919 => x"00000000", +11920 => x"00000000", +11921 => x"00000000", +11922 => x"00000000", +11923 => x"00ffffff", +11924 => x"ff00ffff", +11925 => x"ffff00ff", +11926 => x"ffffff00", +11927 => x"00000000", +11928 => x"00000000", +11929 => x"00000000", +11930 => x"0000c260", +11931 => x"0000ba70", +11932 => x"00000000", +11933 => x"0000bcd8", +11934 => x"0000bd34", +11935 => x"0000bd90", +11936 => x"00000000", +11937 => x"00000000", +11938 => x"00000000", +11939 => x"00000000", +11940 => x"00000000", +11941 => x"00000000", +11942 => x"00000000", +11943 => x"00000000", +11944 => x"00000000", +11945 => x"0000b8c8", +11946 => x"00000000", +11947 => x"00000000", +11948 => x"00000000", +11949 => x"00000000", +11950 => x"00000000", +11951 => x"00000000", +11952 => x"00000000", +11953 => x"00000000", +11954 => x"00000000", +11955 => x"00000000", +11956 => x"00000000", +11957 => x"00000000", +11958 => x"00000000", +11959 => x"00000000", +11960 => x"00000000", +11961 => x"00000000", +11962 => x"00000000", +11963 => x"00000000", +11964 => x"00000000", +11965 => x"00000000", +11966 => x"00000000", +11967 => x"00000000", +11968 => x"00000000", +11969 => x"00000000", +11970 => x"00000000", +11971 => x"00000000", +11972 => x"00000000", +11973 => x"00000000", +11974 => x"00000001", +11975 => x"330eabcd", +11976 => x"1234e66d", +11977 => x"deec0005", +11978 => x"000b0000", +11979 => x"00000000", +11980 => x"00000000", +11981 => x"00000000", +11982 => x"00000000", +11983 => x"00000000", +11984 => x"00000000", +11985 => x"00000000", +11986 => x"00000000", +11987 => x"00000000", +11988 => x"00000000", +11989 => x"00000000", +11990 => x"00000000", +11991 => x"00000000", +11992 => x"00000000", +11993 => x"00000000", +11994 => x"00000000", +11995 => x"00000000", +11996 => x"00000000", +11997 => x"00000000", +11998 => x"00000000", +11999 => x"00000000", +12000 => x"00000000", +12001 => x"00000000", +12002 => x"00000000", +12003 => x"00000000", +12004 => x"00000000", +12005 => x"00000000", +12006 => x"00000000", +12007 => x"00000000", +12008 => x"00000000", +12009 => x"00000000", +12010 => x"00000000", +12011 => x"00000000", +12012 => x"00000000", +12013 => x"00000000", +12014 => x"00000000", +12015 => x"00000000", +12016 => x"00000000", +12017 => x"00000000", +12018 => x"00000000", +12019 => x"00000000", +12020 => x"00000000", +12021 => x"00000000", +12022 => x"00000000", +12023 => x"00000000", +12024 => x"00000000", +12025 => x"00000000", +12026 => x"00000000", +12027 => x"00000000", +12028 => x"00000000", +12029 => x"00000000", +12030 => x"00000000", +12031 => x"00000000", +12032 => x"00000000", +12033 => x"00000000", +12034 => x"00000000", +12035 => x"00000000", +12036 => x"00000000", +12037 => x"00000000", +12038 => x"00000000", +12039 => x"00000000", +12040 => x"00000000", +12041 => x"00000000", +12042 => x"00000000", +12043 => x"00000000", +12044 => x"00000000", +12045 => x"00000000", +12046 => x"00000000", +12047 => x"00000000", +12048 => x"00000000", +12049 => x"00000000", +12050 => x"00000000", +12051 => x"00000000", +12052 => x"00000000", +12053 => x"00000000", +12054 => x"00000000", +12055 => x"00000000", +12056 => x"00000000", +12057 => x"00000000", +12058 => x"00000000", +12059 => x"00000000", +12060 => x"00000000", +12061 => x"00000000", +12062 => x"00000000", +12063 => x"00000000", +12064 => x"00000000", +12065 => x"00000000", +12066 => x"00000000", +12067 => x"00000000", +12068 => x"00000000", +12069 => x"00000000", +12070 => x"00000000", +12071 => x"00000000", +12072 => x"00000000", +12073 => x"00000000", +12074 => x"00000000", +12075 => x"00000000", +12076 => x"00000000", +12077 => x"00000000", +12078 => x"00000000", +12079 => x"00000000", +12080 => x"00000000", +12081 => x"00000000", +12082 => x"00000000", +12083 => x"00000000", +12084 => x"00000000", +12085 => x"00000000", +12086 => x"00000000", +12087 => x"00000000", +12088 => x"00000000", +12089 => x"00000000", +12090 => x"00000000", +12091 => x"00000000", +12092 => x"00000000", +12093 => x"00000000", +12094 => x"00000000", +12095 => x"00000000", +12096 => x"00000000", +12097 => x"00000000", +12098 => x"00000000", +12099 => x"00000000", +12100 => x"00000000", +12101 => x"00000000", +12102 => x"00000000", +12103 => x"00000000", +12104 => x"00000000", +12105 => x"00000000", +12106 => x"00000000", +12107 => x"00000000", +12108 => x"00000000", +12109 => x"00000000", +12110 => x"00000000", +12111 => x"00000000", +12112 => x"00000000", +12113 => x"00000000", +12114 => x"00000000", +12115 => x"00000000", +12116 => x"00000000", +12117 => x"00000000", +12118 => x"00000000", +12119 => x"00000000", +12120 => x"00000000", +12121 => x"00000000", +12122 => x"00000000", +12123 => x"00000000", +12124 => x"00000000", +12125 => x"00000000", +12126 => x"00000000", +12127 => x"00000000", +12128 => x"00000000", +12129 => x"00000000", +12130 => x"00000000", +12131 => x"00000000", +12132 => x"00000000", +12133 => x"00000000", +12134 => x"00000000", +12135 => x"00000000", +12136 => x"00000000", +12137 => x"00000000", +12138 => x"00000000", +12139 => x"00000000", +12140 => x"00000000", +12141 => x"00000000", +12142 => x"00000000", +12143 => x"00000000", +12144 => x"00000000", +12145 => x"00000000", +12146 => x"00000000", +12147 => x"00000000", +12148 => x"00000000", +12149 => x"00000000", +12150 => x"00000000", +12151 => x"00000000", +12152 => x"00000000", +12153 => x"00000000", +12154 => x"00000000", +12155 => x"43000000", +12156 => x"00000000", +12157 => x"00000000", +12158 => x"00000000", +12159 => x"00000000", +12160 => x"00000000", +12161 => x"00000001", +12162 => x"0000b8cc", +12163 => x"00000000", +12164 => x"00000000", +12165 => x"00000000", +12166 => x"00000000", +12167 => x"00000000", +12168 => x"00000000", +12169 => x"00000000", +12170 => x"00000000", +12171 => x"00000000", +12172 => x"00000000", +12173 => x"00000000", +12174 => x"00000000", +12175 => x"ffffffff", +12176 => x"00000000", +12177 => x"00020000", +12178 => x"00000000", +12179 => x"00000000", +12180 => x"0000be48", +12181 => x"0000be48", +12182 => x"0000be50", +12183 => x"0000be50", +12184 => x"0000be58", +12185 => x"0000be58", +12186 => x"0000be60", +12187 => x"0000be60", +12188 => x"0000be68", +12189 => x"0000be68", +12190 => x"0000be70", +12191 => x"0000be70", +12192 => x"0000be78", +12193 => x"0000be78", +12194 => x"0000be80", +12195 => x"0000be80", +12196 => x"0000be88", +12197 => x"0000be88", +12198 => x"0000be90", +12199 => x"0000be90", +12200 => x"0000be98", +12201 => x"0000be98", +12202 => x"0000bea0", +12203 => x"0000bea0", +12204 => x"0000bea8", +12205 => x"0000bea8", +12206 => x"0000beb0", +12207 => x"0000beb0", +12208 => x"0000beb8", +12209 => x"0000beb8", +12210 => x"0000bec0", +12211 => x"0000bec0", +12212 => x"0000bec8", +12213 => x"0000bec8", +12214 => x"0000bed0", +12215 => x"0000bed0", +12216 => x"0000bed8", +12217 => x"0000bed8", +12218 => x"0000bee0", +12219 => x"0000bee0", +12220 => x"0000bee8", +12221 => x"0000bee8", +12222 => x"0000bef0", +12223 => x"0000bef0", +12224 => x"0000bef8", +12225 => x"0000bef8", +12226 => x"0000bf00", +12227 => x"0000bf00", +12228 => x"0000bf08", +12229 => x"0000bf08", +12230 => x"0000bf10", +12231 => x"0000bf10", +12232 => x"0000bf18", +12233 => x"0000bf18", +12234 => x"0000bf20", +12235 => x"0000bf20", +12236 => x"0000bf28", +12237 => x"0000bf28", +12238 => x"0000bf30", +12239 => x"0000bf30", +12240 => x"0000bf38", +12241 => x"0000bf38", +12242 => x"0000bf40", +12243 => x"0000bf40", +12244 => x"0000bf48", +12245 => x"0000bf48", +12246 => x"0000bf50", +12247 => x"0000bf50", +12248 => x"0000bf58", +12249 => x"0000bf58", +12250 => x"0000bf60", +12251 => x"0000bf60", +12252 => x"0000bf68", +12253 => x"0000bf68", +12254 => x"0000bf70", +12255 => x"0000bf70", +12256 => x"0000bf78", +12257 => x"0000bf78", +12258 => x"0000bf80", +12259 => x"0000bf80", +12260 => x"0000bf88", +12261 => x"0000bf88", +12262 => x"0000bf90", +12263 => x"0000bf90", +12264 => x"0000bf98", +12265 => x"0000bf98", +12266 => x"0000bfa0", +12267 => x"0000bfa0", +12268 => x"0000bfa8", +12269 => x"0000bfa8", +12270 => x"0000bfb0", +12271 => x"0000bfb0", +12272 => x"0000bfb8", +12273 => x"0000bfb8", +12274 => x"0000bfc0", +12275 => x"0000bfc0", +12276 => x"0000bfc8", +12277 => x"0000bfc8", +12278 => x"0000bfd0", +12279 => x"0000bfd0", +12280 => x"0000bfd8", +12281 => x"0000bfd8", +12282 => x"0000bfe0", +12283 => x"0000bfe0", +12284 => x"0000bfe8", +12285 => x"0000bfe8", +12286 => x"0000bff0", +12287 => x"0000bff0", +12288 => x"0000bff8", +12289 => x"0000bff8", +12290 => x"0000c000", +12291 => x"0000c000", +12292 => x"0000c008", +12293 => x"0000c008", +12294 => x"0000c010", +12295 => x"0000c010", +12296 => x"0000c018", +12297 => x"0000c018", +12298 => x"0000c020", +12299 => x"0000c020", +12300 => x"0000c028", +12301 => x"0000c028", +12302 => x"0000c030", +12303 => x"0000c030", +12304 => x"0000c038", +12305 => x"0000c038", +12306 => x"0000c040", +12307 => x"0000c040", +12308 => x"0000c048", +12309 => x"0000c048", +12310 => x"0000c050", +12311 => x"0000c050", +12312 => x"0000c058", +12313 => x"0000c058", +12314 => x"0000c060", +12315 => x"0000c060", +12316 => x"0000c068", +12317 => x"0000c068", +12318 => x"0000c070", +12319 => x"0000c070", +12320 => x"0000c078", +12321 => x"0000c078", +12322 => x"0000c080", +12323 => x"0000c080", +12324 => x"0000c088", +12325 => x"0000c088", +12326 => x"0000c090", +12327 => x"0000c090", +12328 => x"0000c098", +12329 => x"0000c098", +12330 => x"0000c0a0", +12331 => x"0000c0a0", +12332 => x"0000c0a8", +12333 => x"0000c0a8", +12334 => x"0000c0b0", +12335 => x"0000c0b0", +12336 => x"0000c0b8", +12337 => x"0000c0b8", +12338 => x"0000c0c0", +12339 => x"0000c0c0", +12340 => x"0000c0c8", +12341 => x"0000c0c8", +12342 => x"0000c0d0", +12343 => x"0000c0d0", +12344 => x"0000c0d8", +12345 => x"0000c0d8", +12346 => x"0000c0e0", +12347 => x"0000c0e0", +12348 => x"0000c0e8", +12349 => x"0000c0e8", +12350 => x"0000c0f0", +12351 => x"0000c0f0", +12352 => x"0000c0f8", +12353 => x"0000c0f8", +12354 => x"0000c100", +12355 => x"0000c100", +12356 => x"0000c108", +12357 => x"0000c108", +12358 => x"0000c110", +12359 => x"0000c110", +12360 => x"0000c118", +12361 => x"0000c118", +12362 => x"0000c120", +12363 => x"0000c120", +12364 => x"0000c128", +12365 => x"0000c128", +12366 => x"0000c130", +12367 => x"0000c130", +12368 => x"0000c138", +12369 => x"0000c138", +12370 => x"0000c140", +12371 => x"0000c140", +12372 => x"0000c148", +12373 => x"0000c148", +12374 => x"0000c150", +12375 => x"0000c150", +12376 => x"0000c158", +12377 => x"0000c158", +12378 => x"0000c160", +12379 => x"0000c160", +12380 => x"0000c168", +12381 => x"0000c168", +12382 => x"0000c170", +12383 => x"0000c170", +12384 => x"0000c178", +12385 => x"0000c178", +12386 => x"0000c180", +12387 => x"0000c180", +12388 => x"0000c188", +12389 => x"0000c188", +12390 => x"0000c190", +12391 => x"0000c190", +12392 => x"0000c198", +12393 => x"0000c198", +12394 => x"0000c1a0", +12395 => x"0000c1a0", +12396 => x"0000c1a8", +12397 => x"0000c1a8", +12398 => x"0000c1b0", +12399 => x"0000c1b0", +12400 => x"0000c1b8", +12401 => x"0000c1b8", +12402 => x"0000c1c0", +12403 => x"0000c1c0", +12404 => x"0000c1c8", +12405 => x"0000c1c8", +12406 => x"0000c1d0", +12407 => x"0000c1d0", +12408 => x"0000c1d8", +12409 => x"0000c1d8", +12410 => x"0000c1e0", +12411 => x"0000c1e0", +12412 => x"0000c1e8", +12413 => x"0000c1e8", +12414 => x"0000c1f0", +12415 => x"0000c1f0", +12416 => x"0000c1f8", +12417 => x"0000c1f8", +12418 => x"0000c200", +12419 => x"0000c200", +12420 => x"0000c208", +12421 => x"0000c208", +12422 => x"0000c210", +12423 => x"0000c210", +12424 => x"0000c218", +12425 => x"0000c218", +12426 => x"0000c220", +12427 => x"0000c220", +12428 => x"0000c228", +12429 => x"0000c228", +12430 => x"0000c230", +12431 => x"0000c230", +12432 => x"0000c238", +12433 => x"0000c238", +12434 => x"0000c240", +12435 => x"0000c240", +12436 => x"0000ba2c", +12437 => x"ffffffff", +12438 => x"00000000", +12439 => x"ffffffff", +12440 => x"00000000", diff --git a/zpu/sw/helloworld/hello.c b/zpu/sw/helloworld/hello.c new file mode 100644 index 0000000..e9cc61e --- /dev/null +++ b/zpu/sw/helloworld/hello.c @@ -0,0 +1,6 @@ +// To compile: zpu-elf-gcc test.c -o test.elf -phi +// To run: +int main(int argc, char **argv) +{ + printf("Hello world!\n"); +} diff --git a/zpu/sw/helloworld/hello.elf b/zpu/sw/helloworld/hello.elf new file mode 100644 index 0000000..be3c093 Binary files /dev/null and b/zpu/sw/helloworld/hello.elf differ diff --git a/zpu/sw/helloworld/zpusim.PNG b/zpu/sw/helloworld/zpusim.PNG new file mode 100644 index 0000000..d8fc277 Binary files /dev/null and b/zpu/sw/helloworld/zpusim.PNG differ diff --git a/zpu/sw/index.html b/zpu/sw/index.html new file mode 100644 index 0000000..6c860a9 --- /dev/null +++ b/zpu/sw/index.html @@ -0,0 +1,44 @@ + + +

Getting started - a ZPU hello world program

+The ZPU comes with a standard GCC toolchain and an instruction set simulator. This allows compiling, running & debugging simple test programs. The Simulator has +some very basic peripherals defined: counter, timer interrupt and a debug output port. +

Installing

+
    +
  1. Install Cygwin. http://www.cygwin.com +
  2. Install Java +
  3. Start Cygwin bash +
  4. cd zpu/sw +
  5. unzip tools/zputoolchain.zip +
  6. zpu/sw/install/bin now has the .exe files for the GCC toolchain & GDB +
  7. You may want to add install/bin from zputoolchain.zip to PATH.
    +export PATH=$PATH:<unzipdir>/install/bin +
+

Hello world example

+The ZPU toolchain comes with newlib & libstdc++ support which means that many C/C++ programs can be compiled without modification. +

+ +cd zpu/sw/helloworld
+../install/bin/zpu-elf-gcc -phi hello.c -o hello.elf
+
+

Running the hello world example in GDB

+
    +
  1. cd zpu/sw/helloworld +
  2. Launch the simulator from a seperate bash shell:

    +java -classpath ../simulator/zpusim.jar -Xmx512m com.zylin.zpu.simulator.Phi 4444 +

    + +

  3. Launch GDB:

    +../install/bin/zpu-elf-gdb hello.elf +

  4. Connect to target, load and run application:

    + +(gdb) target remote localhost:4444
    +(gdb) load
    +(gdb) continue
    +
    +

    + + + + + diff --git a/zpu/sw/simulator/.classpath b/zpu/sw/simulator/.classpath new file mode 100644 index 0000000..617be7e --- /dev/null +++ b/zpu/sw/simulator/.classpath @@ -0,0 +1,6 @@ + + + + + + diff --git a/zpu/sw/simulator/.project b/zpu/sw/simulator/.project new file mode 100644 index 0000000..9cd2fd7 --- /dev/null +++ b/zpu/sw/simulator/.project @@ -0,0 +1,17 @@ + + + simulator + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/zpu/sw/simulator/.settings/org.eclipse.jdt.core.prefs b/zpu/sw/simulator/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..6a131a7 --- /dev/null +++ b/zpu/sw/simulator/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,66 @@ +#Sat Aug 04 19:47:23 CEST 2007 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.autoboxing=ignore +org.eclipse.jdt.core.compiler.problem.deprecation=warning +org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled +org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled +org.eclipse.jdt.core.compiler.problem.discouragedReference=warning +org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore +org.eclipse.jdt.core.compiler.problem.fatalOptionalError=enabled +org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore +org.eclipse.jdt.core.compiler.problem.finalParameterBound=ignore +org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning +org.eclipse.jdt.core.compiler.problem.forbiddenReference=error +org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning +org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning +org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=ignore +org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore +org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore +org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning +org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore +org.eclipse.jdt.core.compiler.problem.missingSerialVersion=ignore +org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning +org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning +org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore +org.eclipse.jdt.core.compiler.problem.nullReference=ignore +org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning +org.eclipse.jdt.core.compiler.problem.parameterAssignment=ignore +org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore +org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore +org.eclipse.jdt.core.compiler.problem.rawTypeReference=ignore +org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore +org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled +org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning +org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled +org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore +org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning +org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=ignore +org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore +org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=warning +org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore +org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=ignore +org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore +org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled +org.eclipse.jdt.core.compiler.problem.unusedImport=warning +org.eclipse.jdt.core.compiler.problem.unusedLabel=warning +org.eclipse.jdt.core.compiler.problem.unusedLocal=warning +org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore +org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled +org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled +org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning +org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning +org.eclipse.jdt.core.compiler.source=1.5 diff --git a/zpu/sw/simulator/ChangeLog b/zpu/sw/simulator/ChangeLog new file mode 100644 index 0000000..c645841 --- /dev/null +++ b/zpu/sw/simulator/ChangeLog @@ -0,0 +1,2 @@ +2007-08-04 Øyvind Harboe + * First version after open sourcing ZPU diff --git a/zpu/sw/simulator/build.xml b/zpu/sw/simulator/build.xml new file mode 100644 index 0000000..a5cc8a3 --- /dev/null +++ b/zpu/sw/simulator/build.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/zpu/sw/simulator/com/zylin/zpu/simulator/Abel.java b/zpu/sw/simulator/com/zylin/zpu/simulator/Abel.java new file mode 100644 index 0000000..8d8667c --- /dev/null +++ b/zpu/sw/simulator/com/zylin/zpu/simulator/Abel.java @@ -0,0 +1,109 @@ + +package com.zylin.zpu.simulator; + +import com.zylin.zpu.simulator.exceptions.CPUException; +import com.zylin.zpu.simulator.exceptions.MemoryAccessException; + +public class Abel extends Simulator +{ + + protected int getIO() + { + return 0x8000; + } + + + + protected int ioRead(int addr) throws CPUException + { + switch (addr) + { + case 0xc000: + return syscall.readUART(); + + /* FIFO empty? bit 0, FIFO full bit 1(never the case) */ + case 0xc004: + return syscall.readFIFO(); + + case 0x9000: + case 0x9004: + case 0x9008: + case 0x900c: + + case 0x9010: + case 0x9014: + case 0x9018: + case 0x901c: + return readSampledTimer(addr, 0x9000); + + case 0x8800: + return readMHz(); + + default: + throw new MemoryAccessException(); + } + } + + /* + ; Read/write are on different addresses + ; The registers are 8 bits and mapped to bit[7:0] + ; + ; 0xC000 Write: Writes to UART TX FIFO (4 byte FIFO) + ; Read : Reads from UART RX FIFO (4 byte FIFO) + ; 0xC004 Read : UART status register + ; Bit 0 = RX FIFO empty + ; Bit 1 = TX FIFO full + ; 0xA000 Write: 8 LED's + */ + + /* + 0x9000 Write: bit 0: 1= reset counter + 0= counter running + bit 1: 1= sample counter (when set to 1) + 0=not used + Read : counter bit[7:0] + 0x9004 Read: counter bit [15:8] + 0x9008 Read: counter bit [23:16] + 0x900C Read: counter bit [31:24] + 0x9010 Read: counter bit [39:32] + 0x9014 Read: counter bit [47:40] + 0x9018 Read: counter bit [55:48] + 0x901C Read: counter bit [63:56] + + 0x8800 Read: unsigned 8-bit integer with FPGA frequency (in MHz) + */ + + protected void ioWrite(int addr, int val) throws MemoryAccessException + { + switch (addr) + { + case 0x9000: + writeTimerSampleReg(val); + case 0xc000: + syscall.writeUART(val); + break; + default: + throw new MemoryAccessException(); + } + } + + Abel() throws CPUException + { + } + + protected boolean emulateConfig() + { + return true; + } + + protected int getStartStack() + { + return getRAMSIZE()-8; + } + + protected int getRAMSIZE() + { + return 32768; + } + +} diff --git a/zpu/sw/simulator/com/zylin/zpu/simulator/FileTracer.java b/zpu/sw/simulator/com/zylin/zpu/simulator/FileTracer.java new file mode 100644 index 0000000..6ccca24 --- /dev/null +++ b/zpu/sw/simulator/com/zylin/zpu/simulator/FileTracer.java @@ -0,0 +1,285 @@ + +package com.zylin.zpu.simulator; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.LineNumberReader; + +import com.zylin.zpu.simulator.exceptions.CPUException; +import com.zylin.zpu.simulator.exceptions.GDBServerException; +import com.zylin.zpu.simulator.exceptions.TraceException; + +public class FileTracer implements Tracer +{ + private LineNumberReader file; + private boolean trigger; + private boolean resync; + private Simulator simulator; + private String line; + private boolean ignore; + + static class Trace + { + int pc; + int opcode; + int sp; + int stackA; + int stackB; + int intSp; + long cycle; + public boolean undefinedStackA; + public boolean undefinedStackB; + public boolean undefinedIntSp; + public void print() + { + System.err.println(Integer.toHexString(pc)+ " " + + Integer.toHexString(opcode) + " " + + Integer.toHexString(sp) + " " + + Integer.toHexString(stackA) + " " + + Integer.toHexString(stackB) + " " + + intSp + " " + + cycle); + + } + }; + private Trace[] trace= new Trace[100]; + private int current; + private String fileName; + private boolean metEnd; + + + public FileTracer(Simulator sim, String string) + { + simulator=sim; + fileName=string; + + resync=true; + + + for (int i=0; i=1) + { + portNumber=Integer.parseInt(args[0]); + } + } + + private void moreParse() + { + if (args.length>=2) + { + simulator.setTraceFile(args[1]); + } + } + + void run(String[] args) + { + this.args=args; + parseArgs(); + try + { + channel = ServerSocketChannel.open(); + try + { + System.out.println("Listening on port " + portNumber); + channel.socket().bind(new InetSocketAddress(portNumber)); + for (;;) + { + try + { + simulator=simFactory.create(); + simulator.suspend(); + moreParse(); + run(); + } catch (CPUException e) + { + e.printStackTrace(); + } + } + } finally + { + channel.close(); + } + } catch (IOException e1) + { + e1.printStackTrace(); + } + + } + + private void run() throws CPUException + { + final GDBServer gdbServer=new GDBServer(simulator, this); + simulator.setSyscall(gdbServer); + Thread thread = new Thread(new Runnable() + { + public void run() + { + try + { + gdbServer.gdbServer(); + } + catch (Throwable e) + { + e.printStackTrace(); + } + simulator.shutdown(); + } + }); + thread.start(); + try + { + simulator.run(); + } + finally + { + + try + { + thread.join(); + } catch (InterruptedException e) + { + e.printStackTrace(); + } + } + + } +} diff --git a/zpu/sw/simulator/com/zylin/zpu/simulator/SimFactory.java b/zpu/sw/simulator/com/zylin/zpu/simulator/SimFactory.java new file mode 100644 index 0000000..4db85d7 --- /dev/null +++ b/zpu/sw/simulator/com/zylin/zpu/simulator/SimFactory.java @@ -0,0 +1,8 @@ +package com.zylin.zpu.simulator; + +public interface SimFactory +{ + + Simulator create(); + +} diff --git a/zpu/sw/simulator/com/zylin/zpu/simulator/Simulator.java b/zpu/sw/simulator/com/zylin/zpu/simulator/Simulator.java new file mode 100644 index 0000000..c1b86d4 --- /dev/null +++ b/zpu/sw/simulator/com/zylin/zpu/simulator/Simulator.java @@ -0,0 +1,2063 @@ +package com.zylin.zpu.simulator; + +import java.io.ByteArrayOutputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Collections; +import java.util.Comparator; +import java.util.LinkedList; +import java.util.List; + +import com.zylin.zpu.simulator.FileTracer.Trace; +import com.zylin.zpu.simulator.exceptions.CPUException; +import com.zylin.zpu.simulator.exceptions.DebuggerBreakpointException; +import com.zylin.zpu.simulator.exceptions.EndSessionException; +import com.zylin.zpu.simulator.exceptions.GDBServerException; +import com.zylin.zpu.simulator.exceptions.HardwareWatchPointException; +import com.zylin.zpu.simulator.exceptions.IllegalInstructionException; +import com.zylin.zpu.simulator.exceptions.InterruptException; +import com.zylin.zpu.simulator.exceptions.MemoryAccessException; + +public class Simulator implements ZPU, Machine, Sim +{ + + int minStack; + + /** + * the feeble version of the CPU, e.g. only implements + * 11 instructions. + * + * For debugging purposes it is useful to enable/disable + * each instruction + */ + boolean feeble[]=new boolean[256]; + + private long opcodeHistogram[]=new long[256]; + private long opcodeHistogramCycles[]=new long[256]; + private long opcodePairHistogram[]=new long[256*256]; + private long opcodePairHistogramCycles[]=new long[256*256]; + + /** weee! constants are 32 bit by default, so we need to assign a 64 bit + * integer in this matter. + */ + private static final long INTMASK = Long.parseLong("ffffffff", 16); + + final static int PUSHPC=59; + final static int OR=7; + final static int NOT=9; + final static int LOAD=8; + final static int STORE=12; + final static int POPPC=4; + final static int FLIP=10; + + final static int ADD=5; + final static int PUSHSP=2; + final static int POPSP=13; + final static int NOP=11; + final static int AND=6; + final static int ADDSP=16; + + final static int EMULATE=32; + final static int LOADH=34; + final static int STOREH=35; + final static int LESSTHAN=36; + final static int LESSTHANOREQUAL=37; + final static int ULESSTHAN=38; + final static int ULESSTHANOREQUAL=39; + final static int SWAP=40; + final static int MULT=41; + final static int LSHIFTRIGHT=42; + final static int ASHIFTLEFT=43; + final static int ASHIFTRIGHT=44; + final static int CALL=45; + final static int EQ=46; + final static int NEQ=47; + final static int NEG=48; + final static int SUB=49; + final static int XOR=50; + final static int LOADB=51; + final static int STOREB=52; + final static int DIV=53; + final static int MOD=54; + final static int EQBRANCH=55; + final static int NEQBRANCH=56; + final static int POPPCREL=57; + final static int CONFIG=58; + final static int SYSCALL=60; + final static int PUSHSPADD=61; + final static int MULT16X16=62; + final static int CALLPCREL=63; + final static int STORESP=64; + final static int LOADSP=64+32; + + int[] memory; + boolean[] validMemory; + protected long cycles; + protected int instructionCount; + private int sp; + private int pc; + protected boolean breakNext; + + /* halting synchronization object */ + protected Object halt = new Object(); + + private int IOSIZE=getIOSIZE(); + protected int getIOSIZE() + { + return 32768; + } + long prevCycles; + private static final int VECTORSIZE = 0x20; + private static final int VECTOR_RESET = 0; + private static final int VECTOR_INTERRUPT = 1; + private boolean hitVector; + private static final int VECTORBASE = 0x0; + private int nextVector; + protected long lastTimer; + protected boolean timer; + private boolean powerdown; + private boolean decodeMask; + + private static final int ZETA = 1; + + private static final int ABEL = 0; + + private int startStack; + + protected Host syscall; + + private long[] emulateOpcodeHistogram= new long[256]; + + private long[] emulateOpcodeHistogramCycles=new long[256]; + + private long emulateCycles;; + + public Simulator() throws CPUException + { + } + + + public void run() throws CPUException + { + syscall.running(); + + try + { + + instructionLoop(); + + + } catch (EndSessionException e) + { + /* done */ + } finally + { + } + dumpInfo(); + + System.err.println("Stack usage: " + (startStack-minStack)); + } + + private void dumpInfo() + { + dumpOpcodeHistogram(); + + //printMemoryHistorgram(); + } + + + private void dumpOpcodeHistogram() + { + System.out.println("Opcode histogram"); + dumpHistogram(opcodeHistogram, opcodeHistogramCycles); + System.out.println("Emulate histogram"); + dumpHistogram(emulateOpcodeHistogram, emulateOpcodeHistogramCycles); + System.out.println("Pair histogram"); + dumpHistogram(opcodePairHistogram, opcodePairHistogramCycles); + + + dumpGmon(); + + System.out.println("Grouping of LOADSP/STORESP/IM"); + printRange(64, 96); + printRange(96, 128); + printRange(128, 256); +// printRange(64, 65); +// printRange(65, 66); +// printRange(66, 64+32); +// printRange(96, 97); +// printRange(97, 98); +// printRange(98, 96+32); +// printRange(128, 129); +// printRange(129, 130); +// printRange(130, 131); +// printRange(131, 132); +// printRange(132, 133); +// printRange(252, 253); +// printRange(253, 254); +// printRange(254, 255); +// printRange(255, 256); + } + + + +// #define GMON_MAGIC "gmon" /* magic cookie */ +// #define GMON_VERSION 1 /* version number */ +// +// /* +// * Raw header as it appears on file (without padding): +// */ +// struct gmon_hdr +// { +// char cookie[4]; +// char version[4]; // a cyg_uint32, target-side endianness +// char spare[3 * 4]; +// }; +// +// /* types of records in this file: */ +// typedef enum +// { +// GMON_TAG_TIME_HIST = 0, GMON_TAG_CG_ARC = 1, GMON_TAG_BB_COUNT = 2 +// } +// GMON_Record_Tag; +// +// /* The histogram tag is followed by this header, and then an array of */ +// /* cyg_uint16's for the actual counts. */ +// +// struct gmon_hist_hdr +// { +// /* host-side gprof adapts to sizeof(void*) and endianness. */ +// /* It is assumed that the compiler does not insert padding around the */ +// /* cyg_uint32's or the char arrays. */ +// void* low_pc; /* base pc address of sample buffer */ +// void* high_pc; /* max pc address of sampled buffer */ +// cyg_uint32 hist_size; /* size of sample buffer */ +// cyg_uint32 prof_rate; /* profiling clock rate */ +// char dimen[15]; /* phys. dim., usually "seconds" */ +// char dimen_abbrev; /* usually 's' for "seconds" */ +// }; +// +// /* An arc tag is followed by a single arc record. self_pc corresponds to */ +// /* the location of an mcount() call, at the start of a function. from_pc */ +// /* corresponds to the return address, i.e. where the function was called */ +// /* from. count is the number of calls. */ +// +// struct gmon_cg_arc_record +// { +// void* from_pc; /* address within caller's body */ +// void* self_pc; /* address within callee's body */ +// cyg_uint32 count; /* number of arc traversals */ +// }; +// +// /* In theory gprof can also process basic block counts, as per the */ +// /* compiler's -fprofile-arcs flag. The compiler-generated basic block */ +// /* structure should contain a table of addresses and a table of counts, */ +// /* and the compiled code updates those counts. Current versions of the */ +// /* compiler (~3.2.1) do not output the table of addresses, and without */ +// /* that table gprof cannot process the counts. Possibly gprof should read */ +// /* in the .bb and .bbg files generated for gcov processing, but that does */ +// /* not happen at the moment. */ +// /* */ +// /* So for now gmon.out does not contain basic block counts and gprof */ +// /* operations that depend on it, e.g. --annotated-source, won't work. */ + + /** + * Write gmon.out file. + **/ + private void dumpGmon() + { + try + { + ByteArrayOutputStream b=new ByteArrayOutputStream(); + + +// /* +// * Raw header as it appears on file (without padding): +// */ +// struct gmon_hdr +// { +// char cookie[4]; +// char version[4]; // a cyg_uint32, target-side endianness +// char spare[3 * 4]; +// }; +// #define GMON_MAGIC "gmon" /* magic cookie */ +// #define GMON_VERSION 1 /* version number */ + +// dump binary memory gmon.out &profile_gmon_hdr ((char*)&profile_gmon_hdr + sizeof(struct gmon_hdr)) + b.write("gmon".getBytes()); + writeLong(b, 1); // version + b.write(new byte[3*4]); // spare + +// GMON_TAG_TIME_HIST = 0, GMON_TAG_CG_ARC = 1, GMON_TAG_BB_COUNT = 2 + +// append binary memory gmon.out &profile_tags[0] &profile_tags[1] + b.write(new byte[]{0}); // GMON_TAG_TIME_HIST + + +// +// // The gprof documentation claims that this should be the size in +// // bytes. The implementation treats it as a count. +// profile_hist_hdr.hist_size = (cyg_uint32) ((text_size + bucket_size - 1) / bucket_size); +// profile_hist_hdr.low_pc = _start; +// profile_hist_hdr.high_pc = (void*)((cyg_uint8*)_end - 1); +// // The prof_rate is the frequency in hz. The resolution argument is +// // an interval in microseconds. +// profile_hist_hdr.prof_rate = 1000000 / resolution; +// +// // Now allocate a buffer for the histogram data. +// profile_hist_data = (cyg_uint16*) malloc(profile_hist_hdr.hist_size * sizeof(cyg_uint16)); +// if ((cyg_uint16*)0 == profile_hist_data) { +// diag_printf("profile_on(): cannot allocate histogram buffer - ignored\n"); +// return; +// } +// memset(profile_hist_data, 0, profile_hist_hdr.hist_size * sizeof(cyg_uint16)); + + + +// struct gmon_hist_hdr +// { +// /* host-side gprof adapts to sizeof(void*) and endianness. */ +// /* It is assumed that the compiler does not insert padding around the */ +// /* cyg_uint32's or the char arrays. */ +// void* low_pc; /* base pc address of sample buffer */ +// void* high_pc; /* max pc address of sampled buffer */ +// cyg_uint32 hist_size; /* size of sample buffer */ +// cyg_uint32 prof_rate; /* profiling clock rate */ +// char dimen[15]; /* phys. dim., usually "seconds" */ +// char dimen_abbrev; /* usually 's' for "seconds" */ +// }; + + + // maximum 65536 buckets. + int length=memory.length*4; + if (length > 60000) + { + length=60000; + } + int buckets[]=new int[length]; + for (long i=0; i65535) + { + val=65535; + } + writeShort(b, val); + } + + OutputStream o=new FileOutputStream("gmon.out"); + b.writeTo(o); + o.flush(); + o.close(); + + } catch (IOException e) + { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + + + } + + + private void writeLong(ByteArrayOutputStream b, int i) throws IOException + { + int val=i; + b.write(new byte[]{(byte)((val>>24)&0xff), + (byte)((val>>16)&0xff), + (byte)((val>>8)&0xff), + (byte)((val>>0)&0xff)}); + } + + + private void writeShort(ByteArrayOutputStream b, int i) throws IOException + { + int val=i; + b.write(new byte[]{ (byte)((val>>8)&0xff), + (byte)((val>>0)&0xff)}); + } + + + private void dumpHistogram(long[] ms, long[] ms2) + { + List l=new LinkedList(); + + totalCycles = 0; + for (int i=0; i<256; i++) + { + totalCycles+=opcodeHistogramCycles[i]; + } + for (int i=0; i>(32-7); + + if (decodeMask) + { + int a; + a=(popIntStack()<<7)|(t&0x7f); + pushIntStack(a); + } else + { + pushIntStack(t); + } + decodeMask=true; + } else + { + decodeMask = false; + if (isAddSP(instruction)) + { + int offset=instruction - ADDSP; + int valAddr=sp+offset*4; + int a = popIntStack(); + pushIntStack(cpuReadLong(valAddr) + a); + } else if ((instruction >= LOADSP) && (instruction < LOADSP + 32)) + { + int addr; + addr = getSp(); + int offset=(instruction - LOADSP)^0x10; + addr += 4 * offset; + pushIntStack(cpuReadLong(addr)); + } else if (isStoreSP(instruction)) + { + int addr; + addr = getSp(); + int offset=(instruction - STORESP)^0x10; + addr += 4 * offset; + + cpuWriteLong(addr, popIntStack()); + } else + { + int addr; + int val; + switch (instruction) + { + case 0: + throw new DebuggerBreakpointException(); + + case PUSHPC: + pushIntStack(pc); + break; + case OR: + pushIntStack(popIntStack() | popIntStack()); + break; + case NOT: + pushIntStack(popIntStack() ^ 0xffffffff); + break; + case LOAD: + pushIntStack(cpuReadLong(popIntStack())); + break; + case PUSHSPADD: + if (feeble[PUSHSPADD]) + { + emulate(); + } else + { + int a; + int b; + a=sp; + b=popIntStack()*4; + pushIntStack(a+b); + } + break; + case STORE: + addr = popIntOrExt(); + val = popIntOrExt(); + cpuWriteLong(addr, val); + break; + case POPPC: + { + // NB!!!! does NOT flush internal stack + int a; + if (intSp>0) + { + a=popIntStack(); + } else + { + a=pop(); + } + + if ((sp>=emulateSp)&&(emulateInProgress)) + { + emulateInProgress=false; + /* we returned from an emulate instruction */ + emulateOpcodeHistogram[emulateOpcode]++; + emulateOpcodeHistogramCycles[emulateOpcode]+=cycles-emulateCycles; + } + + setPc(a); + break; + } + case POPPCREL: + if (feeble[POPPCREL]) + { + emulate(); + } else + { + setPc(popIntStack()+getPc()); + } + break; + case FLIP: + pushIntStack(flip(popIntStack())); + break; + case ADD: + pushIntStack(popIntStack() + popIntStack()); + break; + case SUB: + if (feeble[SUB]) + { + emulate(); + } else + { + int a=popIntStack(); + int b=popIntStack(); + pushIntStack(b-a); + } + break; + case PUSHSP: + pushIntStack(getSp()); + break; + case POPSP: + changeSp(popIntStack()); + intSp=0; // flush internal stack + break; + case NOP: + break; + case AND: + pushIntStack(popIntStack() & popIntStack()); + break; + case XOR: + if (feeble[XOR]) + { + emulate(); + } else + { + pushIntStack(popIntStack() ^ popIntStack()); + } + break; + case LOADB: + if (feeble[LOADB]) + { + emulate(); + } else + { + pushIntStack(cpuReadByte(popIntStack())); + } + break; + case STOREB: + if (feeble[STOREB]) + { + emulate(); + } else + { + addr = popIntStack(); + val = popIntStack(); + cpuWriteByte(addr, val); + } + break; + case LOADH: + if (feeble[LOADH]) + { + emulate(); + } else + { + pushIntStack(cpuReadWord(popIntStack())); + } + break; + case STOREH: + if (feeble[STOREH]) + { + emulate(); + } else + { + addr = popIntStack(); + val = popIntStack(); + cpuWriteWord(addr, val); + } + break; + case LESSTHAN: + if (feeble[LESSTHAN]) + { + emulate(); + } else + { + int a; + int b; + a = popIntStack(); + b = popIntStack(); + pushIntStack((a < b) ? 1 : 0); + } + break; + case LESSTHANOREQUAL: + if (feeble[LESSTHANOREQUAL]) + { + emulate(); + } else + { + int a; + int b; + a = popIntStack(); + b = popIntStack(); + pushIntStack((a <= b) ? 1 : 0); + } + break; + case ULESSTHAN: + if (feeble[ULESSTHAN]) + { + emulate(); + } else + { + long a; + long b; + a = ((long) popIntStack()) & INTMASK; + b = ((long) popIntStack()) & INTMASK; + pushIntStack((a < b) ? 1 : 0); + } + break; + case ULESSTHANOREQUAL: + if (feeble[ULESSTHANOREQUAL]) + { + emulate(); + } else + { + long a; + long b; + a = ((long) popIntStack()) & INTMASK; + b = ((long) popIntStack()) & INTMASK; + pushIntStack((a <= b) ? 1 : 0); + } + break; + + case SWAP: +// if (feeble[SWAP]) +// { +// emulate(); +// } else + { + int swapVal=popIntStack();; + pushIntStack(((swapVal >>16)&0xffff)|(swapVal<<16)); + } + break; + case MULT16X16: +// if (feeble[SWAP]) +// { +// emulate(); +// } else + { + int a=popIntStack(); + int b=popIntStack(); + pushIntStack((a&0xffff)*(b&0xffff)); + } + break; + case EQBRANCH: + if (feeble[EQBRANCH]) + { + emulate(); + } else + { + int compare; + int target; + target = popIntStack() + pc; + compare = popIntStack(); + if (compare == 0) + { + setPc(target); + } else + { + setPc(pc + 1); + } + } + break; + + case NEQBRANCH: + if (feeble[NEQBRANCH]) + { + emulate(); + } else + { + int compare; + int target; + target = popIntStack() + pc; + compare = popIntStack(); + if (compare != 0) + { + setPc(target); + } else + { + setPc(pc + 1); + } + } + break; + + case MULT: + if (feeble[MULT]) + { + emulate(); + } else + { + pushIntStack(popIntStack() * popIntStack()); + } + break; + case DIV: + if (feeble[DIV]) + { + emulate(); + } else + { + int a; + int b; + a = popIntStack(); + b = popIntStack(); + if (b == 0) + { + throw new CPUException(); + } + pushIntStack(a / b); + } + break; + case MOD: + if (feeble[MOD]) + { + emulate(); + } else + { + int a; + int b; + a = popIntStack(); + b = popIntStack(); + if (b == 0) + { + throw new CPUException(); + } + pushIntStack(a % b); + } + break; + + case LSHIFTRIGHT: + if (feeble[LSHIFTRIGHT]) + { + emulate(); + } else + { + long shift; + long valX; + int t; + shift = ((long) popIntStack()) & INTMASK; + valX = ((long) popIntStack()) & INTMASK; + t = (int) (valX >> (shift & 0x3f)); + pushIntStack(t); + } + break; + + case ASHIFTLEFT: + if (feeble[ASHIFTLEFT]) + { + emulate(); + } else + { + long shift; + long valX; + shift = ((long) popIntStack()) & INTMASK; + valX = ((long) popIntStack()) & INTMASK; + int t = (int) (valX << (shift & 0x3f)); + pushIntStack(t); + } + break; + + case ASHIFTRIGHT: + if (feeble[ASHIFTRIGHT]) + { + emulate(); + } else + { + long shift; + int valX; + shift = ((long) popIntStack()) & INTMASK; + valX = popIntStack(); + int t = valX >> (shift & 0x3f); + pushIntStack(t); + } + break; + + case CALL: + if (feeble[CALL]) + { + emulate(); + } else + { + intSp=0; // flush internal stack + int address = pop(); + push(pc + 1); + setPc(address); + } + break; + case CALLPCREL: + if (feeble[CALLPCREL]) + { + emulate(); + } else + { + intSp=0; // flush internal stack + int address = pop(); + push(pc + 1); + setPc(address+pc); + } + break; + + case EQ: + if (feeble[EQ]) + { + emulate(); + } else + { + pushIntStack((popIntStack() == popIntStack()) ? 1 : 0); + } + break; + + case NEQ: + if (feeble[NEQ]) + { + emulate(); + } else + { + pushIntStack((popIntStack() != popIntStack()) ? 1 : 0); + } + break; + + case NEG: + if (feeble[NEG]) + { + emulate(); + } else + { + pushIntStack(-popIntStack()); + } + break; + + + case CONFIG: + if (emulateConfig()) + { + emulate(); + cpu=ABEL; + } else + { + cpu = popIntStack(); + } + switch (cpu) + { + case ABEL: + System.err.println("ZPU feeble instruction set"); + for (int i = 0; i < feeble.length; i++) + { + feeble[i] = true; + } + + setFeeble(); + + break; + case ZETA: + System.err.println("ZPU full instruction set"); + for (int i = 0; i < feeble.length; i++) + { + feeble[i] = false; + } + break; + default: + break; + } + break; + + case SYSCALL: + if (feeble[SYSCALL]) + { + throw new IllegalInstructionException(); + } else + { + intSp=0; // flush internal stack + syscall.syscall(this); + } + break; + + default: + throw new IllegalInstructionException(); + } + } + } + if (!touchedPc) + { + setPc(pc + 1); + } + committed(); + + // one more instruction retired + instructionCount++; + } + } + + + protected void setFeeble() + { + feeble[NEQBRANCH] = false; + feeble[EQ] = false; + feeble[LOADB] = false; + feeble[LESSTHAN] = false; + feeble[ULESSTHAN] = false; + feeble[STOREB] = false; + feeble[MULT] = false; + feeble[CALL] = true; + feeble[POPPCREL] = true; + feeble[LESSTHANOREQUAL] = true; + feeble[ULESSTHANOREQUAL] = true; + + feeble[PUSHSPADD] = false; + feeble[CALLPCREL] = false; + feeble[SUB] = false; + } + + + private int popIntOrExt() + { + int a; + if (intSp==0) + { + a=pop(); + } else + { + a=popIntStack(); + } + return a; + } + + int intSp; + + private int emulateSp; + + private int emulateOpcode; + + private boolean emulateInProgress; + + protected boolean timerPending; + + private boolean inInterrupt; + private int popIntStack() + { +// if (intSp<=0) +// throw new IllegalInstructionException(); + intSp--; + return pop(); + } + + private void pushIntStack(int x) + { +// if (intSp>=32) +// throw new IllegalInstructionException(); + push(x); + intSp++; + } + + + + private static boolean isAddSP(int instruction) + { + return (instruction >= ADDSP) && (instruction < ADDSP + 16); + } + + + private static boolean isStoreSP(int instruction) + { + return (instruction >= STORESP) && (instruction < STORESP + 32); + } + + + protected boolean emulateConfig() + { + return false; + } + + + private void checkCommit() throws CPUException + { + if (!commit) + { + decodeMask=savedDecodeMask; + pc=savedPc; + setSp(savedSp); + committed(); + } + } + + + private void committed() + { + commit=true; + tracer.commit(); + } + + + private void emulate() throws CPUException + { + // NB! Do NOT flush internal stack +// intSp=0; // flush internal stack + /* three total overhead to emulate instruction */ + if (!emulateInProgress) + { + emulateInProgress=true; + emulateSp = sp; + emulateOpcode = getOpcode(); + emulateCycles = cycles; + } + pushIntStack(pc+1); + setPc((cpuReadByte(pc)-32)*VECTORSIZE+VECTORBASE); + } + + + + private void checkInterrupts() throws InterruptException + { + if (!tracer.simInterrupt()) + { + /* These flags are set *regardless* of interrupt state. */ + while (lastTimer+timerInterval0) + { + lastTimer+=timerInterval; + } else + { + lastTimer=cycles; + } + timerPending=true; + } + } + + if (!interrupt) + return; + + /* if we are in the middle of decoding an instruction, no interrupt */ + if (decodeMask) + { + return; + } + if (tracer.simInterrupt()) + { + if (!tracer.onInterrupt()) + { + inInterrupt=false; + } + if (inInterrupt) + { + return; + } + /* Use trace information instead of trying to figure out when an interrupt happens. We don't try + * to simulate anything more complicated than timer interrupts so we don't need to worry about source. + */ + + if (tracer.onInterrupt()&&!inInterrupt) + { + if (!timer) + { + throw new IllegalInstructionException(); + } + + inInterrupt=true; + timerPending=true; + throw new InterruptException(); + } + + } else + { + if (!timerPending) + inInterrupt=false; + + if (inInterrupt) + { + return; + } + + if (timer&&timerPending) + { + inInterrupt=true; + throw new InterruptException(); + } + } + } + + + + + private void cpuWriteWord(int addr, int val) throws MemoryAccessException + { + if ((addr&0x1)!=0) + { + throw new MemoryAccessException(); + } + for (int i=0; i<2; i++) + { + writeByte(addr+i, val>>(8*(1-i))); + } + } + + /** + * @param i + * @return + * @throws MemoryAccessException + */ + private int cpuReadWord(int addr) throws MemoryAccessException + { + if ((addr&0x1)!=0) + { + throw new MemoryAccessException(); + } + return ((readByteInternal(addr+0)&0xff)<<8) | (readByteInternal(addr+1)&0xff); + } + + private void cpuWriteByte(int addr, int val) throws MemoryAccessException + { + writeByte(addr, val); + } + + + protected boolean interrupt; + protected long timerInterval; + private boolean touchedPc; + + private boolean accessWatchPoint; + + private int accessWatchPointAddress; + + private int accessWatchPointLength; + + private boolean commit; + + private boolean savedDecodeMask; + + private int savedSp; + + private int savedPc; + + private long[] profile; + + private int cpu; + + private long sampledCycle; + + private Tracer tracer=new Tracer() + { + + public void instructionEvent() + { + + } + + public void commit() + { + } + + public void setSp(int sp) + { + } + + public void dumpTraceBack() + { + + } + + public boolean onInterrupt() + { + return false; + } + + public boolean simInterrupt() + { + return false; + } + + }; + + private int instruction; + + private long totalCycles; + + + private String traceFileName; + + private int prevOpcode; + + private long prevCycles2; + + private int prevOpcode2; + + + + + /** + * checks if the CPU should halt, and halts. Fn. returns when the + * CPU has resumed execution. + * @throws EndSessionException + */ + private void checkHalt() throws EndSessionException + { + synchronized(halt) + { + if (powerdown) + { + throw new EndSessionException(); + } + + if (breakNext) + { + breakNext=false; + + halt.notify(); + try + { + syscall.halted(); + halt.wait(); + syscall.running(); + } catch (InterruptedException e) + { + e.printStackTrace(); + } + } + + if (powerdown) + { + throw new EndSessionException(); + } + } + } + + private int flip(int i) + { + int t=0; + for (int j=0; j<32; j++) + { + t|=((i>>j)&1)<<(31-j); + } + return t; + } + + /** the CPU is writing a long during execution */ + public void cpuWriteLong(int addr, int val) throws MemoryAccessException + { + if (accessWatchPoint&&(addr==accessWatchPointAddress)) + { + suspend(); + } + if ((addr&0x3)!=0) + { + throw new MemoryAccessException(); + } + if ((addr>=getIO())&&(addr=0)&&(addr<=memory.length*4)) + { + memory[addr/4]=val; + validMemory[addr/4]=true; + } else + { + throw new MemoryAccessException(); + } + } + + public void writeByte(int addr, int val) throws MemoryAccessException + { + if ((addr>=0)&&(addr>(((addr-base)/4)*32))&0xffffffff); + return t; + } + + + + private int cpuReadByte(int addr) throws MemoryAccessException + { + return readByteInternal(addr); + } + + + /** this is the CPU reading a long word during execution */ + public int cpuReadLong(int addr) throws CPUException + { + if (accessWatchPoint&&(addr==accessWatchPointAddress)) + { + suspend(); + } + if ((addr&0x3)!=0) + { + throw new MemoryAccessException(); + } + if ((addr>=getIO())&&(addr=0)&&(addr<=memory.length*4)) + { + return memory[addr/4]; + } else + { + throw new MemoryAccessException(); + } + } + + /** + * Causes a cycle to pass. + * @throws MemoryAccessException + */ + /** increase time and record how long we spent on this instruction */ + private void tick() throws MemoryAccessException + { + profile[pc]++; + int opcode; + opcode=readByte(pc); + opcodeHistogram[prevOpcode]++; + opcodeHistogramCycles[prevOpcode]+=cycles-prevCycles; + int opcodePair=groupOpcode(prevOpcode2)*256+groupOpcode(prevOpcode); + + opcodePairHistogram[opcodePair]++; + opcodePairHistogramCycles[opcodePair]+=cycles-prevCycles2; + + prevOpcode2=prevOpcode; + prevOpcode=opcode; + + + + prevCycles2=prevCycles; + prevCycles=cycles; + cycles++; + } + + private int groupOpcode(int instruction) + { + if (isAddSP(instruction)) + { + return ADDSP; + } else if ((instruction >= LOADSP) && (instruction < LOADSP + 32)) + { + return LOADSP; + } else if (isStoreSP(instruction)) + { + return STORESP; + } + + if ((instruction&0x80)!=0) + return 0x80; + return instruction; + } + + + public int readByte(int addr) throws MemoryAccessException + { + if ((addr>=0)&&(addr>((3-addr&0x3)*8))&0xff; + } + + private int pop() throws CPUException + { + int val; + validMemory[getSp()/4]=false; + val=cpuReadLong(getSp()); + setSp(getSp() + 4); + return val; + } + + private void push(int imm) throws CPUException + { + setSp(getSp() - 4); + cpuWriteLong(getSp(), imm); + } + + private final class OpcodeSample + { + private final int j; + + int opcode; + + long count; + + private OpcodeSample(int j, long l) + { + this.j = j; + opcode = j; + count = l; + } + } + + + + + private void initRam() + { + memory = (new int[getRAMSIZE()/4]); + validMemory = new boolean[getRAMSIZE()/4]; + for (int i=0; imemory.length*4)) + { + throw new MemoryAccessException(); + } + this.pc = pc; + touchedPc=true; + } + + public int getPc() + { + return pc; + } + + /** resume execution. This function returns when the CPU halts again. */ + public void cont() + { + for (;;) + { + synchronized(halt) + { + halt.notify(); + try + { + halt.wait(); + } catch (InterruptedException e) + { + e.printStackTrace(); + } + } + if (syscall.doneContinue()) + { + break; + } + } + } + + /** resume execution. This function returns when the CPU halts again. */ + public void step() + { + synchronized(halt) + { + suspend(); + cont(); + } + } + + + + public int getReg(int regNum) throws CPUException + { + if ((regNum>=0)&&(regNum<32)) + { + return memory[regNum]; + } else if (regNum==32) + { + return getSp(); + } else if (regNum==33) + { + return pc; + } else + { + throw new RuntimeException("Illegal getReg()"); + } + } + + public int getREGNUM() + { + return 34; + } + + public long getCycleCounter() + { + return cycles; + } + + public void addWaitStates(int num) + { + } + + /** tells simulator to enter the suspended state */ + public void suspend() + { + synchronized(halt) + { + breakNext=true; + } +// tracer.dumpTraceBack(); + } + + + public long getPrevCycles() + { + return prevCycles; + } + + public long getCycles() + { + return cycles; + } + + + public void enableAccessWatchPoint(int address, int length) throws CPUException + { + if (accessWatchPoint) + { + throw new HardwareWatchPointException(); + } + accessWatchPointAddress=address; + accessWatchPointLength=length; + accessWatchPoint=true; + } + public void disableAccessWatchPoint(int address, int length) throws CPUException + { + if (!accessWatchPoint) + { + throw new HardwareWatchPointException(); + } + if ((address!=accessWatchPointAddress)||(length!=accessWatchPointLength)) + { + throw new HardwareWatchPointException(); + } + + accessWatchPoint=false; + } + + /** POPSP changes the stack pointer */ + public void changeSp(int sp) throws CPUException + { + setSp(sp); + tracer.setSp(sp); + } + + public void setSp(int sp) throws CPUException + { + if ((sp%4)!=0) + { + throw new IllegalInstructionException(); + } + + if (sppad.length()) + { + t=t.substring(0, pad.length()); + } + return pad.substring(0, pad.length()-t.length())+t; + } + + public void write(byte[] bytes) throws IOException + { + int i=0; + while (i0) + { + writeBuffer.flip(); + int len=writeBuffer.limit(); + + int j=0; + while (j0?0:1; + } catch (IOException e) + { + e.printStackTrace(); + } + return 1; + } + + public void halted() + { + // TODO Auto-generated method stub + + } + + public void running() + { + // TODO Auto-generated method stub + + } +} diff --git a/zpu/sw/simulator/com/zylin/zpu/simulator/gdb/Packet.java b/zpu/sw/simulator/com/zylin/zpu/simulator/gdb/Packet.java new file mode 100644 index 0000000..7925bd5 --- /dev/null +++ b/zpu/sw/simulator/com/zylin/zpu/simulator/gdb/Packet.java @@ -0,0 +1,455 @@ +/* + * Created on Nov 16, 2004 + * + * To change the template for this generated file go to + * Window - Preferences - Java - Code Generation - Code and Comments + */ +package com.zylin.zpu.simulator.gdb; + +import java.io.IOException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import com.zylin.zpu.simulator.exceptions.BadPacketException; +import com.zylin.zpu.simulator.exceptions.CPUException; +import com.zylin.zpu.simulator.exceptions.EndSessionException; +import com.zylin.zpu.simulator.exceptions.GDBServerException; +import com.zylin.zpu.simulator.exceptions.MemoryAccessException; +import com.zylin.zpu.simulator.exceptions.NoAckException; +import com.zylin.zpu.simulator.exceptions.UnknownPacketException; + + +/** all packet related operations */ +class Packet +{ + private final GDBServer server; + + Packet(GDBServer server) + { + this.server = server; + reply=new StringBuffer(); + } + + void receive() throws IOException, GDBServerException, EndSessionException + { + int t; + /* we spool until we see a $ */ + this.server.expect('$'); + + StringBuffer packet=new StringBuffer(); + + int cc=0; + for (;;) + { + int t1; + t1=this.server.read(); + t = t1; + if (t==0x7d) + { + int t2; + t2=this.server.read(); + /* the next char is escaped after a GDB specific scheme. See + * gdb/gdb/remote.c */ + t = t2; + t^=0x20; + } else + { + if (t=='#') + { + break; + } + } + + cc+=t; + + packet.append((char)t); + } + cc&=0xff; + + String checkSum; + checkSum=""+(char)this.server.read()+(char)this.server.read(); + int readCheckSum; + readCheckSum=Integer.parseInt(checkSum, 16); + if (readCheckSum!=cc) + { + // error + dumpHex(packet.toString()); + + this.server.write("-".getBytes()); + throw new BadPacketException(); + } else + { + // ack + this.server.write("+".getBytes()); + } + + cmd=packet.toString(); + this.server.print(GDBServer.PACKET, "Got " + number + ": #$" + cmd + "#" + checkSum); + origCmd=cmd; + } + + void parseAndExecute() throws IOException, EndSessionException + { + boolean silent=false; + try + { + if (checkPrefix("g")) + { + readRegisters(); + } else if (checkPrefix("?")) + { + querySignal(); + } else if (checkPrefix("s")) + { + doStep(); + } else if (checkPrefix("m")) + { + try + { + readMemory(); + } catch (CPUException e) + { + silent=true; // happens all the time while hovering over variables in the GUI + throw e; + } + } else if (checkPrefix("c")) + { + continueExecution(); + } else if (checkPrefix("M")) + { + writeMemory(); + } else if (checkPrefix("z4")) + { + disableAccessWatchPoint(); + } else if (checkPrefix("Z4")) + { + enableAccessWatchPoint(); + } else if (checkPrefix("k")) + { + /* we must send a reply, but not wait for ack before we shut down + the connection. + */ + server.alive=false; + reply("OK"); + } else + { + throw new UnknownPacketException(); + } + } catch (UnknownPacketException e) + { + this.server.print(GDBServer.UNKNOWN, "Unknown packet: " + origCmd); + // empty reply to unknown packets + } catch (CPUException e) + { + if (!silent) + { + this.server.print(GDBServer.CPUEXCEPTION, "Exception handling GDB request"); + if (GDBServer.CPUEXCEPTION) + { + e.printStackTrace(); + } + } + reply("E01"); + } catch (GDBServerException e) + { + e.printStackTrace(); + reply("E01"); + } catch (RuntimeException e) + { + e.printStackTrace(); + reply("E01"); + } + } + + private void checkEmpty() throws GDBServerException + { + if (cmd.length()>0) + { + throw new GDBServerException(); + } + } + private void dumpHex(String arrayList2) + { + for (int i=0; i4) + { + byte[] tmp=new byte[4]; + file.read(tmp); + int word=0; + for (int j=0; j<4; j++) + { + word|=((int)(tmp[j])&0xff)<<((3-j)*8); + } + String str=Integer.toHexString(word); + while (str.length()<8) + { + str="0"+str; + } + + System.out.println(str); + i++; + } + } + +} diff --git a/zpu/sw/simulator/com/zylin/zpu/simulator/tools/MakeRam.java b/zpu/sw/simulator/com/zylin/zpu/simulator/tools/MakeRam.java new file mode 100644 index 0000000..4a7b233 --- /dev/null +++ b/zpu/sw/simulator/com/zylin/zpu/simulator/tools/MakeRam.java @@ -0,0 +1,39 @@ + +package com.zylin.zpu.simulator.tools; + +import java.io.FileInputStream; +import java.io.IOException; + +public class MakeRam +{ + public static void main(String[] args) throws IOException + { + new MakeRam().run(args[0]); + } + + private void run(String string) throws IOException + { + FileInputStream file=new FileInputStream(string); + + int i=0; + while (file.available()>4) + { + byte[] tmp=new byte[4]; + file.read(tmp); + int word=0; + for (int j=0; j<4; j++) + { + word|=((int)(tmp[j])&0xff)<<((3-j)*8); + } + String str=Integer.toHexString(word); + while (str.length()<8) + { + str="0"+str; + } + + System.out.println("" + i + " => x\"" + str + "\","); + i++; + } + } + +} diff --git a/zpu/sw/simulator/com/zylin/zpu/stats/CountSequences.java b/zpu/sw/simulator/com/zylin/zpu/stats/CountSequences.java new file mode 100644 index 0000000..0f06aec --- /dev/null +++ b/zpu/sw/simulator/com/zylin/zpu/stats/CountSequences.java @@ -0,0 +1,94 @@ +/* + * Created on Jan 18, 2005 + * + * TODO To change the template for this generated file go to + * Window - Preferences - Java - Code Style - Code Templates + */ +package com.zylin.zpu.stats; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; + +import com.zylin.zpu.simulator.Machine; + +public class CountSequences implements Machine +{ + + private byte[] array; + private StatKeeper statKeeper; + + public static void main(String[] args) + { + new CountSequences().run(args[0]); + } + + private void run(String string) + { + try + { + File file=new File(string); + if (file.exists()) + System.out.println("It exists!"); + FileInputStream in=new FileInputStream(file); + + try + { + array=new byte[(int) file.length()]; + + if (in.read(array)!=array.length) + throw new IOException(); + + countStats(); + + statKeeper.printStats(); + } finally + { + in.close(); + } + + } catch (FileNotFoundException e) + { + e.printStackTrace(); + } catch (IOException e) + { + e.printStackTrace(); + } + + + } + + + private void countStats() + { + statKeeper=new StatKeeper(this); + for (int i=0; i=64)&&(j<96)) +// { +// j=64; +// } else if ((j>=96)&&(j<128)) +// { +// j=96; +// } else if ((j>=128)&&(j<256)) +// { +// j=128; +// } + statKeeper.countInstruction(j); + } + + } + + public long getPrevCycles() + { + return 0; + } + + public long getCycles() + { + return 0; + } +} diff --git a/zpu/sw/simulator/com/zylin/zpu/stats/DumpIt.java b/zpu/sw/simulator/com/zylin/zpu/stats/DumpIt.java new file mode 100644 index 0000000..80be11d --- /dev/null +++ b/zpu/sw/simulator/com/zylin/zpu/stats/DumpIt.java @@ -0,0 +1,17 @@ +/* + * Created on 26.nov.2004 + * + * To change the template for this generated file go to + * Window - Preferences - Java - Code Generation - Code and Comments + */ +package com.zylin.zpu.stats; +/** + * @author oyvind + * + * To change the template for this generated type comment go to + * Window - Preferences - Java - Code Generation - Code and Comments + */ +public interface DumpIt +{ + int dumpIt(int i); +} \ No newline at end of file diff --git a/zpu/sw/simulator/com/zylin/zpu/stats/Instruction.java b/zpu/sw/simulator/com/zylin/zpu/stats/Instruction.java new file mode 100644 index 0000000..252dd7f --- /dev/null +++ b/zpu/sw/simulator/com/zylin/zpu/stats/Instruction.java @@ -0,0 +1,62 @@ +package com.zylin.zpu.stats; + +public class Instruction +{ + public class DumpCycles implements DumpIt + { + public int dumpIt(int i) + { + return insn[i].cycles; + } + } + + + + public Instruction[] insn=new Instruction[256]; + public int count; + public int cycles; + + public Instruction addInstruction(int i) + { + if (insn[i]==null) + { + insn[i]=new Instruction(); + } + return insn[i]; + } + + /** + * Recursive print of statistics + */ + public void printStats() + { + System.out.println("Count dump"); + DumpIt cDump = new DumpCount(); + printCount("", cDump); + } + + /** + * Recursive print of counts + * @param string + * @param dumpIt TODO + */ + private void printCount(String string, DumpIt dumpIt) + { + for (int i=0; i